정책: Lazy Auth + 웹 부활 (2026-05-07 출시 전 product redesign)
결정 요약
출시 전 5-PR 단위로 다음 변경:
- 로그인 강제 → lazy auth. 비로그인도 공시 read 가능, watchlist / AI 분석 reveal / feedback 만 게이트.
- 웹 부활. Next.js SEO 페이지 (
/disclosures/[rceptNo],/disclosures,/companies/[corpCode]) — 로그인 X, 앱 설치 CTA.
5명 패널 토론 (2026-05-07)
PM / GROWTH / ABUSE / FE / DEVIL 5인 토론. 핵심 갈등:
- PM: "로그인 마찰이 첫 인상 죽임. 비로그인 read 풀자."
- GROWTH: "웹 SEO 살리면 검색 유입 → 앱 설치 funnel 형성."
- ABUSE: "비로그인 quota 없으면 LLM 비용 직접. AppCheck + IP rate limit 만으로 충분?"
- FE: "게이트 UX 가 결정 어렵다. 모달이냐 풀스크린이냐."
- DEVIL: "전환 측정 없이 lazy 풀면 게이트 통과율 / 중도 이탈 못 봄. analytics 사전 셋업 안 하면 회복 불가능 데이터 공백. 웹 부활은 후순위."
결정 사항
비로그인 read 가능
disclosures/*,companies/*,stocks/searchai/analyze/{rceptNo}(Inspect 메타까지) —result필드는 비로그인 시 항상 omit (한줄요약으로 충분)
로그인 게이트
watchlist/*,ai/.../reveal,ai/.../feedback,quota/*,push/*
비로그인 quota 없음
IP rate limit + AppCheck 만으로 어뷰즈 1차 차단. LLM 비용은 어차피 스케줄러 단계에서 1회 (사용자 reveal 은 cache 조회). 자세히 ../policies/quota-ad-v3.md, 비용 모델은 메모리 project_cost_model.md.
짧은 공시 (FreeReveal) 비로그인 reveal 불허
DEVIL 의 "FreeReveal 비로그인 풀면 본문 노출 + 어뷰즈 ROI" 우려 채택. 한줄요약으로 충분 — 본문 보려면 로그인.
게이트 UX: 모달
showModalBottomSheet — 출시 후 풀스크린 A/B 가능성 열어둠. 첫 빌드 본 후 결정.
웹 부활도 출시 전
DEVIL 의 후순위 의견 기각 (사용자 결정). 웹은 로그인 X, 공시 SEO 페이지 + 앱 설치 CTA 만.
추진 순서 (PR 단위)
- analytics 사전 셋업 (Flutter) —
firebase_analytics도입 + 핵심 funnel 이벤트 wiring. ✅ PR #54 머지 (2026-05-07) - lazy auth — backend —
publicRoutes재정의 (ai/analyzeleaf 매처) + 비로그인 result omit. ✅ PR #56 머지 (2026-05-07) - lazy auth — Flutter ✅ — splash → home (비로그인),
requireAuth(BuildContext, WidgetRef, AuthGateAction, VoidCallback)helper +showModalBottomSheet게이트가 모든 로그인 진입점의 단일 경로. 보호된 액션 (reveal / watchlist add / feedback) 자동 트리거 + 명시적 진입 (settings → 로그인 메뉴,AuthGateAction.signIn). 전용/login페이지 +LoginPage위젯은 제거됨 — 게이트 모달이 같은 socials 를 모두 제공. 카피는 트리거별 분기, quota 숫자는WeeklyQuotaCopysingle source. - AppCheck seam 통일 (E-3) — opt-in (단일 경로) → opt-out (S2S/admin/health 만 면제) 모델. lazy auth 적용 후 진행 (publicRoutes 매트릭스 의존)
- 웹 부활 (Next.js) — 기본 랜딩 살아있음.
/disclosures/[rceptNo],/disclosures(피드),/companies/[corpCode]추가. Smart App Banner. reveal 은 "앱에서 보기"
측정 (PR 1 에서 사전 셋업)
게이트 funnel:
auth_gate_shown(action: reveal/watchlist/feedback)auth_gate_dismissed(action + reason: close/swipe) — 통과율 분모.reason으로 X 명시 닫기 vs swipe down/system back 구분 → 풀스크린 vs 모달 A/B 결정의 차원- 로그인 성공 경로는
auth_gate_shown직후login이벤트 (provider) 가 송출돼 timestamp correlation 으로 측정
자세한 이벤트 taxonomy: ../spec/domain-analytics.md.
미결
- 게이트 UX 모달 vs 풀스크린 — 출시 후 A/B 또는 첫 빌드 본 후 결정
- AppCheck opt-out 의 웹 호출 처리 — Origin 화이트리스트 vs 그냥 면제 + cache + rate limit. PR 4 에서 결정.
관련
- spec/domain-analytics.md — 이벤트 taxonomy
- spec/domain-auth.md — public 경로 매트릭스
- policies/lazy-reveal.md — AI 분석 reveal 모델 (자동 → 명시적)
- policies/monetization.md — 수익 모델 + quota / 광고 정책