| 항목 | Feign Client (HTTP) | Kafka / RabbitMQ (Messaging) |
|---|---|---|
| 통신 방식 | 동기 (Synchronous) | 비동기 (Asynchronous) |
| 응답 기대 | 즉시 응답 필요 | 응답 없어도 됨 (Event-driven) |
| 실패 처리 | 호출 시점에서 예외 발생 | 재시도, 큐 적재 등으로 처리 |
| 흐름 제어 | 호출자가 제어 | 메시지 큐 또는 브로커가 제어 |
| 전송 보장 | 기본은 1회 전송 | 보통 최소 1회 / 정확히 1회 등 보장 설정 가능 |
비동기 처리로 성능 분산
강한 결합도 해소
내결함성(Fault Tolerance) 향상
확장성과 유연한 소비
이벤트 소싱 및 로그 기반 처리 가능
주문->결제 와 같이 결과가 즉시 필요한 경우 Feign으로 동기 처리
주문->배송 시작, 알림 전송 과 같은 경우는 Kafka/RabbitMQ로 비동기 처리
데이터 집계, 로그 저장, 알림 브로드캐스트 의 경우에는 Kafka(pub/sub) 이용
| 구분 | Kafka | RabbitMQ |
|---|---|---|
| 메시징 모델 | 로그 기반 Pub/Sub | 큐 기반 Message Broker |
| 주 사용 목적 | 스트리밍, 이벤트 소싱, 대규모 로그 처리 | 일반적인 비동기 메시징, 작업 큐 |
| 처리량 (Throughput) | 매우 높음 (수십만 TPS 가능) | 중간 (수천~수만 TPS 적정) |
| 지연 시간 (Latency) | 낮음, 하지만 기본적으로는 일괄 처리 중심 | 낮음, 단건 메시지 처리에 강함 |
| 메시지 보관 | 메시지를 오래 저장 (디스크 기반 로그 유지) | 소비 후 삭제 (기본값) |
| 내구성 / 장애 복구 | 높은 내구성 (다중 브로커, 로그 복구) | HA 설정 시 복구 가능하지만 기본은 큐 중심 |
| 메시지 순서 보장 | 파티션 내 순서 보장 | 큐 내 순서 보장 (하지만 소비자가 많으면 순서 깨질 수 있음) |
| 컨슈머 처리 방식 | Pull 방식 (컨슈머가 직접 가져감) | Push 방식 (브로커가 보내줌) |
| 운영 복잡도 | 상대적으로 높음 (Zookeeper or KRaft) | 상대적으로 낮음 |
1. 데이터 처리량이 많고 스트리밍이 필요한 경우 -> Kafka
대량의 이벤트/로그를 실시간으로 처리해야 할 때
메시지를 수일~수주 간 저장하고 다시 소비해야 할 때
이벤트 소싱(event sourcing)이나 CDC(Change Data Capture)이 필요할 때
다수의 컨슈머가 동일 메시지를 독립적으로 소비해야 할 때
ex) 주문 로그 분석, 사용자 행동 추적, 실시간 대시보드, 로그 집계
+CDC: 데이터베이스의 변경 사항을 감지하여 실시간 또는 근실시간으로 다른 시스템으로 전파하는 기술
MSA에서 서비스 간 데이터 동기화, 분산 시스템 간 실시간 연동, 이벤트 기반 아키텍처에서 데이터베이스 변경을 트리거로 사용하는 등의 경우에 필요
2. 즉각적인 메시지 처리, 단순한 비동기 큐가 필요한 경우 -> RabbitMQ
빠른 반응성과 단순한 메시지 전달이 중요할 때
요청에 따라 작업을 큐잉하고 워커가 처리하는 구조일 때
동일 메시지를 여러 컨슈머가 공유해서 처리하지 않아도 될 때
복잡한 메시지 라우팅(Exchange <-> Queue 바인딩)이 필요할 때
ex) 이메일 전송, 알림 메시지 큐, 백그라운드 작업 처리