메시지를 안전하게 주고받게 해주는 메시지 브로커(Message Broker)를 말한다.
RabbitMQ는 메시지 큐(MQ, Message Queue) 시스템 중 하나로,
애플리케이션 간 데이터를 비동기적으로 주고받도록 도와주는 오픈소스 메시지 브로커를 말한다.
→ 즉, 보내는 쪽(Producer)과 받는 쪽(Consumer)을 분리(decouple)시켜준다.
| 항목 | 내용 |
|---|---|
| 정의 | 애플리케이션 간 메시지를 중개하는 Message Broker |
| 핵심 역할 | Producer와 Consumer의 비동기 통신 |
| 핵심 구성요소 | Exchange, Queue, Binding |
| 주요 장점 | 안정성, 확장성, 비동기 처리 |
| 유사 기술 | Kafka, ActiveMQ, Amazon SQS |
| 구성요소 | 설명 |
|---|---|
| Producer (생산자) | 메시지를 생성해서 브로커(RabbitMQ 서버)에 전송 |
| Exchange (교환기) | 메시지를 어떻게 보낼지 결정 (라우팅 역할) |
| Queue (큐) | 메시지가 저장되는 공간 |
| Binding (바인딩) | 교환기와 큐를 연결하는 규칙 |
| Consumer (소비자) | 큐에 쌓인 메시지를 꺼내서 처리 |
| 유형 | 설명 | 예시 |
|---|---|---|
| Direct | 라우팅 키가 정확히 일치해야 전달 | routing_key = "email.send" |
| Topic | 와일드카드(*, #)로 패턴 매칭 | "order.*" 또는 "*.created" |
| Fanout | 모든 큐에 브로드캐스트 | 알림, 이벤트 전파 |
| Headers | 메시지 헤더 값으로 라우팅 | 특정 속성 기반 라우팅 |
대부분 Direct Exchange 방식으로 진행된다.
| 상황 | RabbitMQ의 역할 |
|---|---|
| 주문 생성 시 이메일/알림/포인트 적립 등 여러 작업이 동시에 필요 | 각 작업을 비동기 큐로 분리하여 병렬 처리 |
| 트래픽이 몰릴 때 서버 과부하 방지 | 요청을 큐에 쌓아 처리량을 제어 (Back Pressure) |
| 시스템 간 결합도를 낮추고 확장성 확보 | Producer와 Consumer가 직접 통신하지 않아도 됨 |
| 장애 복구 및 데이터 손실 방지 | 메시지 지속성(persistence) 및 ACK 지원 |
[Producer] → [Exchange] → [Queue] → [Consumer]
예시로 보면:
// application.yml
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
// 메시지 전송 (Producer)
@Service
@RequiredArgsConstructor
public class OrderProducer {
private final RabbitTemplate rabbitTemplate;
public void sendOrderMessage(String orderId) {
rabbitTemplate.convertAndSend("order.exchange", "order.created", orderId);
}
}
// 메시지 수신 (Consumer)
@RabbitListener(queues = "order.queue")
public void handleOrder(String orderId) {
log.info("Processing order: {}", orderId);
}
| 구분 | RabbitMQ | Kafka |
|---|---|---|
| 목적 | 메시지 큐(비동기 통신, 작업 분리) | 스트리밍 플랫폼(대용량 로그/데이터 처리) |
| 메시지 저장 방식 | 큐에 저장 후 소비되면 삭제 | 토픽에 저장, 여러 Consumer가 읽을 수 있음 |
| 메시지 전달 보장 | ACK 기반, 우선 순위 큐 가능 | 오프셋 기반, 재처리 용이 |
| 주요 사용처 | 마이크로서비스 간 비동기 통신 | 로그 수집, 실시간 데이터 분석 |
RabbitMQ는 AMQP를 표준 기반으로 하는 메시지 브로커인데, 여기서 AMQP란 무엇일까?
AMQP (Advanced Message Queuing Protocol)
→ "애플리케이션 간 메시지를 주고받기 위한 표준 메시징 프로토콜"을 말한다.즉, RabbitMQ가 동작하는 기본 통신 규칙(언어) 이라고 보면 된다.
쉽게 말해,
➡️ HTTP가 웹에서 데이터를 주고받는 규칙이라면,
➡️ AMQP는 메시지 큐 시스템에서 데이터를 주고받는 규칙을 말한다.
AMQP는 “메시지를 주고받는 문법(규칙)”이고,
RabbitMQ는 그 문법을 실제로 구현한 프로그램(브로커)이다.
| 항목 | 내용 |
|---|---|
| 정의 | 메시징 시스템 간 통신을 위한 표준 프로토콜 |
| 주요 역할 | 메시지 전달, 라우팅, 보장, 보안 |
| 대표 구현체 | RabbitMQ, Apache Qpid |
| 장점 | 신뢰성 높고, 표준화된 메시징 구조 |
| RabbitMQ와의 관계 | RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커 |
RabbitMQ나 다른 메시지 브로커(예: ActiveMQ, Qpid)는
모두 AMQP 프로토콜을 기반으로 통신한다.
이 프로토콜은 다음을 보장한다:
| 보장 항목 | 설명 |
|---|---|
| Message Delivery | 메시지가 손실 없이 전달됨 |
| Acknowledgment (ACK) | Consumer가 메시지를 받았는지 확인 가능 |
| Reliability (신뢰성) | 네트워크 장애 시에도 메시지 보존 가능 |
| Routing | 교환기(Exchange)와 큐(Queue) 간 라우팅 규칙 정의 |
| Security | 인증/암호화 지원 |
AMQP는 단순한 “큐”가 아니라 메시지 흐름 전체를 표준화한다.
[Producer] → [Exchange] → [Queue] → [Consumer]
👇 각 단계는 AMQP가 정의한 구성요소로 동작한다. 👇
| 구성 요소 | 설명 |
|---|---|
| Exchange | 메시지를 어떤 큐로 보낼지 결정 |
| Queue | 메시지를 저장하는 공간 |
| Binding | Exchange와 Queue를 연결하는 규칙 |
| Message | 실제 데이터 (body + header + routing key 등) |
| Routing Key | 메시지 라우팅 기준 문자열 |
| Channel | 연결(Connection) 내에서 실제 메시지를 주고받는 논리적 경로 |
하나의 메시지는 다음과 같이 구성된다.
| 항목 | 설명 |
|---|---|
| Header | 메타데이터 (ID, 타입, timestamp 등) |
| Properties | TTL, Priority, ContentType 등 |
| Body | 실제 메시지 데이터 (JSON, String 등) |
예)
{
"properties": {
"content_type": "application/json",
"priority": 5,
"message_id": "123e4567-e89b-12d3-a456-426614174000"
},
"body": {
"orderId": "O-20251023",
"status": "CREATED"
}
}
1️⃣ Producer → Exchange 로 메시지 전송
2️⃣ Exchange → Routing Key 규칙에 따라 Queue 선택
3️⃣ Queue 에 메시지 저장
4️⃣ Consumer → Queue 에서 메시지 가져감
5️⃣ Consumer → 메시지 처리 후 ACK 반환
6️⃣ RabbitMQ → 메시지 삭제 (성공 시)
ACK가 없으면 메시지는 다시 큐로 되돌아가서 재시도 가능
(즉, “적어도 한 번(at least once)” 전달 보장)
| 구분 | AMQP | MQTT | Kafka |
|---|---|---|---|
| 프로토콜 유형 | 메시징 프로토콜 | IoT용 경량 메시징 | 스트리밍 플랫폼 |
| 기반 기술 | 큐 기반 (RabbitMQ 등) | TCP 기반, Pub/Sub 구조 | 로그 기반 (토픽/파티션) |
| 보장 수준 | 높은 신뢰성 (ACK, 재전송) | 낮음 (간단, 빠름) | 매우 높음 (오프셋 기반) |
| 적합 분야 | 엔터프라이즈, 서버 간 통신 | IoT 센서, 임베디드 | 빅데이터, 실시간 분석 |