수익 모델 + Quota / 광고 정책
현재 정책 (2026-05-25 기준 — quota V4 주 단위 + PRO 구독)
AI 분석 quota
- 무료 주 10 회 (매주 월요일 00:00 KST reset)
- 가입 보너스 폐지 — 첫 경험 일관성 위해 (V3 의 5+5 → 갑자기 5 의 절벽 제거)
- 광고 시청 → +1 회 충전 (=
used_count -= 1, 음수 허용)- 무제한 시청, 단 주 reset 시 음수도 0 으로 초기화 — 이월 불가
- SSV 가 Google 서버에서 실제 광고 시청 검증
ad_reward_transactions테이블은 SSV 중복 콜백 차단 (idempotency) 전용. 광고 횟수 UI 노출 없음
- 짧은 공시 (
doc_length < 1000자): quota 차감 X, 자동 노출 - 이미 본 공시 재진입: 차감 X, 자동 노출 (
user_revealed_disclosuresSoT) - 한줄요약: 전체 무료, 100 자, gate 없음
슬롯
- capacity 한도 안에서 add/remove 자유 (cooldown / counter X)
- 티어별 상한: 무료 3 / PRO 30 / MAX 100 (
entitlement.Tier.SlotCapacity(), 전용 컬럼 없이premium_tier에서 파생 — 폐기된slot_capacity컬럼은 migration 00018 제거). 티어 하락 시 다운그레이드 자동 정리 — domain-subscription - 사용자에 한도는 페이월/구독 화면에만, 인디케이터엔 익명
- (폐기) 종목 단건 결제로 capacity ↑ — 구독 티어로 흡수
구독 2티어 (유일 IAP) — 2026-05-25 확정
| 티어 | 가격/월 | 주간 분석 | 관심종목 |
|---|---|---|---|
| PRO | ₩1,000 | 60 | 30 |
| MAX | ₩2,000 | 200 | 100 |
- 자동갱신 구독 (
dartbrief.pro.monthly/dartbrief.max.monthly, iOS/Android). 차등 축 = 주간 분석 한도 + 관심종목 수. - 엔타이틀먼트 진실 = 서버(
users.premium_tier+premium_until), 검증 = verify + 스토어 웹훅. 상세 domain-subscription / api/subscription - (폐기)
ad_free_pass₩2,900 일회성 — 구독으로 대체. 광고 제거(=한도 상향)는 구독에 포함 - 무제한 폐기: reveal 을 티어별 주간 한도(10/60/200)로. 종목당 ~1.3건/주 데이터 기반 — 평상시 미도달, 피크·헤비유저 도달로 상위 티어 유도. reveal 원가≈0이라 한도 목적은 비용이 아니라 펀넬/어뷰즈.
Why
비용 모델 (정정)
LLM 호출 = 공시당 1회 (스케줄러가 분석 시). 사용자 reveal 은 analysis_cache DB 조회 — LLM 추가 호출 없음. 즉 사용자 reveal 횟수는 LLM 비용과 무관. DGX GPU 부하는 공시 발생 빈도(수급 측) 에만 비례.
따라서 quota cap 의 목적은:
- 구독 funnel — "주 한도 → 광고 또는 PRO/MAX 상위 티어" 흐름의 hook
- 다중 계정 어뷰즈 방어 보조 — App Check + SSV 1차 방어 + cap 으로 ROI 추가 하향
- 사용자 인지 가치 — 한도(10/60/200)가 분석 가치 신호 + 천장 역할
cap 자체가 비용 통제는 아님 (V3 까지 잘못 표기됐던 부분). 그래서 V4 에서 한도 후함 (월 5 → 주 10) + 가입 보너스 절벽 제거로 첫 경험 거부감 ↓ 에 집중.
정책 선택지유
- 주 단위 quota = 어닝 시즌 burst 흡수 (공시 5+ 연속 시 1주 끝 → 다음 주 reset). 월 단위는 1주차 소진 후 3주 단식 위험.
- 주 10 회 = 평균 사용자 충분, 광고/IAP 전환은 hyper user 만 노림.
- 가입 보너스 폐기 = "처음 10 → 갑자기 5" 절벽이 거부감 더 큼. 일관된 주 10 이 깔끔.
ad_bonus주 reset = used_count 와 정합. 누적이면 "이번 주 reset 시 ad_bonus 도 같이 reset?" 애매성 제거.- 광고 무제한 시청 = SSV 가 실제 시청 검증. 클라이언트 cap 불필요.
- 짧은 공시 면제 = 사용자 신뢰 + 인지 가치 (가벼운 공시는 어차피 차감하면 거부감만).
- 구독 2티어 (2026-05-25, 일회성
ad_free번복) = "매일 갱신되는 분석에 지속 접근"은 일회성보다 구독 가치 제안이 자연스럽고 MRR 로 잡힘. 구독 webhook(ASSN V2 / Play RTDN) 복잡도는 회피 사유였으나 Pub/Sub push 라우팅으로 감당 가능 재평가. - 2티어 차등 축 = 분석 한도 + 종목 수 (단일 무제한 X) = 종목당 ~1.3건/주 데이터상 30~100종목을 풀면 분석 수요가 40~130/주 → 무제한 캡이 자기모순. 그래서 종목 수(30/100)와 주간 한도(60/200)를 함께 올리는 사다리. 헤비유저 = 지불의사 높음 가설. 리스크: 차등이 종목 수 위주라 MAX 전환율이 관건(재조정 트리거에서 점검).
손익분기
MAU ~2,000명 (서버비 ₩60,000 ~ ₩80,000 / 월 기준)
재조정 트리거
6 개월 후 또는 MAU 1,000 도달 시 매출 데이터 기반 재토론.
정책 진화 이력
| 날짜 | 변경 |
|---|---|
| 2026-04-24 (V1) | 일 3 회 + 광고 +1 + 슬롯 ₩1,490 (구독 X) |
| 2026-04-29 | 슬롯 V3→V4→V5→V6: cooldown / 카운터 폐기 → capacity 만 |
| 2026-04-30 | Quota V3: 일 → 월 단위 + 신규 가입 보너스 + 짧은 공시 면제 |
| 2026-04-30 | 광고 무제한: 일 7 회 cap 폐기, 월 200 하드캡 |
| 2026-04-30 | Lazy reveal: 자동 차감 → 명시적 보기 버튼 |
| 2026-05-02 | AdMob SSV: prod 광고 보상 경로를 클라이언트 claim → Google SSV 콜백으로 전환 |
| 2026-05-03 | 월 ad_bonus 200 하드캡 제거 (SSV 도입으로 클라이언트 cap 불필요) |
| 2026-05-03 | key_points_json 포맷을 ||| 구분자에서 JSON 배열로 전환 (migration 00011) |
| 2026-05-25 | 수익 모델 = 구독 2티어 (PRO ₩1,000 / MAX ₩2,000). 일회성 ad_free_pass 번복·대체. 차등 = 주간 분석(60/200) + 관심종목(30/100). reveal 무제한 폐기 → 티어별 주간 한도(데이터 기반). premium_tier 컬럼 + 스토어 웹훅. spec: domain-subscription |
| 2026-05-06 (V4) | 월 → 주 단위 quota (10/주, 월요일 KST reset), 가입 보너스 폐기, ad_bonus 컬럼 제거 (광고 보상은 used_count -= 1 로 표현, 음수 허용). 비용 프레이밍 정정 (LLM 호출은 공시당 1회, reveal 은 캐시 조회). 마이그레이션 없이 user_analysis_quota drop & recreate (서비스 미가동) |
자세한 광고/quota 토론 이력: quota-ad-v3.md