MSA란?

1. 개요

1) MSA란?

MSA(Microservices Architecture)는 하나의 애플리케이션을 여러 개의 독립적인 서비스로 구성하는 아키텍처 패턴이다.

각 서비스는 특정한 비즈니스 기능을 담당하며, 독립적으로 배포 및 확장이 가능하다.

 

하지만, 이러한 구조에서는 개별 서비스가 단독으로 동작하는 것이 아니라, 다른 서비스와 데이터를 주고받으며 협력해야 한다. 따라서 서비스 간 원활한 통신이 필수적이다.

 

서비스 간 통신이 필요한 이유는 다음의 예시로 설명할 수 있다.

 

1. 데이터 공유 및 처리

  • 특정 서비스에서 관리하는 데이터를 다른 서비스에서도 활용해야 하는 경우
  • ex)  주문 서비스가 사용자 서비스에서 고객 정보를 가져와야 하는 경우

2. 업무 프로세스의 연속성

  • 하나의 비즈니스 로직이 여러 서비스에 걸쳐 수행될 때
  • ex) 사용자가 상품을 결제하면, 결제 서비스 -> 주문 서비스 -> 배송 서비스 순으로 처리가 진행되는 경우

3. 확장성과 독립적 배포

  • 각 서비스가 독립적으로 배포되기 때문에, 서로 다른 서비스 간의 인터페이스를 통해 협력해야 한다.
  • ex)  특정 서비스가 트래픽이 증가해 확장이 필요하더라도, 다른 서비스와의 통신이 원활해야 한다.

4. 서비스 분리 및 유지보수성 향상

  • 단일 애플리케이션에서는 모든 기능이 한 코드베이스에서 이루어지지만, MSA에서는 각 기능이 독립적인 서비스로 분리됨
  • ex)  결제 서비스에 장애가 발생해도, 상품 서비스는 정상적으로 운영될 수 있다.

 

2) 서비스 간 통신 방식의 주요 분류

 

서비스 간 통신 방식은 크게 동기(Synchronous) 통신과 비동기(Asynchronous) 통신으로 나뉜다.

 

1. 동기(Synchronous) 통신

동기 방식은 요청을 보낸 서비스가 응답을 받을 때까지 기다리는 방식이다.

대표적인 방식은 아래와 같다.

 

  1. REST API (HTTP)
    • 가장 일반적
    • JSON 또는 XML 형태의 데이터를 주고 받는다.
    • 구현이 간단하지만, 네트워크 지연에 취약
  2. gRPC
    • Google에서 개발한 고성능 RPC(Remote Procedure Call) 프레임워크
    • Protocol Buffers(ProtoBuf) 기반의 이진 데이터 전송을 사용하여 성능이 뛰어나다.
    • 다중 언어 지원 가능
  3. GraphQL
    • 클라이언트가 필요한 데이터만 요청할 수 있는 쿼리 언어
    • REST API보다 유연하지만, 캐싱이 어렵고 복잡도가 증가할 수 있다.

실시간 응답이 필요하거나 요청과 응답의 흐름이 명확한 경우 적합하다.

 

2. 비동기(Asynchronous) 통신

비동기 방식은 요청을 보낸 후 즉시 반환하고, 응답이 준비되었을 때 비동기적으로 처리하는 방식.

대표적인 방식은 아래와 같다.

 

  1. 메시지 큐 (Kafka, RabbitMQ)
    • 중간 브로커를 활용하여 서비스 간 데이터를 주고받는다
    • 발행과 구독 방식으로 확장성 좋음
    • 네트워크 지연이 발생해도 메시지가 손실되지 않음
  2. 이벤트 기반 아키텍쳐
    • 특정 서비스에서 이벤트를 발생시키면, 다른 서비스가 이를 감지하고 처리함
    • 이벤트 소싱(Event Sourcing), 이벤트 브로커 등을 활용
    • 서비스 간 결합도를 낮추고 확장성을 높여줌

서비스 간 결합도를 낮추고 대량의 데이터를 처리할 때 좋음.