RabbitMQ 기본 개념 정리 (+ RabbitMQ vs Kafka vs ActiveMQ)

2026. 2. 20. 17:04·🌊 Data Engineering
728x90

 

 

이전 회사에서는 메세지 브로커(Message Broker)의 역할로서 Kafka와 ActiveMQ를 주로 사용하였습니다. 새로운 회사에서는 Kafka와 RabbitMQ를 사용하게 되어 관련 내용을 정리해보려고 합니다. 어떤 점이 다르고, 왜 RabbitMQ를 사용하는 것일까요?

 

 

 

로고가 꽤 귀엽습니다

 

 

MSA 아키텍처 관점에서 메세지 브로커는 왜 필요할까요?

쉽게 이야기 해서 A 서비스와 B 서비스 간의 직접 호출을 하지 않고, 중간에 메세지 큐를 두고 비동기적인 통신을 하기 위해서 입니다. 이 이야기는 이전에 작성한 이벤트 드리븐 방식(EDA)의 아키텍처에 대한 이야기와 이어집니다. 메세지 브로커는 해당 아키텍처를 구현하기 위한 하나의 도구 라고 이해하면 좋을 것 같습니다. 

 

https://minchoi0912.tistory.com/130

 

MSA와 이벤트 드리븐 아키텍처(Event-Driven Architecture, EDA) 간단하게 알아보기

이전 글에서 MSA 아키텍처에 대한 기본적인 구조와 개념들에 대하여 알아 보았습니다. 이번 글에서는 MSA 구조에서 데이터를 주고 받기 위해 사용하는 이벤트 기반 구조에 대한 이해를 해보려고

minchoi0912.tistory.com

 

 

간단히 이야기 하면 MSA 아키텍처에서의 서비스 간의 호출이 HTTP 동기 방식으로 연결하게 되면 전체 서비스 자체의 장애가 발생 할 수 있기 때문에 서비스 간 결합도를 낮추고, 트래픽 버퍼 역할, 장애 격리, 확장성 역할을 위해서 메세지 브로커를 사용하게 됩니다. 

 

 

RabbitMQ란?

AMQP 프로토콜을 구현한 오픈 소스 메세지 브로커 소프트웨어 입니다. 여기서 AMQP(Advanced Message Queing Protocol)이란 메세징에서 신뢰성, 보안, 트랜잭션 등을 표준화한 메세징 프로토콜을 이야기합니다. 클라이언트가 메세해당 프로토콜을 통해서 RabbitMQ 서버는 Java, Python, Node.js 등 여러 언어에서 사용 할 수 있습니다. 

 

핵심 구성 요소

kafka와 비슷한 메세지 브로커이다 보니 비슷한 구성 요소들도 있고 RabbitMQ만의 개념도 존재 하는 것으로 보입니다. 

 

✅ Producer (메시지 생산자)

  • 메세지 생성 및 전송하는 역할
  • 직접 메세지 저장소(`Queue`)에 전달하는 것이 아닌 메세지 라우터(`Exchange`)로 전달함

✅ ⭐ Exchange (메세지 라우터)

  • RabbitMQ가 가지고 있는 특징
  • Producer가 Queue에 메세지를 보내기 전 지나가는 라우팅 역할을 하는 
  • `Binding` 규칙, 타입에 따라서 Queue를 연결함 
타입 설명
Direct 특정 라우팅 키와 일치하는 큐에만 전달
Fanout 연결된 모든 큐에 브로드캐스트
Topic 와일드카드 패턴(예: order.*)으로 라우팅
Headers 메시지 헤더 기반 라우팅

✅ Queue (메세지 저장소)

  • 메세지 저장 공간으로 순서대로 저장됨 (FIFO 구조)

✅ Consumer (메시지 소비자)

  • `Queue`에 쌓인 메세지를 가져가 처리하는 역할
  • 여러 `Consumer`가 하나의 `Queue`를 구독하여 부하 분산 처리를 할 수 있음. 

 

RabbitMQ vs Kafka vs ActiveMQ

3개의 메세지 브로커들은 모두 메세지를 전달한다는 공통적인 개념을 가지지만 서로 다른 특징을 가집니다. 자신의 아키텍처에 맞는 도구를 선택해서 사용하면 되겠습니다. 아래는 3가지 도구를 간략하게 비교한 표입니다.

 

  RabbitMQ Kafka ActiveMQ
메세지 보관 소비 후 삭제  일정 기간 유지 소비 후 삭제
순서 보장 Queue 단위 Topic 내부 Partition 단위 Queue 단위
특징 이벤트 라우팅 브로커
(이벤트 허브)
데이터 스트리밍 플랫폼 
(데이터 스트림, 빅데이터)
Java 전통 메세징 시스템
(JMS 표준)
단점 데이터 보존 부적합, 대용량
스트리밍 한계
복잡한 운영 난이도 java 진영에서만 사용 가능

 

한줄로 요약해보자면 아래와 같이 사용 할 수 있겠습니다. 

 

RabbitMQ: 복잡한 이벤트 라우팅이 필요한 경우 

ActiveMQ: 이벤트 라우팅이 필요하고 Java 환경인 경우

