1. RabbitMQ 개요

  • RabbitMQ오픈소스 메시지 브로커이며, 메시지 기반 비동기 통신을 지원합니다.
  • AMQP(Advanced Message Queuing Protocol) 기반이지만, MQTT, STOMP, HTTP 등 다양한 프로토콜도 지원합니다.
  • 주 목적: 서비스 간 메시지 전달, 비동기 처리, 부하 분산, 이벤트 기반 아키텍처 지원.

2. 아키텍처 구성 요소

2.1 Producer / Consumer

  • Producer: 메시지를 생성하고 큐에 발행.
  • Consumer: 큐에서 메시지를 받아 처리.
  • RabbitMQ는 producer와 consumer 간 직접 연결을 막고 큐를 통해 느슨하게 연결.

2.2 Queue (큐)

  • 메시지가 저장되는 공간.
  • FIFO(First In, First Out) 기본 원칙.
  • Durable, Exclusive, Auto-delete 등 속성 설정 가능.
    • Durable: 브로커 재시작 후에도 큐 유지
    • Exclusive: 해당 연결만 사용 가능
    • Auto-delete: 마지막 consumer 종료 시 큐 자동 삭제

2.3 Exchange (교환기)

  • 메시지를 큐로 라우팅하는 역할.
  • 종류:
    1. Direct: 라우팅 키와 정확히 매칭되는 큐로 전달
    2. Fanout: 모든 바인딩된 큐에 브로드캐스트
    3. Topic: 패턴 기반 라우팅 (logs.*, user.#)
    4. Headers: 헤더 속성 기반 라우팅
  • Binding: Exchange와 Queue 간의 연결 규칙

2.4 Virtual Host (vhost)

  • RabbitMQ 내 논리적 격리 공간.
  • 각 vhost는 사용자, 큐, 익스체인지, 권한을 독립적으로 가짐.
  • 대규모 서비스에서 멀티테넌시 구현 시 유용.

2.5 Connection & Channel

  • Connection: TCP 기반 연결, 비용이 크므로 최소화.
  • Channel: Connection 내 논리적 세션, 경량. 대부분 메시징은 channel 단위로 수행.

3. 메시지 흐름

  1. Producer가 메시지를 Exchange에 발행
  2. Exchange가 Binding 규칙과 라우팅 키를 통해 Queue 선택
  3. 메시지가 Queue에 저장
  4. Consumer가 Queue에서 메시지 읽기
  5. 메시지 Ack/Nack 처리 → Ack 시 삭제, Nack 시 재처리
Acknowledgement (Ack): 메시지 손실 방지
- autoAck=false: consumer가 처리 후 브로커에 Ack 보내야 삭제
- 재시도/Dead Letter Queue(DLQ) 구현 가능

4. 메시지 신뢰성

  • Durable Queue + Persistent Message → 브로커 재시작 후에도 메시지 유지
  • Acknowledgement → 메시지 처리 보장
  • Publisher Confirms → producer가 메시지 안전 전송 여부 확인
  • Dead Letter Exchange (DLX) → 처리 실패 메시지 관리

5. 메시지 전달 패턴

  • Work Queue: 한 메시지를 한 consumer만 처리 (부하 분산)
  • Publish/Subscribe: 여러 consumer가 메시지 받음 (Fanout)
  • Routing: 특정 consumer에게 메시지 전달 (Direct/Topic)
  • RPC (Remote Procedure Call): reply queue와 correlation ID 활용 동기식 요청/응답

6. 성능 최적화

  • Persistent vs Transient 메시지: 디스크 I/O 차이
  • Prefetch Count: 한 consumer가 동시에 가져오는 메시지 수 제한
  • Cluster: 여러 노드로 브로커 확장, 큐 미러링 가능
  • Flow Control: backpressure를 통해 memory 압박 조절

7. 보안

  • 인증: Username/Password, LDAP, OAuth 2.0
  • 권한: vhost 단위로 큐/익스체인지 접근 제어
  • TLS 암호화: AMQP over TLS 지원
  • 정책: 메시지 TTL, 큐 최대 길이 제한

8. 관리

  • Management Plugin: Web UI 제공
    • 큐 상태, 메시지 수, consumer, 채널 모니터링
  • CLI Tools: rabbitmqctl, rabbitmq-diagnostics 등
  • Metrics: Prometheus, Grafana 연동 가능

9. 장점

  • 안정적인 메시징, 다양한 패턴 지원
  • 다중 프로토콜 지원
  • 미러링/클러스터링으로 고가용성 구현
  • 풍부한 관리 UI, 모니터링 도구

10. 단점/주의점

  • 매우 높은 처리량 필요 시 CPU/Memory 부담
  • 브로커 설계 및 큐 설계 중요 (너무 많은 큐, 지나친 미러링은 성능 저하)
  • 메시지 순서 보장과 Ack 관리 필요

'소프트웨어 > 상식' 카테고리의 다른 글

Active Directory(AD)  (1) 2025.09.21
MQTT : 경량 게시-구독(Publish-Subscribe) 메시징 프로토콜  (0) 2025.09.20
Apache Kafka  (1) 2025.09.20
JWT(JSON Web Token)  (0) 2025.09.20
보안 및 인증 분야 "토큰(Token)"  (0) 2025.09.20

+ Recent posts