📖 Adit 서비스 가이드에 오신 것을 환영합니다!
system
알림 시스템

Adit 알림 시스템

Version: 2.0.0
Last Updated: 2026-05-31 (코드 기준 재검증)
Domain: adit.now
Status: Production


1. Executive Summary

캠페인 라이프사이클 전반에 걸쳐 광고주, 파트너, 내부 운영팀 3자에게 실시간 알림을 제공하는 통합 알림 시스템.

채널 현황

채널상태수신자비고
이메일 (AWS SES)✅ 활성광고주, 파트너, 내부src/modules/notification/providers/email/
슬랙봇 (Slack API)✅ 활성내부 운영팀src/modules/notification/providers/slack/
카카오 알림톡⏸ 비활성Provider 구현 완료, events.ts에서 전체 주석 처리됨

카카오 알림톡은 kakao.provider.ts 및 템플릿 코드(KAKAO_TEMPLATE_CODES 7개)가 구현되어 있으나, constants/events.ts에서 모든 이벤트의 KAKAO 채널이 주석 처리되어 현재 전부 비활성화 상태입니다. 신규 구현이 필요한 것이 아니라, 재활성화 시 주석 해제 후 템플릿 승인 절차만 거치면 됩니다.

핵심 원칙

  • 수신자별 맞춤 템플릿 (같은 이벤트, 다른 메시지)
  • Adit 브랜드 아이덴티티 일관성 유지
  • 원클릭 서비스 진입 (Deep Link + CTA)

2. 브랜드 가이드라인

2.1 컬러 팔레트

용도컬러HEX사용처
PrimaryGray 900#0F172A버튼, 제목, 강조
BackgroundWhite#FFFFFF메일 배경
Secondary BGGray 50#F9FAFB섹션 구분
BorderGray 200#E5E7EB구분선, 테두리
Text PrimaryGray 900#0F172A본문 텍스트
Text SecondaryGray 600#4B5563부가 정보
SuccessGreen 500#10B981완료, 성공
WarningAmber 500#F59E0B주의
ErrorRed 500#EF4444취소, 오류

2.2 타이포그래피

font-family: "Pretendard", -apple-system, BlinkMacSystemFont, system-ui, 
             "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", sans-serif;
letter-spacing: -0.01em;
용도크기Weight
제목 (Hero)24px700 (Bold)
소제목18px600 (SemiBold)
본문16px400 (Regular)
캡션14px400 (Regular)

3. 수신자별 알림 전략

3.1 수신자 정의

수신자설명이메일알림톡슬랙
광고주 (Advertiser)캠페인 등록한 광고주 담당자⏸ 비활성-
파트너 (Partner)채널 담당자⏸ 비활성-
내부 운영팀 (Internal)Adit 운영/정산팀✅ (일부)-

3.2 이벤트별 수신자 & 메시지 톤

이벤트광고주 메시지 톤파트너 메시지 톤내부 메시지 톤
CAMPAIGN_CREATED"캠페인이 등록되었습니다""새로운 캠페인 요청이 들어왔습니다"슬랙 스레드 생성
CAMPAIGN_CONFIRMED"캠페인이 확정되었습니다!""캠페인이 확정되었습니다"-
CAMPAIGN_UPLOADED"콘텐츠가 업로드되었습니다""업로드 완료! 정산이 곧 진행됩니다"이메일 + 슬랙 알림
CAMPAIGN_COMPLETED"캠페인이 완료되었습니다""정산이 완료되었습니다!"-
SETTLEMENT_REQUESTED--슬랙 @adit_set 멘션
TAX_INVOICE_FAILED--슬랙 @adit_set 멘션

4. 알림 이벤트 목록

17개 이벤트 (src/modules/notification/constants/events.ts):

4.1 캠페인 이벤트

이벤트 코드트리거수신자
CAMPAIGN_CREATED캠페인 신규 생성광고주, 파트너, 내부(슬랙)
CAMPAIGN_CONFIRMED캠페인 확정광고주, 파트너
CAMPAIGN_IN_PROGRESS캠페인 진행 시작광고주, 파트너
CAMPAIGN_UPLOADED콘텐츠 업로드 완료광고주, 파트너, 내부(이메일+슬랙)
CAMPAIGN_COMPLETED캠페인 최종 완료광고주, 파트너
CAMPAIGN_CANCELLED캠페인 취소광고주, 파트너
CAMPAIGN_UPLOAD_REMINDER업로드 기한 리마인더파트너
CAMPAIGN_DRAFT_SUBMITTED콘텐츠 초안 제출광고주
CAMPAIGN_DRAFT_COMMENT_CREATED초안 댓글 등록광고주, 파트너

4.2 정산/청구 이벤트

이벤트 코드트리거수신자
INVOICE_ISSUED청구서 발행파트너
SETTLEMENT_PENDING정산 대기파트너
SETTLEMENT_REQUESTED정산 요청내부(슬랙 @adit_set 멘션)
SETTLEMENT_ADVERTISER_PAID광고주 결제 완료광고주
SETTLEMENT_PAYOUT_PROCESSING파트너 지급 처리 중파트너
SETTLEMENT_COMPLETED정산 최종 완료파트너
SETTLEMENT_CANCELLED정산 취소파트너
TAX_INVOICE_FAILED세금계산서 발행 실패광고주, 파트너, 내부(슬랙 @adit_set 멘션)

5. 이메일 템플릿

5.1 템플릿 현황

