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. 정리
즉각적인 데이터 처리가 필요하면?
메시지 큐
확장성과 비동기 이벤트 처리가 중요하면?
이벤트 기반 아키텍처
'Spring' 카테고리의 다른 글
멀티 모듈에서 타 모듈의 Bean 등록 오류 (0) | 2025.02.28 |
---|---|
MSA 통신의 제로 페이로드(Zero Payload) (0) | 2025.02.28 |
MSA의 동기적 (Synchronous) 통신 (0) | 2025.02.28 |
MSA란? (0) | 2025.02.27 |
OpenFeign으로 API 호출 자동화하기 (0) | 2025.02.27 |