Computer Science/Operating System
메시지 큐(Message Queue) 정리
guwon2
2025. 10. 19. 15:25
메시지 큐(Message Queue)
분산 시스템에서 애플리케이션 간 비동기 통신을 가능하게 하는 핵심 인프라
메시지 큐의 기본 원리
- 비동기 처리: 요청을 큐에 넣어두고 나중에 처리할 수 있어, 요청과 처리 시점을 분리. 이를 통해 시스템은 응답 대기 시간 없이 즉시 다음 작업을 수행할 수 있다.
- 낮은 결합도(Decoupling): 생산자(Producer)와 소비자(Consumer)가 서로의 상태나 속도에 관계없이 독립적으로 동작할 수 있다. 생산자는 메시지를 큐에 전송하기만 하면 되고, 소비자는 자신의 처리 속도에 맞춰 메시지를 가져간다.
- 높은 안정성: 소비자가 일시적으로 장애가 발생하더라도 메시지는 큐에 안전하게 보관된다. 서비스가 복구되면 큐에 저장된 메시지부터 처리를 재개할 수 있어 데이터 손실을 최소화한다.
메시지 큐의 기본 구조는 생산자(Producer) → 메시지 브로커 → 소비자(Consumer)로 이루어진다.
메시지 큐의 주요 타입
- Point-to-Point 방식: 단일 송신자가 메시지를 보내면 특정 소비자 하나만 받을 수 있다. 메시지가 소비되면 큐에서 제거되며, Task Queue와 같이 한 번에 하나의 소비자가 특정 메시지를 처리해야 하는 상황에 유용하다.
- Publish-Subscribe 방식: 여러 송신자가 메시지를 생성하고, 이를 여러 수신자가 동시에 구독하여 처리하는 패턴이다. 실시간 스트리밍 애플리케이션, 이벤트 기반 아키텍처에서 주로 사용된다.
메시지 큐의 종류
Apache Kafka
- 특징: 분산 로그 기반의 메시지 스트리밍 플랫폼. 대규모 데이터를 실시간으로 처리하는 데 최적화.
- 동작 원리: Producer가 메시지를 Topic에 보내면, Broker가 메시지를 여러 Partition으로 분산 저장. Consumer는 Topic을 구독하여 Pull 방식으로 메시지를 가져옴. 메시지는 일정 기간 저장되어 여러 번 읽을 수 있음.
- Offset: 각 파티션 내에서 메시지의 위치를 나타내는 순차적인 식별자. 장애 발생 시 마지막 Offset부터 재처리 가능.
- 사용 시점:
- 대용량 실시간 데이터 스트리밍
- 이벤트 소싱 및 로그 수집
- 데이터 파이프라인
- 메시지 재처리(Offset 기반)
RabbitMQ
- 특징: AMQP(Advanced Message Queuing Protocol) 기반, 고급 라우팅 기능 제공.
- 동작 원리: Producer가 메시지를 Exchange에 전송하면, Exchange는 Routing Key와 Binding 패턴을 기반으로 적절한 Queue로 메시지를 전달. Consumer는 Queue를 모니터링하여 메시지를 받음.
- Exchange 타입:
- Direct: Routing Key가 정확히 일치하는 Queue로 메시지 전달
- Fanout: 바인딩된 모든 Queue에 메시지 브로드캐스트
- Topic: 패턴 매칭을 통한 유연한 라우팅
- Headers: 메시지 헤더 속성을 기반으로 라우팅
- 사용 시점:
- 복잡한 라우팅 로직
- 비동기 작업 처리(이메일, 이미지 처리 등)
- 마이크로서비스 간 통신
- 안정적인 메시지 전달(ACK/NACK)
Redis Pub/Sub & Streams
- Pub/Sub: 실시간 메시징에 특화. Publisher가 채널에 메시지를 발행하면 해당 채널을 구독하는 모든 Subscriber에게 즉시 전달. 메시지는 저장되지 않음.
- Streams: 메시지를 로그에 저장하여 영속성 제공. Consumer Group을 통해 여러 소비자가 작업을 분산 처리. 메시지는 명시적으로 삭제하거나 보존 정책에 의해 삭제될 때까지 유지.
- 사용 시점:
- 실시간 알림 및 채팅
- 간단한 작업 큐
- 실시간 로그 스트리밍
- 경량 메시징(속도가 중요한 경우)
ActiveMQ
- 특징: JMS(Java Message Service) 표준을 구현한 오픈소스 메시지 브로커. Queue와 Topic 두 가지 메시징 모델 지원, 다양한 프로토콜 지원.
- 사용 시점:
- 자바 기반 엔터프라이즈 애플리케이션
- 다양한 프로토콜 지원이 필요한 경우
- 중소규모 시스템
AWS SQS
- 특징: 완전 관리형 분산 메시지 큐 서비스. 표준 큐(최소 1회 전달)와 FIFO 큐(정확히 1회 처리, 순서 보장) 제공.
- 사용 시점:
- AWS 생태계 통합
- 운영 부담 최소화
- 간단한 메시지 전달
메시지 큐 선택 기준
| 기준 | Kafka | RabbitMQ | Redis | ActiveMQ | AWS SQS |
|---|---|---|---|---|---|
| 처리량/확장성 | 매우 높음 | 중간~높음 | 높음(메모리) | 중간 | 높음 |
| 메시지 영속성 | 디스크 기반 | 큐 기반 | Streams만 지원 | 큐/토픽 기반 | 지원 |
| 라우팅 복잡도 | 토픽/파티션 | Exchange 다양 | 단순 | 단순~중간 | 단순 |
| 운영 복잡도 | 높음 | 중간 | 낮음 | 낮음~중간 | 매우 낮음 |
| 주요 사용 사례 | 대용량 로그 | 비동기 작업 | 실시간 알림 | JMS 연동 | AWS 연동 |
사용 사례별 정리
- 실시간 로그 수집 및 분석: Kafka + ELK 스택
- 마이크로서비스 비동기 통신: RabbitMQ
- 실시간 채팅 및 알림: Redis Pub/Sub
- 배치 작업 및 이메일 발송: RabbitMQ
- AWS 기반 서버리스: AWS SQS + Lambda