Skip to content

정책: Lazy Auth + 웹 부활 (2026-05-07 출시 전 product redesign)

결정 요약

출시 전 5-PR 단위로 다음 변경:

  1. 로그인 강제 → lazy auth. 비로그인도 공시 read 가능, watchlist / AI 분석 reveal / feedback 만 게이트.
  2. 웹 부활. 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/search
  • ai/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 단위)

  1. analytics 사전 셋업 (Flutter)firebase_analytics 도입 + 핵심 funnel 이벤트 wiring. ✅ PR #54 머지 (2026-05-07)
  2. lazy auth — backendpublicRoutes 재정의 (ai/analyze leaf 매처) + 비로그인 result omit. ✅ PR #56 머지 (2026-05-07)
  3. lazy auth — Flutter ✅ — splash → home (비로그인), requireAuth(BuildContext, WidgetRef, AuthGateAction, VoidCallback) helper + showModalBottomSheet 게이트가 모든 로그인 진입점의 단일 경로. 보호된 액션 (reveal / watchlist add / feedback) 자동 트리거 + 명시적 진입 (settings → 로그인 메뉴, AuthGateAction.signIn). 전용 /login 페이지 + LoginPage 위젯은 제거됨 — 게이트 모달이 같은 socials 를 모두 제공. 카피는 트리거별 분기, quota 숫자는 WeeklyQuotaCopy single source.
  4. AppCheck seam 통일 (E-3) — opt-in (단일 경로) → opt-out (S2S/admin/health 만 면제) 모델. lazy auth 적용 후 진행 (publicRoutes 매트릭스 의존)
  5. 웹 부활 (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 에서 결정.

관련