Kafka: 대용량의 이벤트 처리가 필요한 경우

 

실무에서도 비교적 처리량이 적고 이벤트 라우팅 역할이 필요한 경우에 RabbitMQ를 사용하고 있습니다. 

 

RabbitMQ in Python

 

다음은 간단하게 Python에서 사용하는 RabbitMQ에 대해서 알아보겠습니다.

가장 기본적으로는 RabbitMQ Python 클라이언트로는 `pika` 라이브러리를 활용합니다.

 

FastAPI와 함께 사용할 때는 다음과 같은 구조를 가지는 경우가 많습니다.

API를 통해 이벤트를 발행 시키고, 별도의 Consumer 워커가 처리하는 경우가 많습니다.

[Client]
↓
[FastAPI]
↓ (이벤트 발행)
[RabbitMQ]
↓
[Worker (Python Consumer)]

 

그렇다면 메세지 재시도 처리는 어떻게 될까요?

RabbitMQ는 메세지에 대한 처리가 성공되었을 때는 `ack` 처리를 하고, 실패한 경우에는 `nack` 처리를 하게 됩니다. 

`nack`처리가 된 메세지를 반환 받게 되었을 때 RabbitMQ가 해당 메세지에 대한 처리가 성공 할 때 까지 과정을 무한 반복 할 수 있기 때문에 실패된 메세지에 대한 재시도를 처리를 해주는 것이 필요합니다. 

 

`DLX`(Dead Letter Exchange)라고 하는 exchange(라우팅 역할)에 설정을 통해 실패한 메세지를 어느 Queue에 저장되게 할지 정하게 되고, 이 때 Queue를 `DLQ`(Dead Letter Queue)라고 표현합니다.

 

 

 

 

간단하게 RabbitMQ에 대해서 알아봤습니다. MSA 구조에서 메세지 브로커를 사용하게 되는 것은 필연적인 일인 것 같은데요! 특징에 맞춰서 잘 사용 할 수 있도록 해봅시다. 화이팅..

 

 

 

 

참고:

ChatGPT와의 대화

https://velog.io/@devcube2/RabbitMQ-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%9E%AC%EC%B2%98%EB%A6%AC

 

RabbitMQ 메시지 재처리

정우님, 요청하신 대로 DLX → retry → backoff → 재큐잉 구조를 “간단한 말”이 아니라 정확한 RabbitMQ 내부 동작 기준으로 냉정하게 설명해드리겠습니다.메시지 처리 실패 시 아래 흐름으로 순환

velog.io

https://e-ello.tistory.com/10

 

DLQ(SpringBoot + RabbitMQ 메시지 실패 처리)

SpringBoot에서 RabbitMQ의 메시지를 처리하다 예외가 발생하게 되면 어떻게 될까? `Consumer.receiveMessage(User user)` 메서드에서 일부러 `RuntimeException`을 발생시켜 보자.public void receiveMessage(User user) { System.

e-ello.tistory.com

 

300x250
저작자표시 비영리 변경금지 (새창열림)

'🌊 Data Engineering' 카테고리의 다른 글

Kafka는 어떻게 고가용성을 확보하고 있을까? (feat. 노드, 브로커, 컨트롤러, 클러스터, 래플리케이션)  (0) 2026.02.04
Kafka 병렬 처리를 활용한 메세지 처리 성능 높이기  (0) 2026.02.01
Kafka 기본 개념 정의 및 실패 재시도 방법 정의  (0) 2026.02.01
Apache Airflow 간단 개념 알아보기  (0) 2026.01.31
'🌊 Data Engineering' 카테고리의 다른 글
  • Kafka는 어떻게 고가용성을 확보하고 있을까? (feat. 노드, 브로커, 컨트롤러, 클러스터, 래플리케이션)
  • Kafka 병렬 처리를 활용한 메세지 처리 성능 높이기
  • Kafka 기본 개념 정의 및 실패 재시도 방법 정의
  • Apache Airflow 간단 개념 알아보기
최밍구
최밍구
발등에 불이 뜨겁게 배우는 중
  • 최밍구
    프로그래밍구
    최밍구
  • 전체
    오늘
    어제
    • 분류 전체보기
      • ☕️ JAVA
      • 🌱 Spring
      • 🐍 Python
      • 🗄️ DataBase
      • 🌊 Data Engineering
      • 🛠️ DevOps
      • ✨ JavaScript
        • Node.js
      • 🤖 AI
      • 🔎 알고리즘
      • 📘 IT 지식
      • 🍀 창고
        • 비트캠프
        • 취업
        • 일기장
  • 링크

    • Go Github
  • 인기 글

  • 태그

    제네릭
    카프카
    자바제네릭
    Kafka
    자바
    Airflow
    data
    dataengineering
    인터넷
    데이터베이스
    MSA
    PostgreSQL
    mongoDB
    타임존
    database
    RabbitMQ
    Java
    pgvector
    생활코딩자바
    생활코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
최밍구
RabbitMQ 기본 개념 정리 (+ RabbitMQ vs Kafka vs ActiveMQ)
상단으로

티스토리툴바