무료박스는 1일 1회가 상한이다. 하루 안에 유저가 앱에서 할 수 있는 무료 행동이 한 번뿐이라 세션이 30초 만에 끝난다.
"한 번 더 열고 싶다"는 순간이 매일 발생하는데, 현재는 "이미 오픈하셨습니다 + [확인]"으로 대화가 끝난다. 이 모달이 앱에서 가장 아까운 지면이다.
2회차를 무상으로 주면 비용만 2배가 된다. 수익이 붙은 행동과 교환해야 한다.
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초 체류 조건
클릭 즉시 지급하면 유저는 버튼 → 즉시 뒤로가기를 학습한다. 쿠팡 페이지가 렌더링조차 안 되고 전환율이 0에 수렴한다.
15초는 상품 페이지가 로드되고 첫 스크롤이 일어나는 최소 시간이다. 그 이상(30초·60초)은 이탈만 늘린다.
판정은 전적으로 서버 시각 기준이다. 클라이언트가 보낸 체류시간은 신뢰하지 않는다. claim 요청 시각 − click 기록 시각 ≥ 15초
구현이 단순한 이유: 웹뷰 이탈/복귀 감지(visibilitychange)에 의존하지 않는다. 유저가 외부 브라우저나 쿠팡 앱으로 튀어도, 돌아와서 [박스 받기] 버튼을 누르는 순간 서버가 두 타임스탬프를 비교하면 끝이다. 플랫폼 차이·웹뷰 정책 변경에 영향받지 않는다.
2.3 클릭 유효기간
클릭 기록은 당일 KST 자정까지 유효. 자정을 넘기면 claim 불가(다음 날 새 클릭 필요).
쿠팡 파트너스 쿠키는 24시간이라 수익 인정 기간이 우리 유효기간보다 길다. 유저에게 유리한 방향의 불일치이므로 문제되지 않는다.
업계 실측 EPC: 10~15원 (매체사별 편차 큼) — 역산 시 전환율 약 2%. 쿠팡 헤비유저는 24시간 내 자연 구매 빈도가 높아 last-click이 잡히는 구조로 설명된다
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 파생 효과 (수익에 미포함)
2회차 오픈으로 경험치 10 추가 → 레벨업 가속 → 무료박스 팡 계수 상승 (비용 증가 요인, 장기 반영 필요)
세션 시간 증가 → 유료박스 노출 증가 → 유료 전환 lift (측정 필요)
쿠팡 클릭 자체가 매체사 정산 대상이 아니다 — 수익 분배(75:25) 무관, 전액 브라보식스 귀속 확정 필요
매체사 정산 이슈 — 사업 판단 필요.
쿠팡 수익은 매체사 유저의 행동에서 발생하는데, 현재 정산 구조(브라보식스 75 : 파트너 25)는 박스 판매 기준이다. 쿠팡 수익을 전액 우리가 가져가면 매체사가 나중에 문제를 제기할 소지가 있다. 계약 부속합의로 사전에 정의하는 편이 안전하다. 배분한다면 매체사 몫만큼 BEP가 올라가므로 3장 손익을 재계산해야 한다.
4. 매체사별 수익성 관리이 기능의 생사를 가르는 부분
EPC 10~15원은 평균이다. 매체사 유저 품질에 따라 3원도 15원도 나온다. 저품질 매체사가 섞이면 그 매체사에서만 조용히 적자가 나고, 전체 평균에 묻혀 몇 달 동안 발견되지 않는다.
충돌 지점: 몰파이 커넥트 기획서 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초 미달 시 카운트다운
클릭 기록 존재 + 미claim
P0
3
홈
2회차 진입 카드
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 — 클릭 원장
컬럼
타입
설명
id
bigserial PK
user_id
FK → users
partner_code
varchar(32)
매체사 코드 (subId 구성 요소)
kst_date
date
클릭한 KST 날짜
sub_id
varchar(64)
쿠팡에 전달한 subId 원문
landing_url
text
전달한 딥링크
clicked_at
timestamptz
서버 시각. 15초 판정 기준
claimed_at
timestamptz null
박스 수령 시각. null이면 미수령
free_box_id
FK null
지급된 박스 참조
ip / user_agent
varchar
어뷰징 분석용
UNIQUE (user_id, kst_date) — 하루 1클릭 강제 INDEX (partner_code, kst_date) — 매체사별 집계
UNIQUE 제약을 (user_id, kst_date)로 잡는 이유: "하루 1회"를 지급이 아니라 클릭 단위로 막는다. 클릭만 하고 claim 안 한 유저가 다시 클릭할 수 있게 하면, 클릭 수만 부풀려져 쿠팡 쪽 트래픽 품질 지표(전환율)가 떨어진다. 계정 정지의 실질적 원인은 약관 해석이 아니라 이 지표다.
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단계 — 테스트 앱 단독(DAU ~200)으로 2주. EPC 실측 + 정지 리스크 관측
2단계 — EPC 9원 이상 확인 시 매체사 1곳 추가, 2주
3단계 — 전 매체사 확대. 이후 자동 차단 임계치로 상시 관리
계정이 정지되면 쿠팡 파트너스 수익 전체가 멈춘다. 한 번에 전 매체사를 열지 않는다.
10.4 자사 약관·방침
약관 v1.1에 제휴 쇼핑 조항이 없다 → 몰파이와 동일하게 최초 진입 시 별도 동의 수령 권장
개인정보처리방침 — 쿠팡으로 개인정보를 전송하지 않는다(subId는 매체사 코드). 제3자 제공 조항 추가 불필요
단, "외부 사이트로 이동 시 해당 사이트의 정책이 적용됨"을 안내 문구로 명시
수수료 수익의 세무 처리 — 파트너스 수익은 법인 기타수익으로 계상, 정산 60일 갭 고려 재무 확인
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 엣지케이스
상황
처리
클릭 후 자정 경과 → claim
EXPIRED. "어제 클릭이에요" 안내 후 재클릭 유도. 새 날짜의 클릭 레코드 생성 가능
클릭 후 앱 종료 → 다음 날 재접속
동일 (EXPIRED)
1회차 미오픈 상태에서 2회차 진입
FIRST_BOX_NOT_OPENED → 1회차 플로우로 유도. 순서 강제
쿠팡 앱 미설치
웹 페이지로 열림. 정상 동작 (파트너스 링크가 자동 분기)
인앱 웹뷰에서 쿠팡 앱으로 전환
서버 시각 기준이라 무관. 복귀만 하면 claim 가능
비회원
기능 미노출 + 로그인 유도
매체사 OFF 상태
available:false, reason:DISABLED → 소진 모달을 기존 단순 형태로 렌더
정책 enabled:false
전 지면 미노출. 이미 클릭한 유저의 claim은 허용(약속 이행)
claim 중 서버 오류
트랜잭션 롤백 → claimed_at null 유지 → 재시도 가능. 박스만 지급되고 claimed 미기록되는 경우가 없어야 함