Computer Science/아키텍처

[아키텍처] Publish-Subscribe 패턴

웅지니어링 2025. 2. 7. 10:31

* Publish-Subscribe (Pub-Sub) 패턴이란?

Publish-Subscribe(이하 Pub-Sub) 패턴은 발행자(Publisher)와 구독자(Subscriber) 간의 메시지 전달을 위한 비동기 통신 모델이다. 직접적인 연결 없이 중앙 브로커(Message Broker)를 통해 메시지를 주고받는다. 

 

* Pub-Sub의 핵심 요소

  1. Publisher(발행자)
    • 메시지를 생성하고 특정 토픽(Topic)으로 발행한다.
    • 구독자의 존재 여부를 신경 쓰지 않는다.
  2. Subscriber(구독자)
    • 특정 토픽(Topic)을 구독하고, 해당 토픽의 메시지를 전달받는다.
    • 발행자가 누구인지 알 필요가 없다.
  3. 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 패턴은 아키텍처 패턴이라고 볼 수 있다.