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 | 사용처 |
|---|---|---|---|
| Primary | Gray 900 | #0F172A | 버튼, 제목, 강조 |
| Background | White | #FFFFFF | 메일 배경 |
| Secondary BG | Gray 50 | #F9FAFB | 섹션 구분 |
| Border | Gray 200 | #E5E7EB | 구분선, 테두리 |
| Text Primary | Gray 900 | #0F172A | 본문 텍스트 |
| Text Secondary | Gray 600 | #4B5563 | 부가 정보 |
| Success | Green 500 | #10B981 | 완료, 성공 |
| Warning | Amber 500 | #F59E0B | 주의 |
| Error | Red 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) | 24px | 700 (Bold) |
| 소제목 | 18px | 600 (SemiBold) |
| 본문 | 16px | 400 (Regular) |
| 캡션 | 14px | 400 (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) 기준:
| 상수 | 채널 | 용도 |
|---|---|---|
CAMPAIGNS | C0AB5Q3Q9HC (adit-campaigns) | 캠페인 알림 (스레드 방식) |
SETTLEMENTS | #adit-settlements | 정산 관련 알림 |
ALERTS | #adit-alerts | 긴급 알림, 이슈 |
| — | #파트너가입활성채널 | 파트너 온보딩 완료 |
| — | #광고주승인 | 광고주 승인 요청 |
6.2 멘션 그룹
| 그룹 | 슬랙 핸들 | 적용 이벤트 |
|---|---|---|
| 정산팀 | @adit_set | SETTLEMENT_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 |
| UPLOADED | ✅ | green |
| 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 Pattern | Provider 선택 | 새 채널 추가 시 기존 코드 수정 없음 |
| Template Method | 템플릿 렌더링 | 수신자별 템플릿 확장 용이 |
| Observer Pattern | 이벤트 발행 | 캠페인 서비스와 느슨한 결합 |
| Factory Pattern | Provider 생성 | 런타임 채널 선택 |
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시간 | 슬랙 타임스탬프 |