Adit 캠페인 알림 시스템 기획서
Version: 1.0.0
Last Updated: 2026-01-27
Domain: adit.now
Status: Draft
1. Executive Summary
캠페인 라이프사이클 전반에 걸쳐 광고주, 파트너, 내부 운영팀 3자에게 실시간 알림을 제공하는 통합 알림 시스템.
채널
- 이메일 (AWS SES) - ✅ 기존 인프라 활용 (
src/utils/email.ts) - 카카오 알림톡 (인포뱅크 비즈플러스) - 발신 프로필 보유
- 슬랙봇 (내부 운영팀) - @adit_set 정산팀 멘션
기존 인프라 현황
| 영역 | 현황 | 위치 |
|---|---|---|
| 이메일 발송 | ✅ AWS SES + Nodemailer 구현됨 | src/utils/email.ts |
| 템플릿 렌더링 | ✅ {{variable}} 치환 구현됨 | src/utils/email.ts |
| 템플릿 파일 | 1개 존재 (partner-welcome) | src/templates/email/ |
| 알림톡 | 🆕 신규 구현 필요 | - |
| 슬랙봇 | 🆕 신규 구현 필요 | - |
핵심 원칙
- 수신자별 맞춤 템플릿 (같은 이벤트, 다른 메시지)
- 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 이벤트별 수신자 & 메시지 톤
| 이벤트 | 광고주 메시지 톤 | 파트너 메시지 톤 | 내부 메시지 톤 |
|---|---|---|---|
PENDING | "캠페인이 등록되었습니다" | "새로운 캠페인 요청이 들어왔습니다" | "신규 캠페인 검토 필요" |
CONFIRMED | "🎉 캠페인이 확정되었습니다!" | "캠페인이 확정되었습니다" | "캠페인 확정 완료" |
UPLOADED | "콘텐츠가 업로드되었습니다" | "업로드 완료! 정산이 곧 진행됩니다" | "⚠️ 정산 처리 필요" |
COMPLETED | "정산이 완료되었습니다" | "💰 정산이 완료되었습니다!" | "캠페인 종료" |
4. 이메일 템플릿
4.1 이벤트별 이메일 제목
| 이벤트 | 광고주 제목 | 파트너 제목 |
|---|---|---|
PENDING | [Adit] 캠페인이 등록되었습니다 | [Adit] 새로운 캠페인 요청이 도착했습니다 |
CONFIRMED | [Adit] 🎉 캠페인이 확정되었습니다 | [Adit] 캠페인 확정 - 일정을 확인해주세요 |
UPLOADED | [Adit] 콘텐츠가 업로드되었습니다 | [Adit] ✅ 업로드 완료 - 정산 예정 |
COMPLETED | [Adit] 캠페인이 완료되었습니다 | [Adit] 💰 정산이 완료되었습니다 |
4.2 템플릿 변수
{
"subject": "[Adit] 🎉 캠페인이 확정되었습니다",
"heroTitle": "캠페인이 확정되었습니다!",
"heroDescription": "요청하신 캠페인이 확정되었습니다.",
"campaignName": "2월 발렌타인 프로모션",
"channelName": "맛있는녀석들",
"uploadDate": "2026년 2월 10일",
"statusLabel": "확정됨",
"estimatedCost": "₩1,500,000",
"ctaText": "캠페인 상세 보기",
"ctaUrl": "https://adit.now/campaigns/xxx"
}5. 카카오 알림톡
⚠️
카카오 알림톡은 템플릿 사전 승인 필요 (7-10일 소요)
5.1 광고주용 템플릿
ADIT_ADV_CONFIRMED (캠페인 확정)
[Adit] 캠페인 확정 안내
안녕하세요, #{advertiserName}님
🎉 요청하신 캠페인이 확정되었습니다!
■ 캠페인명: #{campaignName}
■ 채널: #{channelName}
■ 업로드 예정일: #{uploadDate}
■ 확정 비용: #{confirmedCost}원
[캠페인 상세보기]5.2 파트너용 템플릿
ADIT_PTN_SETTLED (정산 완료)
[Adit] 정산 완료 안내
안녕하세요, #{partnerName}님
💰 정산이 완료되었습니다!
■ 캠페인명: #{campaignName}
■ 정산 금액: #{settlementAmount}원
■ 입금 예정일: #{depositDate}
[정산 내역 확인]6. 슬랙봇
6.1 채널 구조
#adit-campaigns ← 모든 캠페인 알림 (메인)
#adit-settlements ← 정산 관련 알림 (선택적)
#adit-alerts ← 긴급 알림, 이슈 (선택적)6.2 멘션 그룹
| 그룹 | 슬랙 핸들 | 용도 |
|---|---|---|
| 정산팀 | @adit_set | 정산 처리 필요 시 태그 |
| 운영팀 | @adit_ops | 캠페인 검토/확정 시 |
6.3 상태별 이모지
| 상태 | 이모지 | 색상 |
|---|---|---|
| PENDING | 🟡 | amber |
| CONFIRMED | 🟢 | green |
| IN_PROGRESS | 🔵 | blue |
| UPLOADED | ✅ | green |
| COMPLETED | 💰 | green |
| CANCELLED | 🔴 | red |
6.4 슬래시 커맨드
| 커맨드 | 설명 |
|---|---|
/adit search [키워드] | 캠페인 검색 |
/adit summary | 오늘의 캠페인 현황 |
/adit pending | 대기 중인 캠페인 목록 |
/adit settlement | 정산 대기 캠페인 |
7. 기술 아키텍처
7.1 시스템 구조
7.2 핵심 설계 패턴
| 패턴 | 적용 위치 | 효과 |
|---|---|---|
| Strategy Pattern | Provider 선택 | 새 채널 추가 시 기존 코드 수정 없음 |
| Template Method | 템플릿 렌더링 | 수신자별 템플릿 확장 용이 |
| Observer Pattern | 이벤트 발행 | 캠페인 서비스와 느슨한 결합 |
| Factory Pattern | Provider 생성 | 런타임 채널 선택 |
7.3 폴더 구조
src/modules/notification/
├── notification.module.ts # 메인 모듈
├── notification.service.ts # 오케스트레이션 서비스
├── interfaces/ # 인터페이스 정의
├── constants/ # 상수 & 설정
├── providers/ # 채널별 Provider
│ ├── email/
│ ├── kakao/
│ └── slack/
├── templates/ # 템플릿 시스템
├── events/ # 이벤트 핸들러
└── repositories/ # 데이터 접근8. 구현 로드맵
Week 1: ████████████████████████ Phase 1 (기반 인프라)
Week 2: ████████ Phase 2 (이메일) ████████ Phase 3 (알림톡) ████████ Phase 4 (슬랙)
Week 3: ████████ Phase 2 (이메일) ████████ Phase 3 (알림톡) ████████ Phase 4 (슬랙)
Week 4: ████████████████████████ Phase 5 (통합 & 고도화)Phase 1: 기반 인프라 (1주차)
| 태스크 | 설명 |
|---|---|
| 1.1 | NotificationModule 생성 |
| 1.2 | DB 스키마 마이그레이션 |
| 1.3 | NotificationService 기본 구조 |
| 1.4 | 이벤트 시스템 설계 (EventEmitter) |
| 1.5 | NotificationLog CRUD |
9. 성공 지표 (KPI)
| 지표 | 목표 | 측정 방법 |
|---|---|---|
| 이메일 발송 성공률 | > 99% | NotificationLog 집계 |
| 알림톡 발송 성공률 | > 95% | NotificationLog 집계 |
| 이메일 오픈율 | > 40% | SES 트래킹 |
| CTA 클릭률 | > 15% | UTM 파라미터 |
| 평균 응답 시간 (확정) | < 2시간 | 슬랙 타임스탬프 |