10/23

졸용·2025년 10월 23일

TIL

목록 보기
99/144

🔹RabbitMQ란?

메시지를 안전하게 주고받게 해주는 메시지 브로커(Message Broker)를 말한다.

RabbitMQ메시지 큐(MQ, Message Queue) 시스템 중 하나로,
애플리케이션 간 데이터를 비동기적으로 주고받도록 도와주는 오픈소스 메시지 브로커를 말한다.
→ 즉, 보내는 쪽(Producer)받는 쪽(Consumer)분리(decouple)시켜준다.


🔸 RabbitMQ 요약

항목내용
정의애플리케이션 간 메시지를 중개하는 Message Broker
핵심 역할Producer와 Consumer의 비동기 통신
핵심 구성요소Exchange, Queue, Binding
주요 장점안정성, 확장성, 비동기 처리
유사 기술Kafka, ActiveMQ, Amazon SQS

🔸 주요 특징

  • AMQP (Advanced Message Queuing Protocol) 표준 기반
  • Publisher/Subscriber 또는 Producer/Consumer 패턴 지원
  • 비동기 처리, 부하 분산, 장애 대응에 유리
  • Spring Boot, Python, Node.js 등 다양한 언어/프레임워크에서 사용 가능

🔸 기본 구성 요소

구성요소설명
Producer (생산자)메시지를 생성해서 브로커(RabbitMQ 서버)에 전송
Exchange (교환기)메시지를 어떻게 보낼지 결정 (라우팅 역할)
Queue (큐)메시지가 저장되는 공간
Binding (바인딩)교환기와 큐를 연결하는 규칙
Consumer (소비자)큐에 쌓인 메시지를 꺼내서 처리

🔸 Exchange의 종류 (라우팅 방식)

유형설명예시
Direct라우팅 키가 정확히 일치해야 전달routing_key = "email.send"
Topic와일드카드(*, #)로 패턴 매칭"order.*" 또는 "*.created"
Fanout모든 큐에 브로드캐스트알림, 이벤트 전파
Headers메시지 헤더 값으로 라우팅특정 속성 기반 라우팅

대부분 Direct Exchange 방식으로 진행된다.


🔸 RabbitMQ를 사용하는 이유

상황RabbitMQ의 역할
주문 생성 시 이메일/알림/포인트 적립 등 여러 작업이 동시에 필요각 작업을 비동기 큐로 분리하여 병렬 처리
트래픽이 몰릴 때 서버 과부하 방지요청을 큐에 쌓아 처리량을 제어 (Back Pressure)
시스템 간 결합도를 낮추고 확장성 확보Producer와 Consumer가 직접 통신하지 않아도 됨
장애 복구 및 데이터 손실 방지메시지 지속성(persistence)ACK 지원

🔸 메시지 전달 흐름 (메시지 플로우)

[Producer][Exchange][Queue][Consumer]

예시로 보면:

  1. Producer가 “새 주문 발생” 메시지를 보낸다.
  2. Exchange가 메시지를 분석해 “order.*” 같은 라우팅 키를 기준으로 큐를 선택한다.
  3. 해당 Queue에 메시지가 저장된다.
  4. Consumer가 큐에서 메시지를 꺼내 주문 처리 로직을 실행한다.

🔸 Spring Boot와 RabbitMQ 연동 예시

// 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 vs Kafka

구분RabbitMQKafka
목적메시지 큐(비동기 통신, 작업 분리)스트리밍 플랫폼(대용량 로그/데이터 처리)
메시지 저장 방식큐에 저장 후 소비되면 삭제토픽에 저장, 여러 Consumer가 읽을 수 있음
메시지 전달 보장ACK 기반, 우선 순위 큐 가능오프셋 기반, 재처리 용이
주요 사용처마이크로서비스 간 비동기 통신로그 수집, 실시간 데이터 분석


🔹AMQP란?

RabbitMQ는 AMQP를 표준 기반으로 하는 메시지 브로커인데, 여기서 AMQP란 무엇일까?

AMQP (Advanced Message Queuing Protocol)
→ "애플리케이션 간 메시지를 주고받기 위한 표준 메시징 프로토콜"을 말한다.

즉, RabbitMQ가 동작하는 기본 통신 규칙(언어) 이라고 보면 된다.

쉽게 말해,
➡️ HTTP가 웹에서 데이터를 주고받는 규칙이라면,
➡️ AMQP는 메시지 큐 시스템에서 데이터를 주고받는 규칙을 말한다.

AMQP는 “메시지를 주고받는 문법(규칙)”이고,
RabbitMQ는 그 문법을 실제로 구현한 프로그램(브로커)이다.


🔸 AMQP 요약

항목내용
정의메시징 시스템 간 통신을 위한 표준 프로토콜
주요 역할메시지 전달, 라우팅, 보장, 보안
대표 구현체RabbitMQ, Apache Qpid
장점신뢰성 높고, 표준화된 메시징 구조
RabbitMQ와의 관계RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커

🔸 AMQP의 역할

RabbitMQ나 다른 메시지 브로커(예: ActiveMQ, Qpid)는
모두 AMQP 프로토콜을 기반으로 통신한다.

이 프로토콜은 다음을 보장한다:

보장 항목설명
Message Delivery메시지가 손실 없이 전달됨
Acknowledgment (ACK)Consumer가 메시지를 받았는지 확인 가능
Reliability (신뢰성)네트워크 장애 시에도 메시지 보존 가능
Routing교환기(Exchange)와 큐(Queue) 간 라우팅 규칙 정의
Security인증/암호화 지원

🔸 AMQP 구조 (핵심 컴포넌트)

AMQP는 단순한 “큐”가 아니라 메시지 흐름 전체를 표준화한다.

[Producer][Exchange][Queue][Consumer]

👇 각 단계는 AMQP가 정의한 구성요소로 동작한다. 👇

구성 요소설명
Exchange메시지를 어떤 큐로 보낼지 결정
Queue메시지를 저장하는 공간
BindingExchange와 Queue를 연결하는 규칙
Message실제 데이터 (body + header + routing key 등)
Routing Key메시지 라우팅 기준 문자열
Channel연결(Connection) 내에서 실제 메시지를 주고받는 논리적 경로

🔸 AMQP 메시지의 구조

하나의 메시지는 다음과 같이 구성된다.

항목설명
Header메타데이터 (ID, 타입, timestamp 등)
PropertiesTTL, 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"
  }
}

🔸 AMQP 통신 흐름 요약

1️⃣ Producer → Exchange 로 메시지 전송

2️⃣ Exchange → Routing Key 규칙에 따라 Queue 선택

3️⃣ Queue 에 메시지 저장

4️⃣ Consumer → Queue 에서 메시지 가져감

5️⃣ Consumer → 메시지 처리 후 ACK 반환

6️⃣ RabbitMQ → 메시지 삭제 (성공 시)

ACK가 없으면 메시지는 다시 큐로 되돌아가서 재시도 가능
(즉, “적어도 한 번(at least once)” 전달 보장)



🔹 AMQP vs MQTT vs Kafka

구분AMQPMQTTKafka
프로토콜 유형메시징 프로토콜IoT용 경량 메시징스트리밍 플랫폼
기반 기술큐 기반 (RabbitMQ 등)TCP 기반, Pub/Sub 구조로그 기반 (토픽/파티션)
보장 수준높은 신뢰성 (ACK, 재전송)낮음 (간단, 빠름)매우 높음 (오프셋 기반)
적합 분야엔터프라이즈, 서버 간 통신IoT 센서, 임베디드빅데이터, 실시간 분석

profile
꾸준한 공부만이 답이다

0개의 댓글