멀티 채널 알림 발송 구조 선택

상태

승인

후보군

방안설명
Composite GatewayNotificationGateway interface를 채널별로 구현하고, @Primary Composite가 모두 호출
UseCase 직접 호출UseCase가 Discord·Mac 구현체를 각각 직접 의존해 순차 호출

결정

NotificationGateway interface를 채널별 구현체(Discord, Mac)로 두고, CompositeNotificationGateway(@Primary)가 활성 채널을 모두 호출하는 구조를 채택한다. 채널 on/off는 환경변수로 제어한다.

결정 이유

  • Discord와 Mac 두 채널을 동시 발송해야 하며, 향후 채널 추가 가능성이 있다.
  • Composite 패턴으로 UseCase·DomainService는 채널 수에 무관하게 인터페이스만 호출한다.
  • 채널 추가 시 구현체만 등록하면 되어 기존 코드 변경이 불필요하다.

검토 대안

방안기각 이유
UseCase 직접 호출채널 추가 시 UseCase 변경 전파, OCP 위반

트레이드 오프

  • 득: 채널 추가 시 구현체만 등록, UseCase·DomainService 변경 불필요, OCP 충족
  • 실: Composite 클래스 추가로 간접 레이어 증가