Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

RabbitMQ 개요와 주요 용어 본문

Middleware/RabbitMQ (메시지 브로커)

RabbitMQ 개요와 주요 용어

studyHub 2026. 2. 17. 00:40

개요

RabbitMQ는 메시지 브로커이다.

애플리케이션 사이에서 메시지를 받아서 적절한 Queue로 라우팅하고 Consumer에게 전달하는 중간 서버이다.

 

시스템 간 비동기 메시징을 가능하게 하여 서비스 간 통신을 안정적이고 효율적으로 처리할 수 있게 해준다.

최근 MSA 환경에서 가장 일반적으로 쓰이는 기술 중 하나이며, 대량의 데이터 전송 시 발생할 수 있는 과부화를 분산시키며

비동기 처리와 지연이 필요한 작업을 효과적으로 관리해 줄 수 있다.

클러스터를 설정할 때 큐를 HA(High Available)로 설정하여 여러 노드에 저정함으로써 메시지 손실을 방지하고, Federation 플러그인을 통해 데이터 동기화와 다중 마스터 복제를 구성할 수도 있다.

 

메세지큐를 사용하는 이유

  • 비동기 메시지를 사용하여 다른 응용프로그램 사이에 데이터를 송수신하기 위해
  • 클라이언트에 대한 동기 처리는 병목의 요인이므로, 비동기로 처리해도 될 영역에 대해서는 큐를 통해 분리해서 처리한다.
  • 요청에 대한 응답을 기다릴 필요가 없기 때문에 각 영역의 역할만 신경쓰면 된다
  • 결국 분산환경에서 응용프로그램들을 분리하고 독립적으로 확장하기 위해서 사용, 기능 별로 모듈 구성이 용이

대표적인 도메인 활용 사례

  • EDA(Event-Driven Architecture) : 주문/결제/배송 등의 비즈니스 도메인을 이벤트 기반의 독립적인 도메인 모듈로 구성
  • 로그 및 모니터링 : 로그 수집 및 준 실시간 처리 모니터링 시스템 구축
  • 채팅 및 알람 등 Notification 시스템
  • 비동기 데이터 처리 : 대용량의 이미지나 비디오 처리에 효율적인 분산 시스템 구축 가능
  • 여러 디바이스의 요청 처리 : IoT와 같은 멀티 디바이스 환경에서의 요청 처리

Kafka와 RabbitMQ의 차이

설계 철학 자체가 다르고, 적용 영역이 다르다.

  • Kafka는 “대량 데이터 스트리밍”에 최적화된 구조 (고속 로그 저장 + 병렬 소비가 목표)
  • RabbitMQ는 “정교한 라우팅”에 최적화된 구조 (메시지 분기가 목표)

Kafka는 대규모 이벤트 스트리밍 플랫폼에 적합하고, RabbitMQ는 정교한 메시지 브로커 역할에 적합하다.

 

모든 문제가 “대용량 이벤트 스트리밍”은 아니다.

  • 이메일 발송 작업 분배
  • 주문 처리 비동기화
  • 이미지 변환 작업 큐
  • RPC 기반 요청-응답 처리

이런 건 RabbitMQ가 더 직관적이고 단순하다.

 

Kafka와의 비교

  RabbitMQ Kafka
설계 목표 메시지 전달 로그 저장
메시지 모델 큐 기반 로그 스트림 기반(메시지를 지우지않고 로그에 쌓음)
메시지 삭제 소비 후 삭제 보관 기간 유지
실시간 스트리밍 약함 (메시지 단위 관리 오버헤드) 강함 (파티션 단위 병렬 확장)
복잡한 라우팅 강함 (Exchange 기반 강력) 약함 (Routing key 없음)

 


AMQP의 이해

AMQP(Advanced Message Queuing Protocol)

AMQP는 RabbitMQ가 대표적으로 사용하는 프로토콜로, (Kafka는 자체 프로토콜 사용)

메시지 브로커와 애플리케이션이 통신하기 위한 표준 메시징 프로토콜이다.

AMQP는 통신 규약이고, RabbitMQ는 그 약속을 구현한 제품이다.

 

AMQP의 목적은 서로 다른 시스템 간에 (비용/기술/시간적인 측면에서) 최대한 효율적인 방법으로 메시지를 교환하기 위한 MQ 프로토콜이기 때문에 아래와 같은 특징이 있다.

  • 모든 broker들은 똑같은 방식으로 동작할 것
  • 모든 client들은 똑같은 방식으로 동작할 것
  • 네트웍상으로 전송되는 명령어들의 표준화
  • 프로그래밍 언어 중립적

 

Routing Model Components

