Skip to content
Hee edited this page Jun 27, 2025 · 2 revisions

sequenceDiagram participant Client as 클라이언트 participant NotiService as 알림 서비스 (예: NotificationManager) participant NotiSender as <> NotificationSender participant MailSender as MailNotificationSender participant DiscordSender as DiscordNotificationSender participant KakaoSender as KakaoNotificationSender participant SlackSender as SlackNotificationSender participant ExternalMail as 외부 메일 서비스 participant ExternalDiscord as 외부 Discord API participant ExternalKakao as 외부 Kakao API participant ExternalSlack as 외부 Slack API

Client->>NotiService: 알림 발송 요청 (메시지, 타입)
activate NotiService
Note right of NotiService: 요청된 알림 타입에 따라 적절한 NotificationSender 구현체 선택

NotiService->>NotiSender: sender = getSender(알림타입)
% activate NotiSender // 이 줄을 제거합니다.

alt 메일 알림 발송
    NotiSender-->>MailSender: MailNotificationSender 인스턴스 반환
    % deactivate NotiSender // 이 줄을 제거합니다.
    NotiService->>MailSender: initialize(설정정보)
    activate MailSender
    MailSender->>ExternalMail: API 연결 및 인증
    ExternalMail-->>MailSender: 연결 성공
    deactivate MailSender
    NotiService->>MailSender: send(메시지)
    activate MailSender
    MailSender->>ExternalMail: sendMail(메시지)
    activate ExternalMail
    ExternalMail-->>MailSender: 발송 결과 (성공/실패)
    deactivate ExternalMail
    MailSender-->>NotiService: NotificationResult 반환
    deactivate MailSender
else Discord 알림 발송
    NotiSender-->>DiscordSender: DiscordNotificationSender 인스턴스 반환
    % deactivate NotiSender // 이 줄을 제거합니다.
    NotiService->>DiscordSender: initialize(설정정보)
    activate DiscordSender
    DiscordSender->>ExternalDiscord: API 연결 및 인증
    ExternalDiscord-->>DiscordSender: 연결 성공
    deactivate DiscordSender
    NotiService->>DiscordSender: send(메시지)
    activate DiscordSender
    DiscordSender->>ExternalDiscord: sendMessage(메시지)
    activate ExternalDiscord
    ExternalDiscord-->>DiscordSender: 발송 결과
    deactivate ExternalDiscord
    DiscordSender-->>NotiService: NotificationResult 반환
    deactivate DiscordSender
else 카카오 알림 발송
    NotiSender-->>KakaoSender: KakaoNotificationSender 인스턴스 반환
    % deactivate NotiSender // 이 줄을 제거합니다.
    NotiService->>KakaoSender: initialize(설정정보)
    activate KakaoSender
    KakaoSender->>ExternalKakao: API 연결 및 인증
    ExternalKakao-->>KakaoSender: 연결 성공
    deactivate KakaoSender
    NotiService->>KakaoSender: send(메시지)
    activate KakaoSender
    KakaoSender->>ExternalKakao: sendMessage(메시지)
    activate ExternalKakao
    ExternalKakao-->>KakaoSender: 발송 결과
    deactivate ExternalKakao
    KakaoSender-->>NotiService: NotificationResult 반환
    deactivate KakaoSender
else Slack 알림 발송
    NotiSender-->>SlackSender: SlackNotificationSender 인스턴스 반환
    % deactivate NotiSender // 이 줄을 제거합니다.
    NotiService->>SlackSender: initialize(설정정보)
    activate SlackSender
    SlackSender->>ExternalSlack: API 연결 및 인증
    ExternalSlack-->>SlackSender: 연결 성공
    deactivate SlackSender
    NotiService->>SlackSender: send(메시지)
    activate SlackSender
    SlackSender->>ExternalSlack: sendMessage(메시지)
    activate ExternalSlack
    ExternalSlack-->>SlackSender: 발송 결과
    deactivate ExternalSlack
    SlackSender-->>NotiService: NotificationResult 반환
    deactivate SlackSender
end

NotiService-->>Client: 알림 발송 완료 (결과)
deactivate NotiService

ADR 문서

도메인 정의서

REST API 설계

시퀀스 다이어그램

Clone this wiki locally