Skip to content

Epic Spec: E-07 쿠폰 & 추천인 코드 시스템

마케팅 실행력 확보를 위한 쿠폰/추천인 코드 인프라 구축
50명 액션플랜 달성의 핵심 도구


메타

항목
Epic IDE-07
SprintS52
상태approved
PO 승인일2026-01-20
담당 개발자-

1. WHY: 왜 이 기능이 필요한가?

문제 정의

현재 장사왕은 마케팅 실행 수단이 없다.

  1. 신규 유저 전환 도구 부재: Trial만으로는 결제 전환이 어려움
  2. 추천 인센티브 없음: 기존 유저의 바이럴 동기가 없음
  3. 결제 정책 마찰: 일할 환불 정책으로 인한 운영 복잡도
현재 상황:
- Trial 후 결제 전환 시 "왜 돈을 내야 하지?" 장벽
- 만족한 유저도 추천할 동기가 없음
- 50명 유료 목표 달성을 위한 마케팅 레버가 없음

근거 데이터

지표수치출처
Trial → 유료 전환율측정 필요GA4
자발적 추천 건수0건내부
마케팅 캠페인 실행 가능 여부불가현재 기능 없음

기대 효과

기능기대 효과
첫결제 100원 쿠폰Trial 유저의 결제 전환율 향상 + 빌링키 확보
추천인 코드기존 유저의 바이럴 루프 활성화
결제 정책 변경운영 단순화 + SaaS 표준 모델 정착

2. 결제 정책 변경

AS-IS (기존 정책)

결제 취소 시 → 일할 계산하여 즉시 환불

예시:
- 1/15 결제 (110,000원)
- 1/20 취소 요청
- 5일 사용분 = 110,000 × (5/30) = 18,333원
- 환불 금액 = 91,667원

문제점:

  • 환불 계산 복잡
  • 부분 환불 처리 어려움
  • 재결제 시 혼란

TO-BE (신규 정책)

결제 취소 시 → 이번 결제 기간까지 서비스 이용
              → 다음 정기결제부터 취소 적용
              → 환불 없음

예시:
- 1/15 결제 (110,000원), 결제 기간: 1/15~2/14
- 1/20 취소 요청
- 2/14까지 서비스 계속 이용 가능
- 2/15 정기결제 발생 안 함 (구독 종료)

장점:

  • SaaS 표준 모델 (Netflix, Spotify 등)
  • 운영 단순화
  • 쿠폰 처리 로직 명확화

마이그레이션 플랜

┌─────────────────────────────────────────────────────────────┐
│  기존 PG(PortOne) 유저     │  신규 PG(Toss) 유저            │
├─────────────────────────────────────────────────────────────┤
│  AS-IS 정책 유지           │  TO-BE 정책 적용               │
│  (일할 환불)               │  (기간 만료 후 해지)            │
│                            │                                │
│  이유:                     │  이유:                         │
│  - 기존 약관 준수          │  - 신규 약관으로 시작          │
│  - 혼란 방지               │  - 쿠폰 시스템 최적화          │
└─────────────────────────────────────────────────────────────┘

기준일: 신규 PG 전환 완료일 (TossPayments 라이브)


3. 쿠폰 시스템

3.1 쿠폰 유형

유형코드설명사용 예시
정액 할인FIXED고정 금액 차감109,900원 할인 → 첫결제 100원
정률 할인PERCENT비율 차감50% 할인 → 55,000원
무료 체험 연장TRIAL_EXTTrial 기간 추가+14일 무료

3.2 쿠폰 속성

typescript
interface Coupon {
  id: string;
  code: string;                    // 쿠폰 코드 (예: FIRST100)
  type: 'FIXED' | 'PERCENT' | 'TRIAL_EXT';

  // 할인 정보
  discountAmount?: number;         // 정액 할인 금액
  discountPercent?: number;        // 정률 할인 비율 (0-100)
  maxDiscountAmount?: number;      // 정률 할인 최대 금액
  trialDays?: number;              // 무료 체험 연장 일수

  // 사용 조건
  minPaymentAmount?: number;       // 최소 결제 금액
  validFrom: Date;                 // 유효 시작일
  validUntil: Date;                // 유효 종료일
  maxUsageTotal?: number;          // 전체 사용 가능 횟수
  maxUsagePerUser: number;         // 유저당 사용 가능 횟수 (기본: 1)

  // 적용 범위
  applicablePlans: string[];       // 적용 가능 플랜 (빈 배열 = 전체)
  isFirstPaymentOnly: boolean;     // 첫 결제 전용 여부

  // 상태
  isActive: boolean;
  usedCount: number;

  createdAt: Date;
  updatedAt: Date;
}

3.3 쿠폰 발급 정책

항목정책
발급 방식어드민에서 수동 생성 / 시스템 자동 발급
발급 수량쿠폰별 maxUsageTotal 설정 (무제한 = null)
코드 형식영문 대문자 + 숫자, 6~12자
유효 기간쿠폰별 개별 설정 필수

3.4 쿠폰 사용 정책

기본 규칙

규칙내용
중복 사용❌ 불가 - 1회 결제에 1개 쿠폰만
정기결제 자동 적용❌ 불가 - 쿠폰은 해당 결제에만 적용
다음 결제 이월❌ 불가 - 미사용 쿠폰은 소멸하지 않고 보유

쿠폰 + 크레딧 동시 적용 순서

⚠️ 업계 표준 (Stripe, Chargebee): 쿠폰 먼저 → 크레딧 나중

[적용 순서]
1. 원가에서 쿠폰 할인 먼저 적용
2. 쿠폰 적용 후 금액에서 크레딧 차감
3. 남은 금액 결제

[예시]
원가: 110,000원
쿠폰: 50% 할인 (55,000원)
크레딧: 14,000원

계산:
① 110,000 - 55,000(쿠폰) = 55,000원
② 55,000 - 14,000(크레딧) = 41,000원
③ 최종 결제: 41,000원

[이유]
- 쿠폰은 마케팅 비용 (할인율 기반)
- 크레딧은 고객 자산 (잔액 차감)
- 쿠폰 먼저 적용해야 크레딧 사용량 최소화 → 고객에게 유리

결제 취소 시 쿠폰 원복 정책 (TO-BE 정책 기준)

┌─────────────────────────────────────────────────────────────┐
│  시나리오: 쿠폰으로 첫결제 100원 → 구독 취소              │
├─────────────────────────────────────────────────────────────┤
│  1. 구독 취소 = 결제 취소가 아님                          │
│  2. 현재 결제 기간은 그대로 사용                          │
│  3. 쿠폰은 이미 "사용 완료" 상태                          │
│  4. 재구독 시 새로운 쿠폰 필요 (같은 쿠폰 재사용 불가)    │
└─────────────────────────────────────────────────────────────┘

결제 실패 시 쿠폰 처리

┌─────────────────────────────────────────────────────────────┐
│  시나리오: 쿠폰 적용 후 결제 시도 → 결제 실패             │
├─────────────────────────────────────────────────────────────┤
│  1. 결제 실패 = 쿠폰 미사용 (사용 처리 안 됨)             │
│  2. 재시도 시 같은 쿠폰 적용 가능                         │
│  3. 유효기간 내라면 언제든 재시도 가능                    │
└─────────────────────────────────────────────────────────────┘

