기획서 · 초안 v0.1 · 검토용

쿠팡 파트너스 연동
무료박스 2회차 오픈

쿠팡 파트너스 딥링크 클릭을 대가로 하루 1회 무료 럭키박스를 추가 지급하는 제휴 리워드 기능

한 문장 규칙 — 하루 1회, 쿠팡 바로가기를 누르고 15초 뒤 앱으로 돌아오면 무료 럭키박스 1개를 더 연다.
작성일 2026-08-07 수신 개발팀 / 디자인팀 / 사업 관련 문서 연속 출석 보너스 v0.2, 몰파이 커넥트 v2.0 상태 확정 대기
CONTENTS
  1. 목적 및 대안 비교
  2. 핵심 규칙
  3. 단위경제
  4. 매체사별 수익성 관리
  5. 지면 전략 — 몰파이와의 정리
  6. UI 설계
  7. 데이터 모델
  8. API 명세
  9. 서버 로직
  10. 쿠팡 파트너스 정책 준수
  11. 어뷰징 · 엣지케이스
  12. QA 테스트 케이스
  13. 개발 범위 · 일정
  14. 확정 필요 사항

1. 목적 및 대안 비교왜 광고가 아니라 쿠팡인가

1.1 문제

1.2 대안 비교

방식클릭/노출당 수익개발검증판단
쿠팡 파트너스 클릭10~15원약 3일서버 클릭 로그 + 체류시간★ 채택
GAM Rewarded 광고13.5원
(eCPM $10)
2~3주SSV 콜백 필요후순위 — 단가 대비 개발비 과다
몰파이 CPS건당 1,364원
(3만원 구매 시)
개발 중Postback병행 — 단, 지면이 다름 (5장)
무상 2회차0원1일비용만 2배
쿠팡을 택한 결정적 이유는 단가가 아니라 검증 구조다.
광고 보상은 SSV(Server-Side Verification) 콜백이 있어야 "정말 광고를 끝까지 봤는가"를 검증할 수 있고, 이게 개발의 대부분을 차지한다. 쿠팡 클릭은 우리 서버가 리다이렉트를 직접 발급하므로 클릭 사실 자체가 서버 기록이다. 검증 인프라가 필요 없다.
단가는 10~15원으로 eCPM $10 광고(13.5원)와 대등한데, 개발 기간은 1/5다.

1.3 성공 지표

2회차 참여율
40%
무료박스 오픈자 대비
클릭당 실수익 (EPC)
10원+
BEP 6.5원
평균 세션 시간
+50%
현재값 측정 필요
D7 리텐션
+10%p
출석 보너스와 합산

2. 핵심 규칙확정 정책

2.1 지급 조건

항목정책
대상로그인 회원만. 비회원(쿠키 세션)은 로그인 유도로 대체
횟수KST 1일 1회. 기본 무료박스와 동일한 날짜 경계(kstToday())
선행 조건당일 기본 무료박스를 이미 오픈한 상태. 2회차이므로 1회차를 건너뛸 수 없다
트리거쿠팡 딥링크 클릭 → 15초 경과 후 앱 복귀 시 지급 확정
프리셋기본 무료박스와 동일 프리셋 (평균 20팡)
출석 보너스적용한다. 1회차와 동일 tier(+10/15/20%)
경험치기본 무료박스와 동일 10 EXP
왜 전용 저가 프리셋을 만들지 않는가
평균 20팡 기준으로 EPC 10원(시장 하단)에서도 클릭당 +3.5원 흑자다. 전용 프리셋은 ① 관리자 운영 부담 ② 새벽 5시 자동 최적화 로직 분기 ③ 유저의 "2회차는 구리다" 인식을 만든다. 흑자가 나는데 굳이 나눌 이유가 없다.
다만 특정 매체사에서 EPC가 BEP 밑으로 내려갈 경우를 대비해, 전용 저가 프리셋으로 전환하는 옵션은 정책값으로 남겨둔다 (4장).
왜 출석 보너스를 적용하는가
미적용 시 클릭당 비용이 6.5원 → 6.0원으로 0.5원 줄어든다. 반면 "무료박스인데 어떤 건 보너스가 붙고 어떤 건 안 붙는" 정책 분기가 생기고, 결과 화면 로직·CS 문의·QA 케이스가 모두 2배가 된다. 0.5원보다 단순함이 비싸다.

