멀티 채널 알림 발송 구조 선택
상태
승인
후보군
| 방안 | 설명 |
|---|---|
| Composite Gateway | NotificationGateway 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 클래스 추가로 간접 레이어 증가