정기결제 실패 시 처리 (기존 구독자)

┌─────────────────────────────────────────────────────────────┐
│  시나리오: 정기결제 실패 (잔액 부족 등)                    │
├─────────────────────────────────────────────────────────────┤
│  1. 정기결제에는 쿠폰이 적용되지 않음                     │
│  2. 결제 실패 → 현행 재시도 정책 따름 (E-06 참조)         │
│  3. 재시도 모두 실패 시 구독 자동 해지                    │
│  4. 보유 쿠폰은 그대로 유지 (재구독 시 사용 가능)         │
└─────────────────────────────────────────────────────────────┘

3.5 이관 인센티브 쿠폰 (기존 유저)

목적

E-06 PG 이관 시 기존 PortOne 유저가 TossPayments로 카드 재등록을 유도하기 위한 인센티브 쿠폰

쿠폰 스펙

항목
쿠폰 코드MIGRATE10 (시스템 자동 생성)
유형정률 할인 (PERCENT)
할인 비율10%
할인 금액11,000원 (PRO10 기준)
유저당 사용1회
적용 조건TossPayments 카드 재등록 완료 시 자동 발급
적용 범위재등록 후 첫 번째 정기결제에만 적용
유효 기간발급일로부터 60일

발급 조건

[이관 인센티브 쿠폰 발급 조건]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

필수 조건 (모두 만족):
1. 기존 PortOne(이니시스) 결제 이력이 있는 유저
2. TossPayments로 카드 재등록 완료
3. 이관 인센티브 쿠폰 미발급 상태

발급 시점:
• TossPayments 빌링키 발급 성공 시 자동 발급

적용 시점:
• 재등록 후 첫 번째 정기결제에 자동 적용
• (첫결제 100원 쿠폰과 다름: 이건 "정기결제"에 적용)

주의:
• 신규 가입자에게는 발급되지 않음
• 이미 TossPayments로 가입한 유저에게는 발급되지 않음

사용 예시

[예시: 기존 유저 김셀러의 이관]

1. 김셀러: PortOne으로 1년간 결제 중
2. 이관 안내 알림 수신
3. TossPayments 카드 재등록 완료
4. [시스템] MIGRATE10 쿠폰 자동 발급
5. 다음 정기결제일 (2월 15일)
   - 원가: 110,000원
   - 쿠폰 할인: -11,000원 (10%)
   - 최종 결제: 99,000원
6. 그 다음달 (3월 15일)
   - 원가: 110,000원
   - 쿠폰: 없음 (이미 사용)
   - 최종 결제: 110,000원

3.6 첫결제 100원 전략 (신규 유저)

플로우

[Trial 시작]

[Trial 기간 중 몰연동]

[Trial 만료 D-3 알림] ← "첫결제 100원 쿠폰 지급!"

[결제 페이지 진입]

[쿠폰 자동 적용: 109,900원 할인]

[100원 결제 + 빌링키 등록]

[구독 시작 - 다음달부터 110,000원]

쿠폰 스펙

항목
쿠폰 코드FIRST100 (시스템 자동 생성)
유형정액 할인 (FIXED)
할인 금액109,900원
유저당 사용1회
적용 조건첫 결제 전용 (isFirstPaymentOnly: true)
자동 발급 조건Trial 유저 + 몰연동 완료

목표

지표BeforeTarget
Trial → 결제 전환율TBD+20%p
빌링키 확보율0%80%

4. 추천인 코드 시스템

4.1 추천인 코드 구조

typescript
interface ReferralCode {
  id: string;
  code: string;                    // 추천인 코드 (예: SELLER-ABC123)
  ownerId: string;                 // 코드 소유자 (추천인) ID

  // 통계
  totalReferrals: number;          // 총 추천 수 (가입)
  activatedReferrals: number;      // 활성화 수 (몰연동)
  paidReferrals: number;           // 결제 완료 수

  // 상태
  isActive: boolean;
  createdAt: Date;
}

4.2 크레딧 기반 보상 시스템

크레딧 스펙

typescript
interface ReferralCredit {
  id: string;
  userId: string;                  // 크레딧 보유자
  balance: number;                 // 현재 잔액 (원)

  // 이력
  transactions: CreditTransaction[];
}

interface CreditTransaction {
  id: string;
  type: 'EARN' | 'USE' | 'EXPIRE';
  amount: number;
  referralId?: string;             // 관련 피추천인 ID
  reason: string;
  createdAt: Date;
}

보상 구조 (2단계)

┌─────────────────────────────────────────────────────────────┐
│  추천인 보상 = 크레딧 지급 (총 7,000원/건)                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1단계: 피추천인 몰연동 완료                               │
│         → 추천인에게 3,500원 크레딧 지급                   │
│                                                             │
│  2단계: 피추천인 첫 결제 완료                              │
│         → 추천인에게 3,500원 크레딧 추가 지급              │
│                                                             │
│  ※ 단순 가입만 = 보상 없음                                │
└─────────────────────────────────────────────────────────────┘

크레딧 사용

항목정책
사용처정기결제 시 자동 차감
차감 순서오래된 크레딧부터 FIFO
최소 결제0원 가능 (크레딧으로 전액 결제)
누적 상한없음 (무제한 누적 가능)
유효 기간적립일로부터 12개월
현금 환급❌ 불가

보상 예시

[예시 1: 3명 추천, 모두 결제]
- 추천인 A가 B, C, D를 추천
- B 몰연동: +3,500원 → B 결제: +3,500원
- C 몰연동: +3,500원 → C 결제: +3,500원
- D 몰연동: +3,500원 → D 결제: +3,500원
- 총 크레딧: 21,000원
- 다음 정기결제: 110,000 - 21,000 = 89,000원

[예시 2: 10명 추천, 모두 결제]
- 총 크레딧: 70,000원
- 다음 정기결제: 110,000 - 70,000 = 40,000원

[예시 3: 16명 추천, 모두 결제]
- 총 크레딧: 112,000원
- 다음 정기결제: 0원 (전액 크레딧)
- 잔여 크레딧: 2,000원 (다다음 결제에 사용)

4.3 피추천인 혜택

혜택내용
가입 시Trial 14일 (기본과 동일)
첫 결제 시첫결제 100원 쿠폰 (몰연동 완료 시 자동 발급)

4.4 추천 코드 가입 UX

[추천 코드 입력 방법]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

방법 1: URL 파라미터 (권장)
────────────────────────────
• 추천인이 공유하는 링크: https://jangsawang.com/signup?ref=SELLER-ABC123
• 피추천인이 링크 클릭 시 자동 적용
• 쿠키/세션에 저장하여 가입 완료 시까지 유지

방법 2: 가입 페이지 입력란
────────────────────────────
• 가입 폼 하단에 "추천 코드 (선택)" 입력란
• 직접 입력 가능
• URL 파라미터로 진입 시 자동 채워짐 (수정 불가)