2.2 15초 체류 조건

구현이 단순한 이유: 웹뷰 이탈/복귀 감지(visibilitychange)에 의존하지 않는다. 유저가 외부 브라우저나 쿠팡 앱으로 튀어도, 돌아와서 [박스 받기] 버튼을 누르는 순간 서버가 두 타임스탬프를 비교하면 끝이다. 플랫폼 차이·웹뷰 정책 변경에 영향받지 않는다.

2.3 클릭 유효기간

3. 단위경제DAU 1만 · 참여율 40% = 4,000클릭/일 기준

3.1 비용 (클릭 1회당)

항목근거
무료박스 평균 팡20팡프리셋 조정 목표치 (2026-08 결정)
출석 보너스 가중평균+8.8%연속일 분포 가정
실지급 팡21.8팡20 × 1.088
팡 1단위 실원가0.6원박스 평균 상품원가 600원 ÷ 1,000팡
장부 원가13.1원21.8 × 0.6
실비용 (redemption 50%)6.5원BEP EPC

3.2 수익 (클릭 1회당 = EPC)

EPC = 객단가 × 전환율 × 수수료율 ÷ 1.1(VAT)

3.3 손익

EPC클릭당 순익일 손익월 손익마진율
10원 (하단)+3.5원+14,000원+42만원35%
12.5원 (중간)+6.0원+24,000원+72만원48%
15원 (상단)+8.5원+34,000원+102만원57%

3.4 민감도 — redemption rate

redemption 50%는 실측이 아니라 가정이다. 그리고 출석 보너스·2회차 도입으로 팡 적립 속도가 빨라지면 이 값은 올라간다. 이 기능이 스스로 전제를 무너뜨리는 방향으로 작동하므로 반드시 감시해야 한다.

redemption클릭당 비용EPC 10원EPC 12.5원EPC 15원
50% (가정)6.5원+3.5+6.0+8.5
70%9.2원+0.8+3.3+5.8
100% (worst)13.1원-3.1-0.6+1.9
20팡 결정의 효과: 25팡 기준이었다면 redemption 70% · EPC 10원 조합에서 -1.4원 적자였다. 20팡으로 내리면서 같은 조건이 +0.8원 흑자로 전환됐다. 100% worst case에서만 적자가 나는데, 이는 팡이 전량 소진되는 극단이라 현실성이 낮다.

3.5 파생 효과 (수익에 미포함)

매체사 정산 이슈 — 사업 판단 필요.
쿠팡 수익은 매체사 유저의 행동에서 발생하는데, 현재 정산 구조(브라보식스 75 : 파트너 25)는 박스 판매 기준이다. 쿠팡 수익을 전액 우리가 가져가면 매체사가 나중에 문제를 제기할 소지가 있다. 계약 부속합의로 사전에 정의하는 편이 안전하다. 배분한다면 매체사 몫만큼 BEP가 올라가므로 3장 손익을 재계산해야 한다.

4. 매체사별 수익성 관리이 기능의 생사를 가르는 부분

EPC 10~15원은 평균이다. 매체사 유저 품질에 따라 3원도 15원도 나온다. 저품질 매체사가 섞이면 그 매체사에서만 조용히 적자가 나고, 전체 평균에 묻혀 몇 달 동안 발견되지 않는다.

4.1 서브ID 매핑 BE

subId 설계 시 주의: 유저 단위 subId(user_12345)는 쓰지 않는다. 파트너스 리포트에서 유저 식별이 가능해지면 개인정보 이슈가 생기고, subId 카디널리티가 폭증해 리포트가 무의미해진다. 매체사 단위가 적정 해상도다.

4.2 자동 차단 임계치

구간EPC조치
정상9원 이상
경고6.5 ~ 9원관리자 알림. 2주 연속 시 전용 저가 프리셋(평균 10팡)으로 자동 전환
차단6.5원 미만2주 연속 시 해당 매체사 기능 자동 OFF + 알림

경고선 9원은 BEP 6.5원에 안전계수 1.4를 적용한 값이다. redemption이 가정보다 높게 나올 여지를 흡수한다.

4.3 관리자 대시보드 추가 지표