40개 이메일 템플릿 (src/templates/email/):

템플릿 파일설명
campaign-created-advertiser캠페인 생성 → 광고주
campaign-created-partner캠페인 생성 → 파트너
campaign-confirmed-advertiser캠페인 확정 → 광고주
campaign-confirmed-partner캠페인 확정 → 파트너
campaign-in-progress-advertiser진행 시작 → 광고주
campaign-in-progress-partner진행 시작 → 파트너
campaign-uploaded-advertiser업로드 완료 → 광고주
campaign-uploaded-partner업로드 완료 → 파트너
campaign-uploaded-internal업로드 완료 → 내부팀
campaign-completed-advertiser완료 → 광고주
campaign-completed-partner완료 → 파트너
campaign-cancelled-advertiser취소 → 광고주
campaign-cancelled-partner취소 → 파트너
campaign-upload-reminder-partner업로드 리마인더 → 파트너

5.2 템플릿 변수 예시

{
  "subject": "[Adit] 캠페인이 확정되었습니다",
  "heroTitle": "캠페인이 확정되었습니다!",
  "heroDescription": "요청하신 캠페인이 확정되었습니다.",
  "campaignName": "2월 발렌타인 프로모션",
  "channelName": "맛있는녀석들",
  "uploadDate": "2026년 2월 10일",
  "statusLabel": "확정됨",
  "estimatedCost": "₩1,500,000",
  "ctaText": "캠페인 상세 보기",
  "ctaUrl": "https://adit.now/campaigns/xxx"
}

6. 슬랙봇

6.1 채널 구조

src/modules/notification/constants/slack.ts (SLACK_CHANNELS) 기준:

상수채널용도
CAMPAIGNSC0AB5Q3Q9HC (adit-campaigns)캠페인 알림 (스레드 방식)
SETTLEMENTS#adit-settlements정산 관련 알림
ALERTS#adit-alerts긴급 알림, 이슈
#파트너가입활성채널파트너 온보딩 완료
#광고주승인광고주 승인 요청

6.2 멘션 그룹

그룹슬랙 핸들적용 이벤트
정산팀@adit_setSETTLEMENT_REQUESTED, TAX_INVOICE_FAILED
⚠️

@adit_ops 핸들은 코드에 존재하지 않습니다. 슬랙 멘션은 @adit_set 하나만 사용합니다.

6.3 스레드 방식

캠페인 알림은 스레드 기반으로 동작합니다:

  • CAMPAIGN_CREATED: #adit-campaigns 채널에 새 스레드 생성 (createSlackThread: true)
  • 이후 상태 변경 이벤트 (CONFIRMED, IN_PROGRESS, UPLOADED, CANCELLED 등): 생성된 스레드에 리플라이 추가

6.4 상태별 이모지

상태이모지색상
PENDING🟡amber
CONFIRMED🟢green
IN_PROGRESS🔵blue
UPLOADEDgreen
COMPLETED💰green
CANCELLED🔴red

7. 카카오 알림톡

⚠️

카카오 알림톡은 Provider 코드(kakao.provider.ts)와 템플릿 코드(KAKAO_TEMPLATE_CODES 7개)가 구현되어 있으나, constants/events.ts에서 모든 이벤트의 KAKAO 채널이 주석 처리되어 현재 전부 비활성화 상태입니다. 재활성화 시 주석 해제 후 카카오 알림톡 템플릿 승인 절차(7-10일)를 거쳐야 합니다.

7.1 구현된 카카오 템플릿 코드 (현재 비활성)

KAKAO_TEMPLATE_CODES 에 7개 정의되어 있으며, 활성화 전 카카오 측 승인 필요:

이벤트템플릿 코드
CAMPAIGN_CONFIRMED (파트너)adit-pending_confirme-v1 (코드명에 오타 포함)
기타 6개

8. 기술 아키텍처

8.1 시스템 구조

8.2 핵심 설계 패턴

패턴적용 위치효과
Strategy PatternProvider 선택새 채널 추가 시 기존 코드 수정 없음
Template Method템플릿 렌더링수신자별 템플릿 확장 용이
Observer Pattern이벤트 발행캠페인 서비스와 느슨한 결합
Factory PatternProvider 생성런타임 채널 선택

8.3 폴더 구조

src/modules/notification/
├── notification.module.ts           # 메인 모듈
├── notification.service.ts          # 오케스트레이션 서비스
├── interfaces/                      # 인터페이스 정의
├── constants/
│   ├── events.ts                    # 17개 이벤트 정의 (KAKAO 채널 주석 처리)
│   └── slack.ts                     # SLACK_CHANNELS 상수
├── providers/                       # 채널별 Provider
│   ├── email/                       # ✅ 활성
│   ├── kakao/                       # ⏸ 비활성 (구현됨)
│   └── slack/                       # ✅ 활성
├── templates/                       # 템플릿 시스템
├── events/                          # 이벤트 핸들러
└── repositories/                    # 데이터 접근

src/templates/email/                 # 40개 HTML 이메일 템플릿

9. 성공 지표 (KPI)

지표목표측정 방법
이메일 발송 성공률> 99%NotificationLog 집계
알림톡 발송 성공률> 95%NotificationLog 집계 (재활성화 시)
이메일 오픈율> 40%SES 트래킹
CTA 클릭률> 15%UTM 파라미터
평균 응답 시간 (확정)< 2시간슬랙 타임스탬프

10. 참고 링크