Skip to content
Hee edited this page Jun 27, 2025 · 2 revisions
sequenceDiagram
    participant Client as 클라이언트
    participant NotiService as 알림 서비스 (예: NotificationManager)
    participant NotiSender as <<Interface>> 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
Loading

ADR 문서

도메인 정의서

REST API 설계

시퀀스 다이어그램

Clone this wiki locally