5. 지면 전략 — 몰파이와의 정리같은 자리를 두고 경쟁한다

충돌 지점: 몰파이 커넥트 기획서 v2.0의 지면 B가 "무료박스 소진 모달"이다. 본 기획서의 1순위 지면과 정확히 같은 자리다. 둘 다 넣으면 모달에 CTA가 3개(쿠팡·몰파이·확인)가 되어 아무것도 선택되지 않는다.

5.1 정리안

지면배정근거
무료박스 소진 모달쿠팡 단독이 순간 유저 심리는 "지금 하나 더 열고 싶다". 쿠팡은 클릭 15초로 즉시 해결되고 보상도 무료박스로 동일 축이다. 몰파이는 3만원 구매가 필요해 심리적 거리가 너무 멀다
제휴포인트 부족 결제화면몰파이 단독유저가 유료박스를 사려다 막힌 순간. 보상 축(유료박스)이 일치한다. 쿠팡의 무료박스 1개는 이 맥락에서 대안이 되지 못한다
홈 인터리브 배너로테이션쿠팡:몰파이:자사 = 2:2:6. 세션당 각 3회 제한
홈 무료박스 카드 하단쿠팡 단독1회차 오픈 완료 시에만 노출되는 2회차 진입점

원칙: 한 지면에 제휴 CTA는 하나만. 유저가 "무엇을 눌러야 하는가"를 0.5초 안에 판단할 수 없으면 그 지면은 죽는다.

6. UI 설계디자인팀 전달용

6.1 배치 맵

#화면컴포넌트노출 조건우선순위
1무료박스 소진 모달2단 구조 재구성 — 쿠팡 CTA 상단 / 확인 하단당일 1회차 오픈 완료 + 2회차 미수령P0
2쿠팡 복귀 후[박스 받기] 버튼 / 15초 미달 시 카운트다운클릭 기록 존재 + 미claimP0
32회차 진입 카드1회차 완료 + 2회차 미수령P0
4전 화면대가성 문구 고지쿠팡 CTA가 있는 모든 지면P0 · 필수
5홈 (비회원)로그인 유도쿠키 세션P1

6.2 화면 흐름

무료박스 [열기] 탭 │ └─▶ 당일 1회차 이미 오픈? │ ├─ NO ──▶ 기존 무료박스 플로우 (변경 없음) │ └─ YES ──▶ ① 소진 모달 (2단 구조) │ ├─ [쿠팡 구경하고 1개 더 받기] │ │ │ ├─▶ POST /api/coupang/click (서버가 click_at 기록) │ └─▶ 쿠팡 딥링크로 이동 (subId = 매체사코드_yyyymm) │ └─ [확인] ──▶ 닫기 앱 복귀 │ └─▶ GET /api/coupang/status │ ├─ 경과 < 15초 ──▶ ② 카운트다운 버튼 (비활성, "12초 후 받을 수 있어요") │ └─ 경과 ≥ 15초 ──▶ ② [무료박스 받기] 활성 │ └─▶ POST /api/coupang/claim (서버 재검증 → 박스 지급 → 결과 화면)

6.3 화면 시안

