d3ro-voice/docs/monetization-plan.md
2026-08-29 18:33:45 +09:00

4.4 KiB

D3RO Voice 수익화 실행 계획 (2026-08-24)

목표: 배포 → 노출 → 검증된 수입 회수까지의 최단 경로. 근거: 광고 E2E RED 스위트 652 시나리오 전 GREEN(수입 무결성 1차 방어 완료).

현재 자산 (이미 완료)

자산 상태
모바일 앱 (Android, 무료 티어) 배포 파이프라인 완성 (APK 서명/오프라인 번들)
AdMob 배너/리워드 광고 production 앱/배너/리워드 단위 발급 완료. 현재 TEST-DEMO 앱 산출물은 계속 Google test ID 사용
SSV 리워드 검증 (엣지함수) AdMob URL 확인·저장, Edge v13, DB receipt replay barrier 운영 배포 완료
리워드→쿼터 지급 체인 리워드 시청 = 전사/대화 쿼터 충전 (무료 티어 수익화 핵심)
PRO 구독 (Stripe/Payple) 결제 인프라 존재 (admin 구독 관리 페이지)
관리자 콘솔 광고/릴리스/구독/정산 페이지 통합 배포 완료
광고 정산 원장 eCPM/원천세/KRW 지급 계약 구현 (계열 F)

1단계 — 프로덕션 AdMob 콘솔 연결 (2026-08-24 완료)

  1. AdMob 앱: Android com.d3ro.voice, App ID ca-app-pub-1039714767792854~6427959892
  2. 배너 단위: ca-app-pub-1039714767792854/9840591290
  3. 리워드 단위: ca-app-pub-1039714767792854/2255790918, reward amount = 50, reward item = cloud_ai_tokens
  4. SSV: https://llnocwyqvhgwpdjcqqyw.supabase.co/functions/v1/admob-ssv를 Google URL 확인 후 저장. Supabase secret ADMOB_REWARDED_AD_UNIT_ANDROID도 동일 rewarded ID로 설정

빌드 게이트: Gradle이 D3RO_ADMOB_APP_ID/D3RO_ADMOB_BANNER_UNIT_ID/ D3RO_ADMOB_REWARDED_UNIT_ID를 environment/property에서 요구하며, production release에서 Google 공식 test publisher ID를 거부한다.

AdMob 지급 프로필은 아직 미완료다. 스토어 등록정보 연결과 앱 검토도 대기 중이므로, 콘솔 연결 완료를 광고 게재 승인이나 production 수입 발생으로 해석하지 않는다.

2단계 — 배포 (스토어 + 직접 배포 병행)

  • Play 스토어: 내부 테스트 트랙 → 프로덕션 (릴리스 파이프라인 재사용)
  • 직접 APK: site 다운로드 페이지가 Forgejo 릴리스 첨부와 연동돼 있음 — 태그만 밀면 배포 완료
  • 정산 회로 점검 관문: 배포 전 apps/desktop 전체 테스트(1,242) + 모바일 release-boundary 스크립트(npm run release:mobile:boundary) 통과

3단계 — 수입 회수 구조

무료 사용자 ─ 배너 노출 ──────────────→ AdMob 수입 (eCPM 집계: 계열 F)
         └ 리워드 시청 → SSV 검증(리플레이 방어) → 쿼터 지급
유료 전환 ─ PRO 구독 (Stripe/Payple) → 광고 제거 + 무제한
  • 지급: AdSettlementRecord 원장 (원천세 3.3% 가정, KRW 환산, 계좌이체 기본)
  • 모니터링: 관리자 /ads + /usage 페이지 (이미 배포됨)

4단계 — 성장 레버 (수입 안정 후)

  1. 리워드 eCPM 상승: 미디에이션 순위 A/B (설정은 관리자 /ads에서)
  2. 데스크톱 하우스 광고(DirectHouseSponsorAdapter): 스폰서 직접 영업 시 즉시 착수
  3. 인터스티셜(export 시): 무료 티어 수출 워크플로우에 삽입 — 계약은 이미 시나리오로 묶여 있음(계열 A3)

위험 관리 (이미 묶여 있음)

위험 방어 근거
리워드 리플레이 사기 isolate tx 캐시 + DB transaction_id UNIQUE receipt 원장 + ±1h 신선도 SSV 6 + 광고 652 + DB 85 assertions/race 검증
가짜 입찰 크리에이티브 SDK 미연동 어댑터 no-bid 강제 계열 A2/B 110 시나리오
설정 오염(음수 보상 등) setConfig 검증 계열 G 40 시나리오
Node↔Deno 서명 형식 차이 DER 파서 + RAW→DER 테스트 변환기 E2/E3

다음 액션 (순서대로)

  • AdMob 앱/배너/리워드 단위 ID 발급
  • Supabase rewarded unit secret 및 SSV 콜백 URL 확인·저장
  • 지급 프로필 작성, 스토어 등록정보 연결, 앱 검토 완료 (사용자)
  • 보호된 빌드 환경에 production ID/Firebase/signing 값 주입 → signed APK+AAB
  • AdMob test device + Play internal 설치본으로 실제 Google-signed SSV→receipt→claim→credit +50 E2E
  • Play 내부 테스트 업로드 → 20명 베타 → 프로덕션
  • 첫 정산 주기(월) 관리자 /ads에서 원장 확인