RabbitMQ는 MQTT보다 “무겁지만 강력한 범용 메시징 미들웨어”로, IoT 백엔드, 마이크로서비스 간 통신, 비동기 처리 등에 널리 사용됩니다.

🧩 1. RabbitMQ 개요

항목 설명
개발사 Pivotal (현 VMware Tanzu 소속)
언어 Erlang/OTP
라이선스 오픈소스 (MPL 2.0)
프로토콜 AMQP 0-9-1 (기본), STOMP, MQTT, HTTP 등 플러그인으로 확장 가능
기능 메시지 큐잉, 라우팅, 트랜잭션, 확인(Ack), 보안, 클러스터링
전형적 용도 IoT 백엔드, 로그 수집, 비동기 처리, MSA 간 통신

⚙️ 2. 기본 동작 구조

RabbitMQ는 프로듀서–브로커–컨슈머 구조입니다.

 
[Producer] ↓ [Exchange] --(Routing)--> [Queue] --(Consume)--> [Consumer]
  • Producer: 메시지를 보냄 (Publish)
  • Exchange: 메시지를 라우팅
  • Queue: 메시지를 저장
  • Consumer: 메시지를 가져와 처리

🧠 3. 핵심 구성요소 상세

구성 요소 역할
Exchange 메시지를 라우팅하는 중간 노드
Queue 메시지 저장소 (FIFO)
Binding Exchange와 Queue를 연결
Routing Key 메시지 라우팅 기준
Virtual Host (vhost) 사용자·리소스 격리 단위
Channel 하나의 TCP 연결 내에서 다중 메시지 흐름

🧭 4. Exchange 타입 (라우팅 방식)

타입 설명 예시
Direct 정확히 일치하는 Routing Key로 전달 key="temp.sensor1"
Topic 와일드카드 매칭 라우팅 (*, # 사용) sensor.# → sensor.temp.room1
Fanout Routing Key 무시, 모든 큐에 브로드캐스트 여러 컨슈머 동시 전달
Headers 메시지 헤더 값으로 라우팅 x-match=any 등

 

📦 5. 메시지 전달 흐름 예시

 
[Producer] → [Exchange(topic)] → [Queue(sensor.temp)] → [Consumer]

예시 코드 (Python Pika)

import pika, json

connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

channel.exchange_declare(exchange='sensors', exchange_type='topic')
channel.queue_declare(queue='sensor.temp')
channel.queue_bind(exchange='sensors', queue='sensor.temp', routing_key='sensor.temp')

msg = json.dumps({'value': 23.4})
channel.basic_publish(exchange='sensors', routing_key='sensor.temp', body=msg)

print("Sent:", msg)
connection.close()
 

🧾 6. 메시지 신뢰성 구조

기능 설명
Publisher Confirm 브로커가 메시지 수신을 보장
Consumer Ack 메시지 소비 완료를 브로커에 통보
Durable Queue 브로커 재시작 후에도 큐 유지
Persistent Message 디스크에 메시지 저장
Dead Letter Exchange (DLX) 실패 메시지를 별도 큐로 이동
TTL (Time-To-Live) 메시지 또는 큐 만료 시간 지정 가능

 

🧮 7. QoS (Quality of Service) 제어

항목 설명
prefetch_count 한 번에 가져올 메시지 수 제한
ack 메시지 처리 완료 시 명시적 확인
nack/requeue 실패 시 재처리 가능

 

🔒 8. 보안 기능

계층 방식
인증(Authentication) 사용자 ID/PW, LDAP, JWT, TLS 인증서
인가(Authorization) Virtual Host 별 권한 제어 (read/write/config)
암호화(Encryption) TLS 1.2 이상 지원 (5671 포트)
방화벽 포트 기본 5672, TLS 5671, 웹 UI 15672

 

🗄️ 9. 클러스터링 & 고가용성

기능 설명
Cluster Mode 여러 노드 간 큐/메타데이터 공유
Mirrored Queue (HA Queue) 메시지를 복제하여 장애 대비
Federation Plugin 원격 RabbitMQ 간 메시지 브리지
Shovel Plugin 서로 다른 브로커 간 데이터 이동

 

🌐 10. 플러그인 & 프로토콜 확장

플러그인 기능
rabbitmq_management 웹 UI (http://localhost:15672)
rabbitmq_mqtt MQTT 3.1.1 브리지 (IoT용)
rabbitmq_stomp STOMP 프로토콜 지원
rabbitmq_federation 브로커 간 연결
rabbitmq_shovel 메시지 복제/이전

📡 즉, RabbitMQ는 IoT용 MQTT 게이트웨이 역할도 가능.

📊 11. RabbitMQ vs MQTT 비교

항목 RabbitMQ MQTT
프로토콜 AMQP (복잡하지만 강력) MQTT (경량)
라우팅 모델 Exchange 기반 (다양한 라우팅) Topic 기반 (단순)
신뢰성 트랜잭션, Ack, DLX, TTL 등 풍부 QoS 3단계
성능 중간 (100K~300K msg/s) 경량, 고속
적합 환경 서버 간 메시징, 산업용 IoT, MSA 센서, 엣지 IoT 디바이스
클러스터링 기본 지원 브로커 별도 구성 필요
보안 강력 (TLS, LDAP, 정책) 상대적으로 단순

 

🏗️ 12. IoT 아키텍처 예시 (RabbitMQ 활용)

 
[Sensor/Edge Device] ↓ (MQTT Plugin) [RabbitMQ Broker] ←→ [Go/Node.js Backend] ↓ [Kafka / InfluxDB / Redis] ↓ [Dashboard / Mobile App]
  • 디바이스 → MQTT → RabbitMQ → 백엔드
  • 백엔드 → 분석/시각화 파이프라인으로 전달

🧰 13. 설치 및 관리

# 설치 (Ubuntu)
sudo apt install rabbitmq-server
sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server

# 웹 관리 콘솔 활성화
sudo rabbitmq-plugins enable rabbitmq_management
 
관리 UI: 👉 http://localhost:15672

기본 계정: guest / guest

⚖️ 14. 장단점 요약

장점 단점
강력한 라우팅 및 신뢰성 설정 복잡도 높음
트랜잭션, Ack, DLX, TTL 등 제어 풍부 리소스 소비 많음
여러 프로토콜 지원 (MQTT, AMQP 등) 초경량 IoT 기기에는 부적합
HA, Federation 등 대규모 운용 가능 관리 난이도 있음

✅ 15. 실제 사용 사례

기업 / 분야 활용 목적
Tesla / Bosch / Siemens 산업용 IoT 데이터 버스
Instagram / Slack / GitHub 비동기 이벤트 큐
Naver Cloud Platform 내부 메시징 서비스
스마트 팩토리 / 차량 텔레메틱스 IoT → Backend 데이터 버퍼링

 

+ Recent posts