MSA의 비동기적(Asynchronous) 통신

MSA에서 비동기적 통신을 정리하기 위한 글!

 

1. 비동기(Asynchronous) 통신

비동기 통신은 서비스 간 요청과 응답이 즉각적으로 이루어지지 않고, 메시지를 보내고 나서 별도로 응답을 기다리지 않는 방식이다.

이 방식은 서비스 간의 결합도를 낮추고 확장성을 높이며, 트래픽 폭증 시에도 안정적인 처리를 가능하게 한다.

 

대표적인 비동기 통신 방식으로는 메시지 큐이벤트 기반 아키텍쳐가 있다.

 

 

2. 메시지 큐 (Kafka, RabbitMQ)


 

개념

메시지 큐는 생산자(Producer)가 메시지를 생성하여 큐(Queue)에 넣고, 소비자(Consumer)가 메시지를 가져가서 처리하는 방식이다.

메시지 브로커가 중간에서 메시지를 관리하고, 보장된 순서로 메시지를 전달하며, 특정 메시지가 손실되지 않도록 방지할 수도 있다.

 

대표적인 메시지 큐 솔루션

  • Apache Kafka -> 대량 데이터 스트리밍 처리에 강함 (분산 로그 시스템)
  • RabbitMQ -> 경량 메시지 처리에 유리하며, 다양한 패턴을 지원 

 

동작 방식

1. 생산자(Producer): 메시지를 브로커에 보냄

2. 메시지 브로커(Message Broker): 메시지를 저장하고 큐에서 관리

3. 소비자(Consumer): 브로커에서 메시지를 가져와 처리

 

장단점

장점
✔️ 비동기 처리: 요청을 보낸 후 즉시 반환되므로 서비스 응답 속도가 향상됨
✔️ 서비스 간 결합도 감소: 소비자가 메시지를 가져가므로 서비스 간 직접 호출이 없음
✔️ 부하 분산: 여러 소비자가 메시지를 처리하여 시스템 확장이 용이함
✔️ 메시지 보장(지속성): Kafka와 RabbitMQ는 메시지를 로그로 저장하여 손실 방지

 

단점
구현 및 운영의 복잡성: 브로커 설정, 메시지 모니터링, 장애 처리 필요
메시지 중복 및 순서 문제: 메시지 처리 순서를 보장하려면 추가적인 작업 필요
실시간 요청에 부적합: 요청-응답 구조보다 처리 시간이 길어질 수 있음

 

 

2. 이벤트 기반 아키텍처 (Event-Driven Architecture)


 

개념

이벤트 기반 아키텍처는 한 서비스에서 발생한 이벤트를 다른 서비스가 감지하고 반응하는 방식이다.

서비스 간 결합도를 최소화할 수 있으며, 이벤트를 활용하여 확장성이 뛰어난 시스템을 구축할 수 있다.

 

1. 이벤트 발생

2. 이벤트 발행

3. 이벤트 감지 후 처리 

 

서비스 간 직접적인 API 호출 없이 비동기 이벤트 처리가 가능

 

이벤트 기반 방식들 비교

방식 설명 장점 단점
Event Sourcing 모든 상태 변화를 이벤트 로그로 저장 변경 이력 추적 가능, 데이터 복구 가능 복잡한 저장 방식, 성능 문제 가능
Choreography 서비스가 서로 이벤트를 감지하고 실행 확장성이 뛰어남, 서비스 독립성 증가 이벤트 흐름이 복잡해질 수 있음
Orchestration 중앙 조정자가 이벤트를 제어 서비스 간 흐름을 쉽게 관리 가능 중앙집중화로 단일 장애점 발생 가능

 

사용 사례 및 장단점

사용 사례
✔️ 주문 처리 시스템 (결제 완료 → 배송 시스템 자동 호출)
✔️ 로그 및 분석 시스템 (사용자 행동 로그를 실시간으로 분석)
✔️ 실시간 알림 시스템 (이메일, 푸시 알림 등)

 

장점
✔️ 서비스 간 결합도 감소 (이벤트 기반이므로 직접 호출 불필요)
✔️ 확장성 증가 (새로운 서비스 추가가 용이)
✔️ 고성능 및 비동기 처리 (대량의 이벤트 처리 가능)

 

단점
이벤트 흐름 관리 어려움 (Choreography 방식의 경우)
디버깅 및 추적 어려움 (분산된 이벤트 로그)
일관성 문제 발생 가능 (데이터 동기화 관리 필요)

 

 

4. 정리

 

즉각적인 데이터 처리가 필요하면? 

 

메시지 큐

 

확장성과 비동기 이벤트 처리가 중요하면?

 

이벤트 기반 아키텍처