[가입 페이지 UI]
┌────────────────────────────────────────────────────────────┐
│  장사왕 회원가입                                            │
├────────────────────────────────────────────────────────────┤
│                                                            │
│  이메일 *                                                   │
│  ┌──────────────────────────────────────────┐             │
│  │ seller@example.com                        │             │
│  └──────────────────────────────────────────┘             │
│                                                            │
│  비밀번호 *                                                 │
│  ┌──────────────────────────────────────────┐             │
│  │ ••••••••                                  │             │
│  └──────────────────────────────────────────┘             │
│                                                            │
│  ─────────────────────────────────────────────             │
│                                                            │
│  추천 코드 (선택)                                           │
│  ┌──────────────────────────────────────────┐             │
│  │ SELLER-ABC123              ✅ 유효한 코드 │             │
│  └──────────────────────────────────────────┘             │
│  └ 친구에게 받은 추천 코드가 있다면 입력하세요               │
│                                                            │
│  [        가입하기        ]                                │
│                                                            │
└────────────────────────────────────────────────────────────┘

[추천 코드 검증]
• 입력 시 실시간 유효성 검사 (debounce 300ms)
• 유효: ✅ "유효한 코드입니다" + 추천인 닉네임 표시
• 무효: ❌ "존재하지 않는 코드입니다"
• 비활성: ⚠️ "현재 사용할 수 없는 코드입니다"

4.5 어뷰징 방지

정책내용
자기 추천❌ 같은 이메일/전화번호 불가
중복 가입❌ 이전에 가입 이력 있는 유저 불가
동일 IP 제한⚠️ 24시간 내 동일 IP 3건 초과 시 검토 대기
비정상 패턴🔍 단기간 대량 추천 시 수동 검토

4.6 추천 코드 공유 UX

[공유 방법]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 링크 복사
   • URL: https://sellerking.io/signup?ref=SELLER-ABC123
   • 클립보드 복사 + "복사 완료!" 토스트

2. 카카오톡 공유
   • 카카오 SDK 연동
   • 미리보기 카드: "장사왕으로 광고 순이익 분석하세요"
   • 이미지: 서비스 썸네일 + 혜택 안내

3. QR 코드 (선택)
   • 오프라인 네트워킹용
   • 마이페이지에서 QR 다운로드 가능

4.7 추천 넛지 타이밍 정책

[추천 코드 노출 타이밍]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. 첫 순이익 양수 캠페인 발견 시 ⭐ 핵심
   • 트리거: 진단 결과에서 순이익 양수 캠페인 첫 확인
   • 위치: 진단 결과 페이지 하단 배너
   • 메시지: "이 인사이트를 셀러 친구에게도 알려주세요!"
   • CTA: [추천 코드 공유하기]

2. 정기결제 D-7 알림톡
   • 트리거: 정기결제 7일 전
   • 템플릿 하단에 추천 섹션 추가
   • 메시지: "친구 추천하면 7,000원 크레딧!"

3. 월간 리포트 발송 시 (순이익 상승 유저만)
   • 트리거: 월간 리포트 + 전월 대비 순이익 상승
   • 위치: 리포트 하단
   • 메시지: "이 성과를 친구도 누릴 수 있게 해주세요"

4. 유료 전환 직후 (첫 결제 완료)
   • 트리거: 첫 결제 성공
   • 위치: 결제 완료 페이지 + 알림톡
   • 메시지: "장사왕 시작을 축하해요! 친구에게도 알려주세요"

4.8 바이럴 루프 퍼널

[바이럴 퍼널 정의]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

                [현재 유료 유저 N명]

            [추천 코드 공유]  ← 목표: 30%

            [피추천인 가입]   ← 목표: 20%

            [몰연동 완료]     ← 목표: 60%

            [첫 결제 완료]    ← 목표: 50%

[퍼널 목표 수치]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

| 단계 | 전환율 목표 | 측정 방법 |
|------|------------|----------|
| 공유율 | 30% | 마이페이지 진입 대비 공유 클릭 |
| 가입 전환 | 20% | 추천 링크 클릭 대비 가입 완료 |
| 몰연동 전환 | 60% | 추천 가입자 대비 몰연동 완료 |
| 결제 전환 | 50% | 몰연동 완료 대비 첫 결제 |

[바이럴 계수 K]
K = N × 0.3 × 0.2 × 0.6 × 0.5 = 0.018N
→ K > 1 (자가 성장) 달성을 위해 공유율 강화 필요

5. 유저 스토리

5.1 신규 유저 - 첫결제 100원 플로우

👤 신규 셀러 A

1. 장사왕 가입 → Trial 14일 시작
2. 스마트스토어 몰연동 완료
3. [시스템] 첫결제 100원 쿠폰 자동 발급
4. Trial D-3 알림: "내일 Trial 끝나요! 첫결제 100원으로 시작하세요"
5. 결제 페이지 진입 → 쿠폰 자동 적용
6. 100원 결제 완료 + 빌링키 등록
7. 다음달 15일, 110,000원 정기결제

5.2 기존 유저 - 추천 플로우

👤 기존 유료 유저 B

1. 마이페이지에서 "내 추천 코드" 확인: SELLER-B1234
2. 지인 C에게 코드 공유
3. C가 코드로 가입 → Trial 시작
4. [시스템] "C님이 가입했어요!" 알림 (보상 아직 없음)
5. C가 몰연동 완료
6. [시스템] +3,500원 크레딧 지급! 알림
7. C가 첫 결제 완료
8. [시스템] +3,500원 크레딧 추가 지급! 알림
9. B의 다음 정기결제: 110,000 - 7,000 = 103,000원

5.3 구독 취소 → 재구독 플로우

👤 유료 유저 D (TO-BE 정책, 신규 PG)

1. 1/15 결제 완료 (110,000원)
2. 1/20 구독 취소 요청
3. [시스템] "2/14까지 이용 가능, 이후 구독 종료" 안내
4. 2/14까지 정상 이용
5. 2/15 구독 종료 (자동)
6. 3/1 재구독 결정
7. 결제 페이지 진입 → 첫결제 쿠폰 없음 (이미 사용)
8. 110,000원 결제 → 구독 재시작

5.4 쿠폰 + 크레딧 동시 보유 플로우

👤 유저 E (추천 크레딧 14,000원 + 쿠폰 보유)

1. 보유 상태:
   - 추천 크레딧: 14,000원
   - 50% 할인 쿠폰 (55,000원 할인)

2. 결제 페이지:
   - 원가: 110,000원
   - 쿠폰 적용: -55,000원 → 55,000원
   - 크레딧 적용: -14,000원 → 41,000원
   - 최종 결제: 41,000원

3. 다음달:
   - 원가: 110,000원
   - 쿠폰: 없음 (이미 사용)
   - 크레딧: 0원 (소진)
   - 최종 결제: 110,000원

6. 시스템 플로우

6.1 TossPayments 빌링 UI 제약사항

⚠️ 중요: TossPayments 자동결제(빌링) 결제창은 UI 커스텀을 지원하지 않음

제약사항:
- 결제창 내에서 쿠폰 선택/적용 UI 표시 불가
- 할인 정보를 결제창에 직접 표시 불가
- 결제 금액과 상품명만 전달 가능

→ 쿠폰/크레딧 선택은 장사왕 페이지에서 처리 후,
   최종 금액과 상품명을 TossPayments에 전달하는 방식으로 구현

6.2 상품명(orderName) 처리 로직

