* Publish-Subscribe (Pub-Sub) 패턴이란?
Publish-Subscribe(이하 Pub-Sub) 패턴은 발행자(Publisher)와 구독자(Subscriber) 간의 메시지 전달을 위한 비동기 통신 모델이다. 직접적인 연결 없이 중앙 브로커(Message Broker)를 통해 메시지를 주고받는다.
* Pub-Sub의 핵심 요소
- Publisher(발행자)
- 메시지를 생성하고 특정 토픽(Topic)으로 발행한다.
- 구독자의 존재 여부를 신경 쓰지 않는다.
- Subscriber(구독자)
- 특정 토픽(Topic)을 구독하고, 해당 토픽의 메시지를 전달받는다.
- 발행자가 누구인지 알 필요가 없다.
- Message Broker(중앙 브로커)
- 발행자가 보낸 메시지를 구독자에게 전달하는 중개 역할을 한다.
- 대표적인 브로커: Kafka, RabbitMQ, Redis Pub/Sub, MQTT
* Pub-Sub의 동작 과정
- 구독자가 특정 토픽을 구독→ 예: "기상 정보 업데이트"라는 토픽을 구독
- 발행자가 해당 토픽에 메시지 발행→ 예: "오늘 날씨는 맑음"
- 브로커가 해당 메시지를 구독자에게 전달→ "기상 정보 업데이트" 토픽을 구독한 모든 구독자가 메시지를 받음
* Pub-Sub의 특징 및 장점
✅ 비동기 처리
→ 발행자와 구독자가 직접 연결되지 않아 독립적으로 동작
✅ 확장성(Scalability)
→ 구독자가 증가해도 발행자의 부담이 증가하지 않음
✅ 유연한 아키텍처
→ 메시지를 토픽 단위로 관리하여 다양한 애플리케이션에 적용 가능
* 대표적인 Pub-Sub 시스템
- Apache Kafka: 대규모 데이터 스트리밍 및 로그 처리
- RabbitMQ: 메시지 큐 기반의 Pub-Sub 시스템
- Redis Pub/Sub: 빠른 메시징을 지원하는 In-Memory 기반
- MQTT: IoT(사물인터넷) 환경에서 주로 사용
* Pub-Sub과 Observer 패턴 비교
Pub-Sub 패턴은 디자인 패턴 중 Observer 패턴과 유사하지만, 몇 가지 차이점이 있다.
비교 항목 | Observer 패턴 | Pub-Sub 패턴 |
관계 | 객체 간 직접적인 관계 | 중앙 메시지 브로커를 통한 비동기 통신 |
데이터 전달 | Observer(구독자)가 Subject(발행자)에서 직접 데이터를 받음 | 브로커(메시지 큐, 이벤트 버스 등)를 통해 데이터 전달 |
의존성 | Publisher와 Subscriber가 직접 연결됨 | 완전한 비동기 방식, 서로 직접 연결되지 않음 |
확장성 | Observer가 많아질수록 성능 저하 가능 | 구독자 수가 많아도 브로커를 통해 확장 가능 |
💡 Observer 패턴은 디자인 패턴이고, Pub-Sub 패턴은 아키텍처 패턴이라고 볼 수 있다.