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 데이터 버퍼링 |
'하드웨어 > 상식' 카테고리의 다른 글
| I²S : Inter-IC Sound (0) | 2025.10.22 |
|---|---|
| MQTT(Message Queuing Telemetry Transport) (0) | 2025.10.15 |
| UF2 : USB Flashing Format (0) | 2025.10.13 |
| Oscillator(발진기) 설명 및 신호 측정 (0) | 2025.10.04 |
| LoRa(Long Range) : 저전력 광역 통신망(LPWAN) (0) | 2025.09.30 |