┌─────────────────────────────────────────────────────────────┐
│  첫 결제 (쿠폰 적용 시)                                      │
├─────────────────────────────────────────────────────────────┤
│  orderName: "장사왕 PRO10 (첫결제 할인)"                     │
│  amount: 100  (또는 쿠폰 적용 후 금액)                       │
│                                                             │
│  예시:                                                      │
│  - 첫결제 100원 쿠폰 → "장사왕 PRO10 (첫결제 할인)", 100원   │
│  - 50% 할인 쿠폰 → "장사왕 PRO10 (50% 할인)", 55,000원       │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│  정기결제 (2회차 이후)                                       │
├─────────────────────────────────────────────────────────────┤
│  orderName: "장사왕 PRO10 (2월)"                             │
│  amount: 110000 - 크레딧 차감액                              │
│                                                             │
│  예시:                                                      │
│  - 크레딧 없음 → "장사왕 PRO10 (2월)", 110,000원             │
│  - 크레딧 7,000원 → "장사왕 PRO10 (2월)", 103,000원          │
│  - 크레딧 110,000원 이상 → "장사왕 PRO10 (2월)", 0원         │
└─────────────────────────────────────────────────────────────┘

개발 포인트:

  • 첫 결제와 정기결제의 상품명 생성 로직 분리 필요
  • 정기결제 배치 시 해당 월 자동 계산하여 상품명에 반영
  • 크레딧 차감 후 금액이 0원이면 결제 API 호출 생략 (빌링키만 유지)

6.3 결제 플로우 (TO-BE)

[결제 페이지 진입 - 장사왕 페이지]

[쿠폰 선택/자동 적용]  ← 장사왕 UI에서 처리

[크레딧 자동 차감 계산]  ← 장사왕 서버에서 계산

[최종 결제 금액 + 상품명 결정]

[TossPayments SDK 호출]  ← amount, orderName 전달

[TossPayments 결제창]  ← 쿠폰 UI 없음, 금액만 표시

    ┌───┴───┐
  성공      실패
    ↓         ↓
[쿠폰 사용 처리]  [쿠폰 미사용 유지]
[크레딧 차감]    [크레딧 유지]
[빌링키 등록]   [재시도 안내]

[구독 시작]

6.4 정기결제 플로우

[정기결제일 도달]

[보유 크레딧 확인]

[크레딧 자동 차감]

[남은 금액 결제 시도]

    ┌───┴───┐
  성공      실패
    ↓         ↓
[결제 완료]  [D+1 재시도]
    ↓         ↓
[구독 갱신]  [3회 실패 시 해지]

6.5 추천인 보상 플로우

[피추천인 가입]

[추천 코드 검증]

    ┌───┴───┐
  유효      무효
    ↓         ↓
[연결 기록]  [일반 가입 처리]

[Trial 시작]

[몰연동 완료?]

   YES

[추천인에게 3,500원 크레딧 지급]
[첫결제 100원 쿠폰 발급]

[첫 결제 완료?]

   YES

[추천인에게 3,500원 크레딧 추가 지급]

7. 화면 설계

7.1 결제 페이지 (2단계 구조)

STEP 1: 장사왕 결제 페이지 (쿠폰/크레딧 선택)

┌────────────────────────────────────────────────────────────┐
│  결제하기                                                   │
├────────────────────────────────────────────────────────────┤
│                                                            │
│  📦 장사왕 PRO10                                            │
│     월 110,000원                                            │
│                                                            │
│  ─────────────────────────────────────────────             │
│                                                            │
│  🎫 쿠폰                                                    │
│  ┌──────────────────────────────────────────┐             │
│  │ ✅ 첫결제 100원 쿠폰 (-109,900원)          │             │
│  └──────────────────────────────────────────┘             │
│                     [다른 쿠폰 선택]                        │
│                                                            │
│  💰 추천 크레딧                                             │
│     보유: 7,000원 → 사용: 0원 (결제금액 100원 미만)         │
│                                                            │
│  ─────────────────────────────────────────────             │
│                                                            │
│  결제 금액                                                  │
│  상품 금액             110,000원                            │
│  쿠폰 할인            -109,900원                            │
│  크레딧 사용               -0원                            │
│  ─────────────────────────────────                        │
│  최종 결제 금액           100원                            │
│                                                            │
│  ※ 다음 결제일: 2026.02.15 (110,000원)                      │
│                                                            │
│  [        100원 결제하기        ]  ← 클릭 시 STEP 2로      │
│                                                            │
└────────────────────────────────────────────────────────────┘

STEP 2: TossPayments 결제창 (카드 등록만)

┌────────────────────────────────────────────────────────────┐
│                                                            │
│  ┌──────────────────────────────────────────────────────┐ │
│  │                    💳 결제하기                        │ │
│  │                                                      │ │
│  │  장사왕 PRO10 (첫결제 할인)             ₩100        │ │
│  │  ↑ 상품명에 할인 정보 포함                           │ │
│  │                                                      │ │
│  │  ────────────────────────────────────────────────   │ │
│  │                                                      │ │
│  │  카드 번호                                           │ │
│  │  ┌──────────────────────────────────────────────┐  │ │
│  │  │ 0000 - 0000 - 0000 - 0000                    │  │ │
│  │  └──────────────────────────────────────────────┘  │ │
│  │                                                      │ │
│  │  유효기간          CVC                               │ │
│  │  ┌───────────┐    ┌───────────┐                     │ │
│  │  │ MM / YY   │    │ 000       │                     │ │
│  │  └───────────┘    └───────────┘                     │ │
│  │                                                      │ │
│  │              [₩100 결제하기]                         │ │
│  │                                                      │ │
│  └──────────────────────────────────────────────────────┘ │
│                                                            │
│                      powered by toss payments              │
│                                                            │
└────────────────────────────────────────────────────────────┘

※ TossPayments 결제창에서는 쿠폰 선택 UI 없음
※ 최종 금액과 상품명(할인 정보 포함)만 표시됨

7.2 마이페이지 - 추천 코드

┌────────────────────────────────────────────────────────────┐
│  내 추천 코드                                               │
├────────────────────────────────────────────────────────────┤
│                                                            │
│  🎁 친구 추천하고 크레딧 받기!                              │
│                                                            │
│  내 추천 코드                                               │
│  ┌──────────────────────────────────────────┐             │
│  │       SELLER-ABC123       [복사]          │             │
│  └──────────────────────────────────────────┘             │
│                                                            │
│  💰 보상 안내                                               │
│  • 친구가 몰연동하면 3,500원 크레딧                         │
│  • 친구가 결제하면 3,500원 추가 크레딧                      │
│  • 크레딧은 다음 결제 시 자동 차감!                         │
│                                                            │
│  ─────────────────────────────────────────────             │
│                                                            │
│  📊 추천 현황                                               │
│                                                            │
│  총 추천       5명                                         │
│  몰연동 완료   3명 (+10,500원 적립)                         │
│  결제 완료     2명 (+7,000원 적립)                          │
│                                                            │
│  💳 내 크레딧 잔액: 17,500원                                │
│     └ 다음 결제 시 자동 차감됩니다                          │
│                                                            │
│  ⏰ 만료 예정 크레딧                                        │
│  ┌──────────────────────────────────────────┐             │
│  │ 3,500원    2026-03-15 만료 (D-54)         │             │
│  │ 7,000원    2026-05-20 만료 (D-120)        │             │
│  └──────────────────────────────────────────┘             │
│     └ 크레딧은 적립일로부터 12개월 내 사용해주세요           │
│                                                            │
└────────────────────────────────────────────────────────────┘

