발행-구독 패턴

이벤트를 발행하는 주체(Publisher)와 이벤트를 구독하는 주체(Subscriber)를 서로 완전히 분리하는 패턴

  • 발행자와 구독자는 중간에 브로커를 사이에 두고 소통하는 방식

  • 발행자와 구독자는 서로 누가 누군지 모른채 통신

    • 발행자: 이벤트(메시지)를 발행, 구독자가 누구인지 모름

    • 구독자: 특정 이벤트를 구독, 이벤트 수신시 반응

    • 브로커: 중간에서 이벤트 전달 역할, 구독/발행 관리

  • 복잡한 분산 시스템에서 컴포넌트 간의 느슨한 결합을 유지하면서 효율적인 비동기 통신과 확장성을 제공

  • 유연하고 확장 가능한 이벤트 중심 아키텍처를 구현할 수 있게됨

  • 비동기적인 작업처리에 유리함

    • 시간을 소모하는 비동기적 작업으로부터 발행자를 분리할 수 있음

    • 즉, 발행자는 비동기로 처리되는지 여부조차 신경쓰지않고 오로지 이벤트 발행에만 집중 가능

circle-info

관찰자 패턴과 유사한 패턴

  • 관찰자 패턴: 하나의 서브젝트가 보내는 메시지를 여러 관찰자가 직접 연결되어 수신하는 형태

  • 발행 구독 패턴: 발행자(서브젝트)와 구독자(관찰자) 사이에 브로커라는 매개체가 추가됨

    • 브로커가 발행자와 구독자의 의존성을 줄임


1. 발행자 객체

class MarketingDepartment {
  constructor(
    private emailService: EmailDeliveryService,
    private eventType: string
    ) {}
    
  launchCampaign(message: string) {
    console.log(`launching campaign ${message}`)
    emailService.sendEmails(this.eventType, message)
  }
  
}

2. 구독자 인터페이스

3. 구독자 객체

4. 브로커 객체

5. 클라이언트 코드

Last updated