RabbitMQ ‐ Pub & Sub 모델 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 Pub / Sub 모델

- Pub / Sub는 메시지 발행과 구독 개념을 기반으로 하는 메시징 패턴으로 메시지를 중간 브로커(Exchange)를 통해 구독자들에게 메시지를 전달한다.
- RabbitMQ에서는 Fanout Exchange를 통해 연결된 모든 Queue에게 메시지를 전달하므로 Binding을 통해 익스체인지를 연결하여 동시에 메시지를 받을 수 있다.
[ Pub / Sub 모델 특징 ]
- 다대다 메시징
- 하나의 메시지가 여러 Subscriber에게 전달
- 메시지 복사가 이루어지므로 Subscriber는 동일한 메시지를 수신, 동일한 메시지가 여러 큐에 처리되므로 중복 처리 로직이 필요할 수 있다.
- 구독자 독립성
- 발행자는 메시지가 어떤 구독자에게 전달될지 알 필요가 없다.
- 메시지 전달은 브로커가 처리
- 비동기 메시징
- 발행자와 구독자는 서로 독립적으로 동작하며 동시에 실행될 필요가 없다.
- 확장성
- 여러 구독자를 추가하거나 제거해도 시스템이 영향을 받지 않음
- 구독 제어
- 구독자는 특정 조건을 기반으로 메시지를 필터링하여 수신할 수도 있다.
- Fanout Exchange는 모든 구독자들에게 메시지를 브로드캐스트하는 반면 Routing Key는 필요하지 않음
- Topic Exchange나 Direct Exchange는 메시지를 선택적으로 전달 가능
- 구독자가 많을수록 복잡도 증가
[ WebSocket ]
- WebSocket은 양방향 통신을 가능하게 하는 표준 프로토콜(RTC-6455)로 클라이언트와 서버 간에 실시간 데이터를 주고받는데 적합하다.
- 데이터를 프레임 단위로 전송하며, 오버헤드가 낮다.
- 기존의 HTTP 통신과 달리 연결이 초기화된 후에는 상태를 유지하며 데이터 교환이 가능
ws://호스트:포트/경로
형태로 작성
[ WebSocket 주요 특징 ]
- 실시간성 : 클라이언트와 서버 간 실시간으로 데이터를 주고 받을 수 있다.
- 효율성 : HTTP 기반 폴링보다 네트워크 자원과 대역폭 절약 & 연결이 열려 있는 동안 별도의 요청/응답없이 데이터를 지속적으로 전송 가능
- 양방향 통신 : 클라이언트에서 서버로 요청을 보낼 필요 없이 서버가 클라이언트로 데이터를 푸시
- 낮은 지연 시간 : 한 번 연결 설정이 되면 데이터 전송 속도가 매우 빠름
- 상태 유지 : 연결이 끊기지 않는 동안 클라이언트 상태를 서버에서 유지 가능
[ Pub / Sub 모델 활용 예시 ]
- 실시간 채팅
- 실시간 알림
- IoT 데이터 스트리밍
- 위치 추적, 이벤트 트래킹, 분산 이벤트 통신
- SNS 좋아요, 새 게시물, 댓글, 팔로워

- Binding : 큐와 익스체인지 간 관계 정의
- 메시지가 Exchange에 도착했을 때, 어떤 큐로 전달할지를 결정
- Publisher는 Exchange에 메시지를 보내고 Exchange는 Queue와 바인딩되어 연결
- Subscriber에서
@RabbitListener
어노테이션에 의해 큐를 바라보다가 Exchange에 메시지가 도착하면 Queue로 발행되고 Queue가 메시지를 수신