7.3 어드민 - 쿠폰 관리

┌────────────────────────────────────────────────────────────┐
│  쿠폰 관리                                    [+ 쿠폰 생성] │
├────────────────────────────────────────────────────────────┤
│                                                            │
│  [전체] [활성] [만료] [소진]                 🔍 검색        │
│                                                            │
│  ┌─────────────────────────────────────────────────────┐  │
│  │ 코드        유형      할인        사용현황   상태    │  │
│  ├─────────────────────────────────────────────────────┤  │
│  │ FIRST100    정액     109,900원     45/∞     🟢 활성  │  │
│  │ HALF50      정률     50%          12/100   🟢 활성  │  │
│  │ LAUNCH      정액     110,000원     50/50    ⚫ 소진  │  │
│  │ TEST2025    무료체험  +14일        3/10    🟡 만료  │  │
│  └─────────────────────────────────────────────────────┘  │
│                                                            │
│  [1] [2] [3] ... [10]                                      │
│                                                            │
└────────────────────────────────────────────────────────────┘

7.4 디자인 필요 화면

PRD_결제페이지개발범위_20260126.md 기준

P0 (필수) - 15일

#화면명주요 구성 요소예상 공수
3결제 페이지• 요금제 선택 (BASIC/PREMIUM/ADVANCED)
• 결제 주기 (월간/연간)
• 쿠폰 코드 입력 + 보유 쿠폰 목록
• 크레딧 잔액 표시
• 금액 미리보기 (원금액, 쿠폰, 크레딧, 최종 금액)
5일
4결제 전 최종 확인• 선택 요금제 요약
• 금액 상세 (원금액, 쿠폰, 크레딧, 최종)
• 다음 결제 예정일
• 약관 동의 체크박스
• [이전] / [결제하기] 버튼
3일
5결제 완료 (성공)• 주문번호, 결제일시
• 금액 상세 내역
• 구독 정보 (시작일, 다음 결제일)
• 추천 코드 발급 안내
• [영수증 다운로드] / [홈으로]
2일
6결제 완료 (실패)• 오류 메시지, 오류 코드
• 해결 방법 안내
• [다시 시도] / [고객센터 문의]
1일
7마이페이지 변경[추가] 추천인 정보 섹션
• 내 추천 코드 표시 (복사/공유 버튼)
• 추천 실적 (추천한 친구 수, 적립 크레딧)

[추가] 크레딧 정보 섹션
• 보유 크레딧 잔액
• [크레딧 사용 내역 보기] 버튼

[추가] 쿠폰 정보 섹션
• 보유 쿠폰 목록 (코드, 유효기간, 할인금액)
• [쿠폰 등록하기] 버튼
3일
8결제 내역 상세[변경] 상세 내역 모달
• 기존: 주문번호, 결제일시, 요금제, 금액
• 추가: 금액 상세 (원금액, 쿠폰 할인, 크레딧 사용, 카드 결제)
• 사용된 쿠폰 코드 표시
• [영수증 다운로드] 버튼
1일

P1 (권장) - 2일

#화면명주요 구성 요소예상 공수
9크레딧 사용 내역• 크레딧 요약 (보유, 적립, 사용, 만료)
• 거래 내역 테이블 (날짜, 유형, 금액, 잔액, 사유)
• 페이지네이션
2일

디자인 요청 사항

┌─────────────────────────────────────────────────────────────┐
│  디자인 요청 시 전달 필요 항목                                │
├─────────────────────────────────────────────────────────────┤
│  1. 본 에픽 스펙 (E-07-coupon-referral.md)                   │
│  2. PRD_결제페이지개발범위_20260126.md                        │
│  3. E-06-pg-migration.md (PG 이관 관련)                       │
│  4. 기존 화면 스크린샷 (마이페이지, 결제 내역)                 │
└─────────────────────────────────────────────────────────────┘

