Publish/Subscribe (Pub/Sub) 패턴

Publish/Subscribe (Pub/Sub) 패턴은 메시징 패턴 중 하나로, 메시지를 보내는 출판자(publisher)와 메시지를 받는 구독자(subscriber)가 직접적인 연결 없이 메시지를 교환할 수 있는 방식입니다. 이 패턴은 분산 시스템, 이벤트 주도 아키텍처, 메시지 큐 시스템 등에서 널리 사용됩니다.

기본 개념

  • Publisher: 메시지를 발행하는 주체로, 특정 토픽에 대한 정보를 보냅니다. 발행자는 메시지를 받을 구독자가 누구인지, 또는 메시지가 어떻게 전달되는지에 대해서는 알지 못합니다.

  • Subscriber: 메시지를 구독하는 주체로, 관심 있는 토픽을 구독하고 해당 토픽에 대한 메시지가 발행될 때마다 그 메시지를 받습니다.

  • Message: 특정 데이터 또는 정보를 담고 있는 패킷으로, 특정 토픽에 대한 정보를 포함할 수 있습니다.

  • Topic: 메시지를 분류하기 위한 범주 또는 채널입니다. 구독자는 하나 이상의 토픽을 구독할 수 있으며, 발행자는 하나의 토픽에 대해 메시지를 발행할 수 있습니다.

  • Broker or Message Queue: 발행자와 구독자 사이의 중개자 역할을 합니다. 메시지의 라우팅, 버퍼링, 전달 등을 담당합니다. 구독자와 발행자 사이를 연결하고, 구독자가 오프라인일 때는 메시지를 저장해 둘 수도 있습니다.

장점

  • 탈중앙화: 구독자와 발행자 간에는 직접적인 연결이 없어, 각자의 처리량과 성능에 영향을 주지 않습니다.
  • 확장성: 새로운 발행자나 구독자를 시스템에 추가하는 것이 비교적 쉽습니다.
  • 유연성: 구독자는 필요한 메시지만 선택적으로 받을 수 있으며, 발행자는 구독자의 존재를 신경 쓰지 않고 메시지를 발행할 수 있습니다.
  • 비동기 처리: 구독자는 메시지를 자신의 처리 속도에 맞추어 처리할 수 있으며, 메시지는 중간에 버퍼링 될 수 있습니다.

단점

  • 메시지 보장: 일부 Pub/Sub 시스템에서는 메시지가 항상 전달되리라는 것을 100% 보장하지 않습니다 (At-least-once, At-most-once, Exactly-once 등의 배달 보장 수준에 따라 다름).
  • 복잡성: 시스템의 규모가 커질수록, 더 많은 수의 토픽과 메시지 관리로 인해 복잡성이 증가할 수 있습니다.
  • 디버깅과 모니터링: 분산된 nature로 인해 디버깅과 모니터링이 더 어려울 수 있습니다.

예시

  • IoT 디바이스: 다양한 센서들이 온도, 습도 등의 데이터를 발행하고, 이를 분석하는 서버들이 해당 토픽을 구독하여 데이터를 처리합니다.
  • 서비스 간 통신: 마이크로서비스 아키텍처에서 서비스 간의 결합도를 낮추기 위해 사용됩니다.
  • 이벤트 주도 아키텍처: 사용자의 행동에 따른 이벤트를 발행하고, 이를 여러 시스템에서 구독하여 반응합니다.

메시지 브로커로는 Apache Kafka, RabbitMQ, Google Pub/Sub, Amazon SNS/SQS 등이 널리 사용됩니다.

댓글

이 블로그의 인기 게시물

WPF 에서 초간단 런타임 다중 언어 지원

iOS error - Canvas area exceeds the maximum limit (width * height > 16,777,216)

블랙핑크 로제의 보컬의 특징