1 무료박스 소진 모달 — 2단 재구성 (P0)
120팡Lv.1🔔👤
오늘의 무료 럭키박스를
이미 열었어요
내일 자정에 다시 열려요
🎁 오늘 1개 더 열 수 있어요!
쿠팡 구경하고 무료박스 1개 더 받기
쿠팡 페이지에서 15초만 머물면 바로 지급돼요
이 링크는 쿠팡 파트너스 활동의 일환으로,
이에 따른 일정액의 수수료를 제공받습니다.
확인
전당
LUCKY!
룰렛
보관함
핵심 변경 기존 "이미 오픈하셨습니다 + [확인]" 단독 모달을 2단으로 재구성. 상단은 안내, 하단은 제안
[확인]은 텍스트 버튼으로 격하 — 시각 위계상 쿠팡 CTA가 유일한 컬러 버튼
쿠팡 브랜드 컬러(#C4302B) 사용 — 자사 오렌지와 구분해 "외부로 나간다"는 신호를 준다
대가성 문구는 필수(10장). 축약·삭제 불가
2 복귀 후 — 카운트다운 / 수령 (P0)
120팡Lv.1🔔👤
📦
무료박스 1개가 준비됐어요!
무료박스 받기
— 15초 미달 시 —
조금만 더 둘러봐 주세요
12초 후 받을 수 있어요
전당
LUCKY!
룰렛
보관함
노출 위치 홈 최상단(히어로 배너 위). 미수령 박스가 있는 동안만 노출되는 임시 최우선 슬롯
카운트다운 서버가 내려준 remainSec로 시작. 클라이언트 타이머는 표시용일 뿐 판정은 서버
0초 도달 시 자동으로 활성 버튼 전환 (재조회 불필요)
수령 후 기존 무료박스 결과 화면 재사용 — 출석 보너스 표기 포함, 신규 화면 없음
3 홈 — 2회차 진입 카드 (P0)
120팡Lv.1🔔👤
럭키박스 열고 금 한돈 받기 히어로 배너 (기존)
📦
오늘 무료박스 1개 더!
쿠팡 구경 15초면 바로 지급
받기
이 링크는 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
New!! 새로운 상품
전당
LUCKY!
룰렛
보관함
위치 히어로 배너 직하단. 연속 출석 위젯과 같은 슬롯을 두고 경쟁한다
우선순위 규칙 ① 미수령 쿠팡 박스 있음 → 수령 카드(시안 2) ② 2회차 미참여 → 본 카드 ③ 그 외 → 출석 위젯
한 번에 하나만. 두 위젯을 세로로 쌓으면 상품목록이 화면 밖으로 밀린다

6.4 대가성 문구 디자인 법적 필수

표기 문구 (변경 금지)
"이 링크는 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

표기 규칙
· 쿠팡 CTA가 존재하는 모든 지면에 노출. 한 지면이라도 누락되면 계정 정지 사유
· CTA와 같은 화면·같은 시야 안에 위치. 별도 페이지·더보기·툴팁 안에 숨기면 미표기로 간주
· 최소 9px 이상, 배경 대비 명확히 읽히는 명도. 회색 위 연회색 금지
· 접기(accordion)·스크롤 아래 배치 금지

7. 데이터 모델 DB

7.1 coupang_click_logs — 클릭 원장

컬럼타입설명
idbigserial PK
user_idFK → users
partner_codevarchar(32)매체사 코드 (subId 구성 요소)
kst_datedate클릭한 KST 날짜
sub_idvarchar(64)쿠팡에 전달한 subId 원문
landing_urltext전달한 딥링크
clicked_attimestamptz서버 시각. 15초 판정 기준
claimed_attimestamptz null박스 수령 시각. null이면 미수령
free_box_idFK null지급된 박스 참조
ip / user_agentvarchar어뷰징 분석용
UNIQUE (user_id, kst_date) — 하루 1클릭 강제
INDEX (partner_code, kst_date) — 매체사별 집계
UNIQUE 제약을 (user_id, kst_date)로 잡는 이유: "하루 1회"를 지급이 아니라 클릭 단위로 막는다. 클릭만 하고 claim 안 한 유저가 다시 클릭할 수 있게 하면, 클릭 수만 부풀려져 쿠팡 쪽 트래픽 품질 지표(전환율)가 떨어진다. 계정 정지의 실질적 원인은 약관 해석이 아니라 이 지표다.

7.2 coupang_revenue_daily — 수익 적재 (수동/API 취합)

컬럼설명
kst_date / partner_code복합 키
clicks쿠팡 리포트 기준 클릭 수 (우리 로그와 대사)
orders / gmv / commission주문 수 / 거래액 / 수수료
epccommission ÷ clicks (계산 컬럼)

7.3 정책값 — reward_policies

key   : "coupang_freebox"
value : {
  "enabled": true,
  "dwellSeconds": 15,
  "dailyLimit": 1,
  "requireFirstBoxOpened": true,
  "presetMode": "DEFAULT",      // DEFAULT | LOW_COST
  "applyAttendanceBonus": true,
  "epcWarnKrw": 9.0,
  "epcBlockKrw": 6.5,
  "partnerOverrides": {          // 매체사별 개별 설정
    "abc": { "enabled": false },
    "xyz": { "presetMode": "LOW_COST" }
  }
}

8. API 명세 BE

8.1 GET /api/coupang/status

{
  "available": true,        // 오늘 2회차 참여 가능 여부
  "reason": null,           // FIRST_BOX_NOT_OPENED | ALREADY_CLAIMED | DISABLED | GUEST
  "clicked": true,
  "claimable": false,
  "remainSec": 12,          // 서버 계산. 0이면 즉시 수령 가능
  "claimed": false
}

8.2 POST /api/coupang/click

클릭 기록 + 딥링크 반환. 딥링크는 서버가 생성한다 (subId 위조 방지).

// Response
{
  "redirectUrl": "https://link.coupang.com/a/XXXXX?subId=abc_202608",
  "dwellSeconds": 15,
  "clickedAt": "2026-08-07T05:12:33Z"
}

이미 오늘 클릭한 경우 동일 클릭 레코드의 redirectUrl을 재반환(신규 생성 안 함). clicked_at은 갱신하지 않는다 — 갱신하면 15초 카운트가 리셋되어 유저가 영원히 못 받는다.

8.3 POST /api/coupang/claim

요청 바디 없음. 서버가 전부 판정한다.

{ "pang": { "base": 20, "bonus": 2, "total": 22, "bonusRate": 0.10, "streakDay": 3 },
  "product": { ... },
  "exp": 10 }
에러코드처리
클릭 기록 없음NO_CLICK모달로 유도
15초 미달DWELL_NOT_METremainSec 반환 → 카운트다운 재개
이미 수령ALREADY_CLAIMED보관함으로 유도
1회차 미오픈FIRST_BOX_NOT_OPENED1회차 플로우로 유도
날짜 경과EXPIRED"어제 클릭이에요" 안내 후 재클릭 유도

9. 서버 로직 BE

click(userId):
  p = policy("coupang_freebox", partnerOf(userId))
  if !p.enabled: throw DISABLED
  if p.requireFirstBoxOpened and !freeBoxOpenedToday(userId): throw FIRST_BOX_NOT_OPENED

  lock("coupang:" + userId)
  today = kstToday()
  log   = clickRepo.find(userId, today)

  if log == null:
     subId = partnerCode + "_" + yyyymm()
     log   = clickRepo.insert(userId, today, subId, deeplink(subId), now())
  // 이미 있으면 그대로 재사용 — clicked_at 절대 갱신 금지

  return { redirectUrl: log.landing_url, dwellSeconds: p.dwellSeconds }


claim(userId):
  p   = policy("coupang_freebox", partnerOf(userId))
  lock("coupang:" + userId)
  log = clickRepo.find(userId, kstToday())

  if log == null:            throw NO_CLICK
  if log.claimed_at != null: throw ALREADY_CLAIMED

  elapsed = now() - log.clicked_at                  // 전적으로 서버 시각
  if elapsed < p.dwellSeconds:
     throw DWELL_NOT_MET(remainSec = p.dwellSeconds - elapsed)

  preset = (p.presetMode == "LOW_COST") ? LOW_COST_PRESET : DEFAULT_PRESET

  tx:
     box = freeBoxService.open(userId, preset,
                               applyBonus = p.applyAttendanceBonus,
                               source     = "COUPANG_2ND")
     log.claimed_at  = now()
     log.free_box_id = box.id
     clickRepo.save(log)

  return box
freeBoxService 재사용 원칙. 2회차는 지급 경로만 다른 무료박스다. 팡 계산·출석 보너스·경험치·원장 기록은 기존 freeBoxService.open()을 그대로 호출하고, source 파라미터로 통계만 구분한다. 별도 지급 로직을 복제하면 팡 계산식이 두 벌이 되어 반드시 어긋난다.

10. 쿠팡 파트너스 정책 준수이 기능이 죽는다면 여기서 죽는다

10.1 공식 계정 정지 사유 대응

정지 사유우리 리스크대응
대가성 문구 누락높음쿠팡 CTA가 있는 모든 지면에 고정 표기 (6.4). QA 필수 항목
자동 클릭·실행 광고
방문자 의도와 무관한 자동 링크 작동
중간유저가 직접 버튼을 탭해야만 이동. 자동 리다이렉트·팝업·프리페치 전면 금지
비공식 단축 URL낮음파트너스가 발급한 link.coupang.com 원본만 사용. 자체 단축·프록시 금지
자가구매·어뷰징낮음내부 테스트 계정은 별도 subId로 분리, 실제 구매 금지
미등록 채널 홍보높음파트너스 가입 시 luckybox.bravo6.kr 도메인을 채널로 사전 등록. 미등록 상태 운영은 그 자체로 정지 사유 착수 전 필수

10.2 진짜 리스크는 약관이 아니라 트래픽 품질

"리워드 대가 클릭"은 위 5개 항목에 명시적으로 열거되어 있지 않다. 그래서 약관 해석만 보면 문제없어 보인다.

하지만 실무에서 계정이 정지되는 경로는 다르다. 일 4,000클릭에 전환율이 0.3%까지 떨어지면, 쿠팡 입장에서 이 트래픽은 "클릭만 폭증하고 매출은 없는 비정상 소스"다. 이상탐지에 걸리는 것은 약관 위반 판정이 아니라 지표다.

따라서 EPC 관리(4장)는 수익 최적화가 아니라 생존 조건이다. EPC가 낮은 매체사를 방치하면 그 트래픽이 전체 계정을 끌어내린다. 자동 차단 임계치를 반드시 붙여야 하는 이유다.

10.3 단계적 오픈 운영

  1. 1단계 — 테스트 앱 단독(DAU ~200)으로 2주. EPC 실측 + 정지 리스크 관측
  2. 2단계 — EPC 9원 이상 확인 시 매체사 1곳 추가, 2주
  3. 3단계 — 전 매체사 확대. 이후 자동 차단 임계치로 상시 관리

계정이 정지되면 쿠팡 파트너스 수익 전체가 멈춘다. 한 번에 전 매체사를 열지 않는다.

10.4 자사 약관·방침

11. 어뷰징 · 엣지케이스

11.1 어뷰징

시나리오영향대응
클릭 후 쿠팡 페이지를 열지 않고 15초 대기 후 claim중간 — 비용만 발생완전 차단 불가. 리다이렉트 발급 이후는 관측 불가능한 영역이다. EPC 모니터링으로 사후 감지하고, 심하면 dwellSeconds 상향(15→30)으로 대응
다계정 파밍낮음 — 계정당 일 1회 · 6.5원기존 다계정 스코어링 · is_blocked 적용
클릭 API 반복 호출낮음UNIQUE(user_id, kst_date) + advisory lock. 신규 레코드 생성 안 됨
claim 동시 요청낮음advisory lock + claimed_at null 체크
단말 시간 변경차단됨모든 판정이 서버 시각. 클라이언트 시간 미참조
딥링크 subId 위조차단됨딥링크를 서버가 생성. 클라이언트는 URL을 받기만 함
15초 대기 어뷰징을 굳이 막지 않는 이유: 막으려면 웹뷰 이탈/복귀 감지, 쿠팡 페이지 로드 확인 같은 장치가 필요한데 전부 우회 가능하고 플랫폼 변경에 취약하다. 반면 이 어뷰징의 비용은 클릭당 6.5원이고, 발생하면 EPC 하락으로 즉시 드러난다. 개별 차단보다 지표 감시가 효율적이다.

11.2 엣지케이스

상황처리
클릭 후 자정 경과 → claimEXPIRED. "어제 클릭이에요" 안내 후 재클릭 유도. 새 날짜의 클릭 레코드 생성 가능
클릭 후 앱 종료 → 다음 날 재접속동일 (EXPIRED)
1회차 미오픈 상태에서 2회차 진입FIRST_BOX_NOT_OPENED → 1회차 플로우로 유도. 순서 강제
쿠팡 앱 미설치웹 페이지로 열림. 정상 동작 (파트너스 링크가 자동 분기)
인앱 웹뷰에서 쿠팡 앱으로 전환서버 시각 기준이라 무관. 복귀만 하면 claim 가능
비회원기능 미노출 + 로그인 유도
매체사 OFF 상태available:false, reason:DISABLED → 소진 모달을 기존 단순 형태로 렌더
정책 enabled:false전 지면 미노출. 이미 클릭한 유저의 claim은 허용(약속 이행)
claim 중 서버 오류트랜잭션 롤백 → claimed_at null 유지 → 재시도 가능. 박스만 지급되고 claimed 미기록되는 경우가 없어야 함

12. QA 테스트 케이스

#케이스기대 결과
C-011회차 미오픈 상태에서 2회차 진입FIRST_BOX_NOT_OPENED, 카드 미노출
C-021회차 오픈 후 소진 모달 진입2단 모달 + 쿠팡 CTA + 대가성 문구 노출
C-03클릭 → 5초 후 claimDWELL_NOT_MET, remainSec=10
C-04클릭 → 15초 정각 claim지급 성공
C-05클릭 → 14.9초 claimDWELL_NOT_MET (경계값)
C-06클릭 2회 연속 호출레코드 1건, clicked_at 갱신 안 됨, 동일 URL 반환
C-07claim 2회 호출2번째 ALREADY_CLAIMED, 박스 1개만 지급
C-08claim 동시 10회 병렬박스 1개만 지급
C-09클릭 후 자정 경과 claimEXPIRED
C-1023:59:50 클릭 → 00:00:10 claimEXPIRED (날짜 기준, 경과시간 아님)
C-11Lv1 · 연속 3일 · 4,000원 당첨base=20, bonus=2, total=22, EXP+10
C-12출석 미기록 상태에서 claimfallback 체크인 후 보너스 정상 적용
C-13subId 확인딥링크에 {매체사코드}_{yyyymm} 정확히 포함
C-14클라이언트가 임의 URL로 claim 시도무시 — claim은 바디를 받지 않음
C-15매체사 A OFF / B ONA 유저 미노출, B 유저 정상
C-16presetMode=LOW_COST저가 프리셋에서 추첨, 팡 감소 확인
C-17정책 enabled=false신규 노출 없음. 기존 클릭자 claim은 성공
C-18claim 중 강제 예외 주입롤백, claimed_at null, 박스 미지급, 재시도 성공
C-19전 지면 대가성 문구 노출소진 모달·홈 카드·수령 카드 전부 확인 (누락 시 릴리즈 불가)
C-20비회원 접근GUEST, 로그인 유도

13. 개발 범위 · 일정

구분작업담당예상
사전쿠팡 파트너스 가입 + 도메인 채널 등록 + 딥링크 발급사업1d
DB마이그레이션 2 테이블 + 정책 시드DB0.5d
BEcoupangService (click / claim / status) + 딥링크 생성 + subIdBE1.5d
BEfreeBoxService 확장 (source, preset, applyBonus 파라미터)BE0.5d
BE매체사별 정책 override + EPC 집계 + 자동 차단 배치BE1.5d
DE시안 4종 (소진 모달 / 수령·카운트다운 / 홈 카드 / 비회원)디자인1.5d
FE소진 모달 2단 재구성 + 쿠팡 CTA + 대가성 문구FE1d
FE홈 카드 + 수령 카드 + 카운트다운 + 슬롯 우선순위 규칙FE1.5d
FE관리자 — 매체사별 ON/OFF, EPC 대시보드FE1d
QAC-01~C-20 + 자정 경계 + 대가성 문구 전수QA1d
합계약 11 MD
선행 필수 — 도메인 채널 등록. 파트너스에 luckybox.bravo6.kr을 등록하지 않은 상태로 링크를 노출하면 미등록 채널 홍보로 정지된다. 개발 착수와 무관하게 지금 바로 처리할 것.

14. 확정 필요 사항

#항목제안결정
1프리셋기본 프리셋 동일 사용 (평균 20팡). LOW_COST는 매체사별 fallback으로만
2출석 보너스 적용적용 — 0.5원 아끼려고 정책 분기를 만들지 않는다
3체류 조건15초. 30초는 이탈만 증가
4쿠팡 수익의 매체사 배분전액 브라보식스 귀속 — 단, 계약 부속합의로 사전 정의 필수
5소진 모달 지면 배정쿠팡 단독, 몰파이는 제휴포인트 부족 화면으로
6EPC 차단 임계치경고 9원 / 차단 6.5원, 2주 연속 기준
7단계적 오픈테스트앱 2주 → 매체사 1곳 2주 → 전체
8제휴 쇼핑 별도 동의최초 진입 시 1회 수령 (몰파이와 공통 동의로 묶기)
9쿠팡 리포트 취합 방식수동 다운로드로 시작 → 물량 증가 시 API 자동화

범위 밖 (2차)