디자인 우선순위:
• P0 화면 (#3~#8): 개발 병행을 위해 와이어프레임 우선 제공 요청
• P1 화면 (#9): P0 완료 후 진행 가능

8. 예외 & 엣지 케이스

8.1 쿠폰 관련

상황처리
유효기간 만료 쿠폰 적용 시도"쿠폰이 만료되었어요" 토스트
이미 사용한 쿠폰 재사용 시도"이미 사용한 쿠폰이에요" 토스트
최소 금액 미달"110,000원 이상 결제 시 사용 가능해요" 안내
첫결제 쿠폰 + 기존 결제 이력쿠폰 미노출 (적용 불가)
쿠폰 + 무료 플랜쿠폰 미노출 (적용 불가)

8.2 크레딧 관련

상황처리
크레딧 > 결제금액0원 결제 (빌링키만 등록)
크레딧 유효기간 만료만료 예정 30일 전 알림, 자동 소멸
정기결제 시 크레딧 부족보유 크레딧 전액 사용 + 나머지 카드 결제
구독 해지 후 크레딧12개월간 유지, 재구독 시 사용 가능

크레딧 만료 예정 알림 상세

[알림톡 발송 시점]
• 만료 D-30: 첫 번째 알림
• 만료 D-7: 두 번째 알림 (미사용 시)

[알림톡 템플릿]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

[장사왕] 크레딧 만료 예정 안내

안녕하세요, #{userName}님!

보유하신 크레딧이 곧 만료됩니다.

■ 만료 예정 크레딧
• 금액: #{expiringAmount}원
• 만료일: #{expiryDate}

만료 전 정기결제에 자동 사용되니 걱정 마세요!
추가 크레딧이 필요하시면 친구를 추천해보세요.

[친구 추천하고 크레딧 받기]

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

[예시]

안녕하세요, 김셀러님!

보유하신 크레딧이 곧 만료됩니다.

■ 만료 예정 크레딧
• 금액: 3,500원
• 만료일: 2026-02-15

만료 전 정기결제에 자동 사용되니 걱정 마세요!
추가 크레딧이 필요하시면 친구를 추천해보세요.

8.3 추천 관련

상황처리
자기 추천 시도"본인 추천은 불가능해요" 안내
이미 가입된 이메일"이미 가입된 계정이에요" 안내, 추천 무효
무효한 추천 코드"유효하지 않은 코드예요" 안내, 일반 가입
피추천인 Trial 중 이탈추천인 보상 없음
피추천인 구독 취소이미 지급된 크레딧 회수 안 함

8.4 결제 관련

상황처리
결제 실패쿠폰/크레딧 미차감, 재시도 안내
정기결제 실패3일간 재시도, 3회 실패 시 구독 해지
환불 요청 (기존 PG)AS-IS 정책 적용 (일할 환불)
환불 요청 (신규 PG)TO-BE 정책 적용 (환불 없음, 기간 이용)

9. 성공 지표

9.1 지표 체계 개요

┌─────────────────────────────────────────────────────────────┐
│            E-07 쿠폰 & 추천인 코드 지표 체계                   │
├─────────────────────────────────────────────────────────────┤
│  [Sprint 내 판단]                                           │
│  Primary: Trial→결제 전환율 +20%p AND 쿠폰 사용률 ≥ 80%      │
│  Secondary: 첫결제 100원 쿠폰 발급률 ≥ 70%                   │
├─────────────────────────────────────────────────────────────┤
│  [Sprint 이후 확인]                                         │
│  Lagging: 추천 가입 비율 20% AND 바이럴 계수 K ≥ 0.1         │
│  Ultimate: 유료 유저 50명 달성                               │
├─────────────────────────────────────────────────────────────┤
│  [Guard Rails]                                              │
│  • 쿠폰 어뷰징 발생 금지                                     │
│  • 결제 페이지 이탈률 30% 초과 금지                          │
│  • 크레딧 계산 오류 0건 유지                                 │
└─────────────────────────────────────────────────────────────┘

9.2 Sprint 내 판단 지표

계층지표산식목표
PrimaryTrial→결제 전환율첫결제 완료 / Trial 시작 유저+20%p
Primary쿠폰 사용률쿠폰 사용 결제 / 쿠폰 발급 유저≥ 80%
Secondary첫결제 쿠폰 발급률쿠폰 발급 / 몰연동 완료 유저≥ 70%
Secondary빌링키 확보율빌링키 등록 / 첫결제 시도≥ 90%

9.3 Sprint 이후 확인 지표

계층지표산식목표
Lagging추천 가입 비율추천 코드 가입 / 전체 가입≥ 20%
Lagging추천 결제 전환율추천 가입자 결제 / 추천 가입자≥ 50%
Lagging바이럴 계수 K유료유저 × 공유율 × 가입전환 × 몰연동 × 결제전환≥ 0.1
Ultimate유료 유저 수활성 유료 구독자50명

9.4 Guard Rails

  • 쿠폰 어뷰징 발생 0건 유지 (동일 IP/이메일 패턴 감지)
  • 결제 페이지 이탈률 30% 초과 금지
  • 크레딧 계산 오류 0건 유지
  • 추천 보상 지급 오류 0건 유지
  • 쿠폰 적용 오류 CS 5건/주 초과 금지

9.5 성공 판단 기준

[Sprint 종료 시점]
✅ 성공: Trial→결제 +20%p AND 쿠폰 사용률 ≥ 80%
⚠️ 부분 성공: 둘 중 하나만 달성
❌ 실패: 둘 다 미달성 OR Guard Rails 위반

[Sprint +4주 후]
✅ 가설 검증: 유료 유저 50명 AND 추천 가입 비율 20%
→ "쿠폰/추천 시스템이 마케팅 레버로 작동한다"

9.6 GA4 이벤트 정의

이벤트명트리거파라미터
coupon_applied쿠폰 적용coupon_code, discount_amount
coupon_used쿠폰으로 결제 완료coupon_code, payment_amount
first_payment_coupon_issued첫결제 쿠폰 자동 발급user_id, coupon_code
first_payment_coupon_used첫결제 쿠폰으로 결제 완료user_id, payment_amount
migrate_coupon_issued이관 인센티브 쿠폰 발급user_id, coupon_code
migrate_coupon_used이관 인센티브 쿠폰 사용user_id, discount_amount
referral_signup추천 코드로 가입referral_code, referrer_id
referral_activated피추천인 몰연동referral_code, credit_amount
referral_paid피추천인 결제referral_code, credit_amount
credit_earned크레딧 적립amount, reason
credit_used크레딧 사용amount, payment_id
credit_expiring_soon크레딧 만료 예정 알림 발송user_id, amount, days_until_expiry
credit_expired크레딧 만료user_id, amount

10. 이벤트 트래킹 명세

10.1 GA4 이벤트 JavaScript 구현

javascript
// E-07 쿠폰 & 추천인 코드 이벤트

// 1. 쿠폰 적용
dataLayer.push({
  event: "payment",
  event_name: "coupon_applied",
  params: {
    coupon_code: "FIRST100",
    coupon_type: "FIXED",
    discount_amount: 109900,
    original_price: 110000,
    final_price: 100,
    plan_type: "PRO10",
    is_first_payment: "Y"
  }
});

// 2. 쿠폰으로 결제 완료
dataLayer.push({
  event: "payment",
  event_name: "coupon_used",
  params: {
    coupon_code: "FIRST100",
    coupon_type: "FIXED",
    discount_amount: 109900,
    payment_amount: 100,
    payment_method: "card",
    card_company: "shinhan",
    billing_key_issued: "Y",
    pg_provider: "tosspayments"
  }
});

// 3. 첫결제 쿠폰 자동 발급
dataLayer.push({
  event: "coupon",
  event_name: "first_payment_coupon_issued",
  params: {
    user_id: "user_12345",
    coupon_code: "FIRST100",
    trigger: "mall_connected",  // mall_connected, trial_ending
    days_since_signup: 3
  }
});

// 4. 이관 인센티브 쿠폰 발급
dataLayer.push({
  event: "coupon",
  event_name: "migrate_coupon_issued",
  params: {
    user_id: "user_12345",
    coupon_code: "MIGRATE10",
    previous_pg: "portone",
    new_pg: "tosspayments",
    months_as_customer: 6
  }
});

// 5. 추천 코드로 가입
dataLayer.push({
  event: "referral",
  event_name: "referral_signup",
  params: {
    referral_code: "SELLER-ABC123",
    referrer_id: "user_54321",
    entry_source: "url_param",  // url_param, manual_input
    signup_source: "landing"
  }
});

// 6. 피추천인 몰연동 완료 (추천인 보상 1단계)
dataLayer.push({
  event: "referral",
  event_name: "referral_activated",
  params: {
    referral_code: "SELLER-ABC123",
    referrer_id: "user_54321",
    referee_id: "user_67890",
    credit_amount: 3500,
    days_since_signup: 2,
    mall_type: "smartstore"
  }
});

// 7. 피추천인 결제 완료 (추천인 보상 2단계)
dataLayer.push({
  event: "referral",
  event_name: "referral_paid",
  params: {
    referral_code: "SELLER-ABC123",
    referrer_id: "user_54321",
    referee_id: "user_67890",
    credit_amount: 3500,
    total_credit_earned: 7000,
    referee_payment_amount: 100,
    days_since_signup: 10
  }
});

// 8. 크레딧 적립
dataLayer.push({
  event: "credit",
  event_name: "credit_earned",
  params: {
    user_id: "user_54321",
    amount: 3500,
    reason: "referral_activated",  // referral_activated, referral_paid
    referral_code: "SELLER-ABC123",
    total_balance: 10500,
    expiry_date: "2027-01-23"
  }
});

// 9. 크레딧 사용
dataLayer.push({
  event: "credit",
  event_name: "credit_used",
  params: {
    user_id: "user_54321",
    amount: 7000,
    payment_id: "pay_12345",
    original_price: 110000,
    credit_discount: 7000,
    final_price: 103000,
    remaining_balance: 3500
  }
});

// 10. 크레딧 만료 예정 알림
dataLayer.push({
  event: "credit",
  event_name: "credit_expiring_soon",
  params: {
    user_id: "user_54321",
    amount: 3500,
    days_until_expiry: 30,
    notification_type: "alimtalk",
    expiry_date: "2027-01-23"
  }
});

// 11. 크레딧 만료
dataLayer.push({
  event: "credit",
  event_name: "credit_expired",
  params: {
    user_id: "user_54321",
    amount: 3500,
    original_earn_date: "2026-01-23",
    reason: "referral_activated"
  }
});

// 12. 추천 코드 공유
dataLayer.push({
  event: "referral",
  event_name: "share_referral_code",
  params: {
    referral_code: "SELLER-ABC123",
    share_method: "kakao",  // kakao, link_copy, qr
    share_location: "mypage",  // mypage, nudge_banner, notification
    total_referrals: 5
  }
});

// 13. 결제 페이지 진입
dataLayer.push({
  event: "payment",
  event_name: "enter_payment_page",
  params: {
    plan_type: "PRO10",
    original_price: 110000,
    available_coupons: 1,
    available_credit: 7000,
    is_first_payment: "Y",
    entry_source: "trial_ending"
  }
});

// 14. 결제 버튼 클릭
dataLayer.push({
  event: "payment",
  event_name: "click_payment_button",
  params: {
    plan_type: "PRO10",
    original_price: 110000,
    coupon_applied: "Y",
    coupon_code: "FIRST100",
    credit_applied: 0,
    final_price: 100,
    pg_provider: "tosspayments"
  }
});

10.2 이벤트 파라미터 상세

파라미터타입설명예시
coupon_typestring쿠폰 유형FIXED, PERCENT, TRIAL_EXT
coupon_codestring쿠폰 코드FIRST100, MIGRATE10
referral_codestring추천인 코드SELLER-ABC123
entry_sourcestring코드 입력 경로url_param, manual_input
share_methodstring공유 방법kakao, link_copy, qr
reasonstring크레딧 적립 사유referral_activated, referral_paid

11. 개발 범위

11.1 P0 (MVP 필수)

기능설명담당
Coupon 테이블 설계쿠폰 스키마 및 APIBE
쿠폰 어드민 CRUD생성/조회/수정/비활성화BE/FE
결제 페이지 쿠폰 적용2단계 결제 UIFE
첫결제 100원 쿠폰 자동 발급몰연동 시 자동 발급BE
TossPayments 결제 연동쿠폰 적용 후 금액 전달BE

11.2 P1 (핵심 기능)

기능설명담당
ReferralCode 테이블 설계추천인 코드 스키마BE
가입 시 추천 코드 입력URL 파라미터 + 수동 입력FE
Credit 시스템크레딧 적립/사용/만료BE
정기결제 크레딧 자동 차감결제 시 크레딧 우선 적용BE
마이페이지 추천 코드 UI코드 조회/복사/공유FE
추천 보상 로직2단계 보상 (몰연동/결제)BE

11.3 P2 (확장 기능)

기능설명담당
이관 인센티브 쿠폰PortOne→Toss 이관 시 발급BE
카카오톡 공유카카오 SDK 연동FE
크레딧 만료 예정 알림D-30, D-7 알림톡BE
추천 넛지 타이밍순이익 양수 시 배너 등FE
바이럴 퍼널 대시보드어드민 추천 통계BE/FE
QR 코드 생성오프라인 공유용FE

11.4 개발 우선순위 매트릭스

┌─────────────────────────────────────────────────────────────────┐
│                    개발 우선순위 매트릭스                         │
├───────────────────┬──────────────────┬──────────────────────────┤
│     P0 (Week 1)   │    P1 (Week 2)   │      P2 (Backlog)       │
├───────────────────┼──────────────────┼──────────────────────────┤
│ Coupon 테이블     │ Referral 테이블   │ 이관 인센티브 쿠폰       │
│ 어드민 CRUD       │ 추천 코드 입력    │ 카카오톡 공유            │
│ 결제 페이지 UI    │ Credit 시스템     │ 크레딧 만료 알림         │
│ 첫결제 쿠폰 발급   │ 크레딧 자동 차감  │ 추천 넛지 배너           │
│ Toss 연동        │ 마이페이지 UI     │ 바이럴 대시보드          │
│                  │ 2단계 보상 로직   │ QR 코드                  │
└───────────────────┴──────────────────┴──────────────────────────┘

12. 의존성 & 제약

기술 의존성

의존 항목상태비고
TossPayments 연동진행중E-06 PG 이관
빌링키 결제 API확인됨Toss 정기결제
어드민 페이지확인됨기존 어드민 확장

제약 조건

  • 기존 PG(PortOne) 유저는 기존 정책 유지 필수
  • 크레딧은 현금 환급 불가
  • 쿠폰 중복 사용 불가

13. 스토리 목록 (예정)

Epic Spec 확정 후 📋 Penny가 분해

Story ID제목규모우선순위담당상태
E-07-S-01쿠폰 데이터 모델 및 APIMP0BEdraft
E-07-S-02쿠폰 어드민 CRUDMP0BE/FEdraft
E-07-S-03결제 페이지 쿠폰 적용MP0FEdraft
E-07-S-04추천인 코드 시스템MP1BEdraft
E-07-S-05크레딧 시스템MP1BEdraft
E-07-S-06크레딧 정기결제 연동MP1BEdraft
E-07-S-07마이페이지 추천 코드 UISP1FEdraft
E-07-S-08자동 쿠폰 발급 (첫결제 100원)SP0BEdraft
E-07-S-09알림 시스템 연동SP1BEdraft
E-07-S-10크레딧 만료 예정 알림SP2BEdraft
E-07-S-11이관 인센티브 쿠폰 발급 로직SP2BEdraft
E-07-S-12추천 코드 공유 UX (카카오/링크)SP2FEdraft
E-07-S-13추천 넛지 타이밍 정책 구현MP2FEdraft
E-07-S-14바이럴 퍼널 대시보드 (어드민)MP2BE/FEdraft
E-07-S-15GA4 이벤트 트래킹 (12개 이벤트)SP1FEdraft

Story Point 추정

규모Story합계
M (2pt)S-01, S-02, S-03, S-04, S-05, S-06, S-13, S-1416
S (1pt)S-07, S-08, S-09, S-10, S-11, S-12, S-157
총합23 SP

우선순위별 Story Point

우선순위StorySP
P0 (MVP 필수)S-01, S-02, S-03, S-087 SP
P1 (핵심)S-04, S-05, S-06, S-07, S-09, S-1510 SP
P2 (확장)S-10, S-11, S-12, S-13, S-146 SP

의존성 그래프

[BE] S-01 쿠폰 모델/API

    ┌────┴────┬─────────────────┐
    ▼         ▼                 ▼
[BE/FE] S-02  [FE] S-03      [BE] S-08
 어드민CRUD    결제페이지       자동발급


        [TossPayments 결제 연동]

    ┌─────────────┴─────────────┐
    ▼                           ▼
[BE] S-04 추천코드         [BE] S-05 크레딧
    │                           │
    ▼                           ▼
[FE] S-07 마이페이지      [BE] S-06 정기결제
    │                           │
    └─────────┬─────────────────┘

         [FE] S-15 GA4

14. QA 체크리스트

쿠폰 시스템 테스트

쿠폰 어드민

  • [ ] 쿠폰 생성 정상 동작 (코드, 유형, 할인금액, 유효기간)
  • [ ] 쿠폰 조회/필터링 정상 동작
  • [ ] 쿠폰 수정 정상 동작
  • [ ] 쿠폰 비활성화 정상 동작
  • [ ] 사용 현황 통계 정상 표시

쿠폰 적용

  • [ ] 결제 페이지에서 쿠폰 선택 가능
  • [ ] 자동 발급 쿠폰 자동 적용
  • [ ] 쿠폰 코드 수동 입력 가능
  • [ ] 쿠폰 할인금액 정상 계산 (정액/정률)
  • [ ] 할인 후 금액 정상 표시
  • [ ] 무효 쿠폰 에러 메시지 표시

쿠폰 유효성 검증

  • [ ] 만료된 쿠폰 사용 불가
  • [ ] 이미 사용한 쿠폰 재사용 불가
  • [ ] 최소 금액 미달 시 사용 불가
  • [ ] 첫결제 쿠폰 + 기존 결제 이력 → 사용 불가
  • [ ] 전체 사용 횟수 초과 시 사용 불가

첫결제 100원 쿠폰

  • [ ] 몰연동 완료 시 자동 발급
  • [ ] Trial D-3 알림에 쿠폰 안내 포함
  • [ ] 결제 페이지 자동 적용
  • [ ] 100원 결제 + 빌링키 등록 정상 동작
  • [ ] 다음 결제일 110,000원 표시

이관 인센티브 쿠폰

  • [ ] PortOne 유저가 Toss 재등록 시 자동 발급
  • [ ] 첫 정기결제에 10% 할인 자동 적용
  • [ ] 신규 가입자에게는 미발급

추천인 코드 테스트

코드 생성/조회

  • [ ] 가입 시 추천 코드 자동 생성
  • [ ] 마이페이지에서 코드 조회
  • [ ] 코드 복사 기능 정상 동작
  • [ ] 추천 현황 통계 정상 표시

코드 입력

  • [ ] URL 파라미터 ?ref= 자동 적용
  • [ ] 가입 폼에서 코드 수동 입력 가능
  • [ ] 실시간 유효성 검사 동작 (debounce)
  • [ ] 유효 코드: ✅ + 추천인 닉네임 표시
  • [ ] 무효 코드: ❌ "존재하지 않는 코드" 표시
  • [ ] 비활성 코드: ⚠️ "사용할 수 없는 코드" 표시

어뷰징 방지

  • [ ] 자기 추천 불가 (같은 이메일/전화번호)
  • [ ] 중복 가입 불가 (이전 가입 이력 체크)
  • [ ] 동일 IP 24시간 내 3건 초과 시 검토 대기

공유 기능

  • [ ] 링크 복사 + 토스트 표시
  • [ ] 카카오톡 공유 정상 동작
  • [ ] 미리보기 카드 정상 표시

크레딧 시스템 테스트

크레딧 적립

  • [ ] 피추천인 몰연동 시 3,500원 적립
  • [ ] 피추천인 결제 시 3,500원 추가 적립
  • [ ] 적립 알림 발송
  • [ ] 마이페이지 잔액 반영

크레딧 사용

  • [ ] 정기결제 시 자동 차감
  • [ ] FIFO 순서로 차감 (오래된 것 먼저)
  • [ ] 0원 결제 가능 (크레딧 > 결제금액)
  • [ ] 차감 후 잔액 정상 표시

크레딧 만료

  • [ ] 적립일로부터 12개월 후 만료
  • [ ] D-30 만료 예정 알림 발송
  • [ ] D-7 재알림 발송
  • [ ] 만료 시 자동 소멸

쿠폰 + 크레딧 동시 적용

  • [ ] 쿠폰 먼저 적용 → 크레딧 나중 적용
  • [ ] 예: 110,000 - 55,000(쿠폰) - 14,000(크레딧) = 41,000원

보상 지급 테스트

2단계 보상

  • [ ] 1단계: 피추천인 몰연동 → 추천인 +3,500원
  • [ ] 2단계: 피추천인 결제 → 추천인 +3,500원
  • [ ] 단순 가입만으로는 보상 없음
  • [ ] 피추천인 Trial 이탈 시 보상 없음
  • [ ] 피추천인 구독 취소 시 기 지급 크레딧 회수 안 함

결제 플로우 테스트

2단계 결제 UI

  • [ ] STEP 1: 장사왕 결제 페이지 (쿠폰/크레딧 선택)
  • [ ] STEP 2: TossPayments 결제창 (금액만 표시)
  • [ ] 최종 금액 + 상품명(할인정보 포함) 정상 전달
  • [ ] 결제 성공 시 쿠폰 사용 처리
  • [ ] 결제 실패 시 쿠폰/크레딧 미차감

정기결제

  • [ ] 정기결제일 크레딧 자동 차감
  • [ ] 상품명 "장사왕 PRO10 (2월)" 형식
  • [ ] 결제 실패 시 3일간 재시도
  • [ ] 3회 실패 시 구독 자동 해지

이벤트 트래킹 테스트

  • [ ] coupon_applied 발생 (쿠폰 선택 시)
  • [ ] coupon_used 발생 (결제 완료 시)
  • [ ] first_payment_coupon_issued 발생 (발급 시)
  • [ ] referral_signup 발생 (추천 가입 시)
  • [ ] referral_activated 발생 (몰연동 시)
  • [ ] referral_paid 발생 (결제 시)
  • [ ] credit_earned 발생 (적립 시)
  • [ ] credit_used 발생 (사용 시)
  • [ ] share_referral_code 발생 (공유 시)

엣지 케이스 테스트

결제 관련

  • [ ] 결제 실패 후 쿠폰 재사용 가능
  • [ ] 구독 취소 후 기간 내 계속 이용
  • [ ] 재구독 시 첫결제 쿠폰 불가 (이미 사용)
  • [ ] 크레딧 > 결제금액 시 0원 결제 처리

정책 분기

  • [ ] 기존 PG 유저: AS-IS 정책 (일할 환불)
  • [ ] 신규 PG 유저: TO-BE 정책 (환불 없음)

체크리스트

PO 승인 전 체크

  • [x] 문제 정의가 명확한가?
  • [x] 비즈니스 로직이 구체적인가? (쿠폰 유형, 크레딧 계산, 적용 규칙)
  • [x] 와이어프레임/플로우가 있는가?
  • [x] 엣지 케이스가 정의되었는가?
  • [x] 성공 지표가 측정 가능한가?
  • [x] 기술 의존성이 확인되었는가?

승인

항목확인
PO 승인
승인일2026-01-20
비고파티 모드 리뷰 완료, 이관 인센티브 쿠폰/크레딧 만료 알림/공유 UX/넛지 정책/바이럴 퍼널 추가

변경 이력

버전날짜변경 내용작성자
1.02026-01-20초안 작성PO
1.12026-01-20파티 모드 리뷰 완료, 이관 쿠폰/크레딧 만료 알림/공유 UX/넛지 정책/바이럴 퍼널 추가PO
1.22026-01-23성공 지표 계층 구조 (9.1~9.6) 추가PO
1.32026-01-23이벤트 트래킹 JS 코드 예시 추가PO
1.42026-01-23개발 범위 P0/P1/P2 분류 추가PO
1.52026-01-23QA 체크리스트 추가PO
1.62026-01-26디자인 필요 화면 섹션 추가 (PRD 기준)PO

작성일: 2026-01-20최종 수정: 2026-01-26

장사왕 Product Team