MSA (마이크로서비스 아키텍처)
마이크로서비스 아키텍처는 하나의 애플리케이션을 업무 기능 단위의 작은 서비스로 나눈 구조다. 각 서비스는 자기 프로세스에서 독립적으로 개발되고 배포되며, 경량 프로토콜로 서로 협력한다. 정보관리기술사 시험에서도 1교시 용어와 4교시 논술로 반복 출제되니 정의와 원리를…
주요 장면
대본
MSA의 정의
마이크로서비스 아키텍처는 하나의 애플리케이션을 업무 기능 단위의 작은 서비스로 나눈 구조다.
각 서비스는 자기 프로세스에서 독립적으로 개발되고 배포되며, 경량 프로토콜로 서로 협력한다.
정보관리기술사 시험에서도 1교시 용어와 4교시 논술로 반복 출제되니 정의와 원리를 정확히 익혀야 한다.
구조: 게이트웨이와 독립 서비스
외부 요청은 API 게이트웨이가 단일 진입점으로 받아 인증과 라우팅을 맡는다.
그 뒤로 주문, 결제, 재고처럼 업무 기능마다 독립된 서비스가 놓인다.
각 서비스는 자기 데이터 저장소만 소유하고, 서비스 간에는 REST나 gRPC, 메시징으로 통신한다.
모놀리스와 MSA 비교
모놀리스는 애플리케이션 전체를 하나의 단위로 빌드하고 배포한다.
확장도 기능별이 아니라 애플리케이션 전체를 복제하는 방식으로만 가능하다.
MSA에서는 배포와 확장의 단위가 서비스가 되고, 데이터도 서비스별로 나뉜다.
통신 방식과 장애 격리
앞 문제의 정답은 전체 애플리케이션을 함께 늘리는 것이다. 이제 서비스 간 통신을 본다.
동기 방식은 구현이 단순하지만 호출 체인이 길어지면 장애가 전파된다.
비동기 방식은 결합도를 낮추지만 메시지 순서와 정합성 관리가 필요하다.
장애 전파는 Circuit Breaker로 끊고, 여러 서비스에 걸친 거래는 Saga로 맞춘다.
쇼핑몰 사례
이 사례는 설명을 위한 가상의 쇼핑몰이다. 주문, 결제, 재고, 회원이 모놀리스 하나로 운영된다고 가정한다.
이벤트 시즌에 결제 기능만 늘리고 싶지만 전체를 함께 늘려야 하므로, 결제를 독립 서비스로 분리한다.
분리 후에는 결제 서비스만 늘리고, 결제 완료 이벤트는 메시지 큐로 재고에 전달한다. 결제 장애는 Circuit Breaker로 차단한다.
헷갈리는 점과 흔한 실수
MSA 설계에서 가장 흔한 실수는 서비스를 기술 계층으로 나누는 것이다.
분할 기준은 UI나 DB가 아니라 비즈니스 능력, 곧 바운디드 컨텍스트여야 한다.
서비스 메시를 MSA 자체로 오해하는 것도 실수다. 서비스 메시는 운영을 돕는 인프라 계층이다.
또 서비스가 DB를 공유하면 독립 배포와 독립 확장이 깨진다.
정리
정리하면, MSA는 비즈니스 기능 단위의 독립 서비스 집합이다.
독립 배포와 독립 확장, 장애 격리가 특징이고, 대가는 분산 트랜잭션과 운영 복잡도다.
서비스 메시는 트래픽과 보안, 관찰성을 코드 변경 없이 처리하는 인프라 계층이다.