AMQP의 라우팅 모델은 3개의 중요한 component 들로 구성된다.

  • Exchange : Publisher로부터 수신한 메시지를 적절한 큐 또는 다른 exchange로 분배하는 라우터의 기능을 한다.
  • Queue : 일반적으로 알고 있는 큐이다. 메모리나 디스크에 메시지를 저장하고, 그것을 consumer에게 전달하는 역할을 한다.
  • Binding : exchange와 큐와의 관계를 정의한 일종의 라우팅 테이블이다.
    같은 큐가 여러 개의 exchange에 bind 될 수도 있고, 하나의 exchange에 여러 개의 큐가 binding 될 수 도 있다.


주요 용어 정리

주요 개념

1. Producer

  • 메시지를 생성하고 RabbitMQ에 전송하는 애플리케이션
  • Producer는 특정 Exchange에 메시지를 전송하고 Exchange는 메시지를 라우팅하여 큐에 배치

2. Exchange

  • Producer로부터 받은 메시지를 큐에 전달
  • Exchange 유형
    • Direct: 특정 라우팅 키와 정확히 일치하는 큐에 메시지를 전송
    • Fanout: 모든 큐에 메시지를 브로드캐스트
    • Topic: 라우팅 키 패턴을 기반으로 메시지를 특정 큐에 전달
    • Headers: 메시지 헤더 속성에 따라 메시지를 라우팅

3. Routing Key

  • 메시지를 전송할 때 Producer가 Exchange에 전달하는 키
  • Exchange는 이 Routing Key를 참고하여 어떤 큐에 메시지를 전달할지 결정

4. Queue

  • 메시지를 일시적으로 저장하는 버퍼 역할
  • RabbitMQ의 큐는 FIFO(First In, First Out) 방식으로 동작하며, 메시지가 소비자에게 전달될 때까지 보관
  • 각 큐는 여러 Consumer가 구독(수신)할 수 있으며, 메시지는 큐에 들어온 순서대로 전달
  • 비동기적으로 동작하며, 여러 컨슈머가 동시에 메시지를 소비할 수 있다.
  • 단, 하나의 메시지가 여러 소비자에게 중복으로 전달될수는 없다.
    (동일한 메시지를 수신하려면 Fanout Exchange 방식으로 동작해야 함)

5. Binding

  • Exchange와 큐간의 관계를 정의, 일종의 라우팅 테이블
  • 바인딩은 메시지를 라우팅할 때 어떤 조건으로 큐에 보낼지 정의하고 이를 위해 Binding key가 사용됨
  • Binding Key와 Routing Key가 일치하면 해당 큐로 메시지가 전달 (패턴 매칭 가능)

6. Consumer

  • 큐에서 메시지를 가져와 처리하는 애플리케이션
  • RabbitMQ는 여러 소비자에게 메시지를 로드 밸런싱 할 수 있다
  • Consumer는 큐에서 메시지를 받아 처리하면 메시지에 대한 확인(ACK, acknowledgment)을 브로커에 전송
  • 확인을 보내지 않으면, 브로커는 메시지를 재전송하거나 설정한 다른 Consumer에게 전달할 수 있다

7. Message Acknowledgment (메시지 확인)

  • 메시지가 성공적으로 처리되었음을 RabbitMQ에 알리는 과정
  • 만약 소비자가 메시지를 성공적으로 처리하지 못했다면, 메시지를 다시 큐에 넣어 다른 소비자가 처리하도록 할 수 있다.

 

주요 프로세스

  1. Producer가 메시지와 Routing Key를 Exchange에 전송
  2. Exchange가 Routing Key를 이용해 Binding Key가 일치하는 큐에 메시지 라우팅
  3. Consumer가 큐에서 메시지를 가져와 처리하고, 성공적으로 처리되었음음 acknowledgment로 RabbitMQ에게 알림

 

추가로 알아야 할 용어

 

1. Prefetch Count

  • 소비자가 받을 수 있는 최대 메시지 수를 설정
  • 한 번에 많은 양의 메시지를 처리하지 않도록 하여 소비자의 성능 최적화

2. Virtual Host

  • RabbitMQ 서버 내의 논리적인 구획으로, 사용자 권한 관리와 리소스를 격리하는데 사용.
    여러 애플리케이션이 독립적으로 RabbitMQ를 이용할 수 있게 해준다. (멀티태넌시 전략처럼)
  • 하나의 RabbitMQ 서버 내에 여러 개의 가상 호스트를 설정하여 서로 다른 애플리케이션의 메시지를 격리할 수 있다.

3. Dead Letter Queue (DLQ)

  • 메시지가 처리되지 못하거나 유효 기간이 지난 경우 별도의 큐로 이동하는 구조도 설정할 수 있다

참고 자료 & 이미지 출처
RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기