Skip to content

[앱/웹] 첫 콘텐츠 이탈 시 다음 콘텐츠 추천 PRD

Backlog grooming 단계의 산출물. 무엇을 만들지·왜 만들지·핵심 비즈니스 룰을 정의한다. 화면별 디테일(컴포넌트·상태·인터랙션)은 spec.md로.


Status: draft Created: 2026-06-01 Last updated: 2026-06-11 Linear Project: [앱/웹] 첫 콘텐츠 이탈 시 다음 콘텐츠 추천Linear Issue: DEE-296Author: prd-writer (agent) 앱/웹/스튜디오: 앱 + 웹


0. Reversal Risk Summary

LayerR-levelReview focus
Policy / RuleR2이탈 판정 기준·노출 한도·성인 에피소드 후보 제한을 잘못 잡으면 UX/정책/추천 품질에 직접 영향
Data / BackendR2추천 후보 우선순위·공통 필터·성인 후보 cap·최근 30일 정렬 기준이 API/랭킹 구현과 맞아야 함
User-facing SurfaceR1v1 surface는 FirstEpisodeRecommend 바텀시트 + FirstEpisodeRecommendAdult 인증 게이트로 확정
Copy / Visual PresentationR1카피·카드 시각 표현은 출시 후 빠르게 조정 가능

1. 목표 및 배경

1.1 문제

가입 후 첫 콘텐츠에서 이탈하는 신규 유저는 다시 들어올 이유(진행 중인 이야기, 다음에 볼 콘텐츠)를 만들지 못한 채 떠난다. 웰컴 스타 직후 1회성 온보딩 추천(Newbie Recommendation)은 첫 플레이 시작 전에만 작동하고, 첫 플레이를 시작했다가 이탈하는 순간은 비어 있다.

  • 대상: 가입 후 첫 EpisodePlay를 시작했고 플레이를 벗어나는 신규 유저.
  • 상황: 첫 플레이 도중/직후 플레이 화면을 뒤로가기·홈 이동 등으로 벗어나려는 순간.

1.2 근거

  • 6월 Product Current Focus Goal: “가입한 유저들이 다음날 들어올 이유를 만든다.” 본 기능은 그 PCF goal의 D0 활성화 레버다.
  • 활성화 지표 = 씬 생성: 씬은 플레이 진행·credit 차감의 기준 단위이므로 “추가 씬 생성”이 신규 유저가 더 깊이 플레이했는지를 보는 직접 신호다.
  • 재사용 자산: 제외 룰·연령/성인 노출 정책 등 공통 필터는 기존 Discovery/Newbie Recommendation 계열 정책을 재사용한다.

1.3 해결 방향

첫 콘텐츠 이탈 신호를 감지한 순간, FirstEpisodeRecommend 추천 바텀시트를 띄워 다음 episode로 바로 이어준다.

확정 정책 (이번 사이클):

  • 출시 방식: 비실험 단일 출시. feature flag는 kill switch 용도만 사용한다.
  • 노출 대상: 신규 유저, 계정당 1회만 노출. 씬 생성 수 조건은 두지 않고, 배포 후 계정당 첫 이탈이면 추천 바텀시트를 노출한다.
  • 트리거: 첫 콘텐츠 플레이를 벗어나려는 순간.
    • 포함: 뒤로가기, 홈 이동, 명시적 나가기/leave 액션.
    • 제외: 일정 시간 이상 백그라운드 전환, 앱 kill/강제 종료, 결제/스타 충전 등 플레이 흐름 내 일시 이동.
  • surface: FirstEpisodeRecommend 하단 바텀시트 1개. 성인용 추천 선택 시 보조 게이트로 FirstEpisodeRecommendAdult를 사용한다.
  • 진입 목적지: 추천 에피소드 선택 시 에피소드 상세를 거치지 않고 바로 프롤로그 플레이로 진입한다.

재진입 카드·next-day 푸시·홈 랜딩 추천 모달은 본 사이클 범위 밖으로 둔다.

1.4 가설

  1. 첫 콘텐츠 이탈 순간 다음 콘텐츠를 추천하면, 추천을 받은 신규 유저는 같은 세션(D0)에 다음 콘텐츠로 진입해 추가 씬을 더 많이 생성한다.
  2. D0 추가 씬 생성이 늘면 다음날 복귀 동력이 생긴다 — 신규 유저 D1 retention이 개선된다. 단일 surface로 닿지 않는 장기 목표라 보조로 둔다.

1.5 성공 지표

지표정의 / 측정목표
(메인) 신규 유저당 D0 추가 씬 생성 수이탈 트리거 시각 이후 같은 날(D0) 해당 신규 유저가 생성한 씬 수출시 후 비노출/미자격군 및 과거 베이스라인 대비 개선
(메인 보조) 이탈 유저 D0 2nd 콘텐츠 플레이 시작률이탈 신규 유저 중 같은 날 다른 episode 프롤로그 플레이를 시작한 유저 비율출시 후 추이 개선
(진단 proxy) 바텀시트 노출 → 추천 클릭 CTRclick_next_content_reco unique user / view_next_content_reco unique user진단용
(진단 proxy) 클릭 → 프롤로그 플레이 시작률추천 클릭 유저 중 프롤로그 플레이 시작 이벤트 도달 비율진단용
(진단 proxy) 성인 인증 게이트 전환율성인 미인증 게이트 노출 후 성인인증 CTA 클릭/완료 비율진단용
  • CTR·진입률은 funnel 진단용 proxy이며 메인 지표는 D0 추가 씬 생성 수다.
  • 가드레일: 즉시 홈 이동/닫기율, 다음 콘텐츠 즉시 재이탈, 신규 유저 전체 세션 길이, 콘텐츠 신고 수.

2. 타깃 사용자

2.1 주요 사용자

  • 첫 콘텐츠 이탈 신규 유저: 가입 후 첫 EpisodePlay를 시작했고 플레이를 벗어나는 유저.
  • 신규 유저 lifecycle 초기, 주로 가입 당일. 계정당 1회 노출 소진 시 대상에서 제외된다.

2.2 핵심 시나리오

  1. 첫 콘텐츠가 안 맞아 이탈 → 다음 추천 진입 신규 유저가 첫 episode를 시작했지만 흥미를 잃고 플레이 화면을 벗어나려 한다. 이탈 순간 FirstEpisodeRecommend 바텀시트가 올라와 추천 1순위를 크게 보여주고, 2~8순위 후보를 하단 가로 스크롤로 제공한다. 유저가 후보를 선택하면 바로 프롤로그 플레이로 진입한다.
  2. 홈으로 이탈 유저가 바텀시트에서 [홈으로]를 누르면 추천 플레이로 진입하지 않고 홈으로 이동한다. 바텀시트가 view되었으므로 계정당 1회 노출은 소진된다.
  3. 성인용 추천 선택 → 성인인증 유도 유저가 성인용 에피소드를 선택했는데 아직 성인인증을 하지 않았다면 FirstEpisodeRecommendAdult를 띄우고, [성인 인증하기] CTA로 기존 성인인증 플로우에 보낸다.
  4. 후보 0건/조회 실패 추천 1순위 후보를 확보하지 못하면 바텀시트를 노출하지 않는다. view가 없으므로 계정당 1회 노출도 소진하지 않는다.

3. 핵심 기능 요구사항

3.1 클라이언트 — 첫 콘텐츠 이탈 판정

  • 주요 동작: 시스템이 신규 유저의 첫 콘텐츠 이탈 인텐트를 감지해 추천 바텀시트 트리거를 발생시킨다.
  • 비즈니스 룰:
    • 대상은 신규 유저다.
    • 씬 생성 수 조건은 노출 자격에서 제외한다.
    • 계정당 1회 미소진 상태에서 배포 후 첫 이탈이면 추천 바텀시트를 노출한다.
    • 포함 트리거: 뒤로가기, 홈 이동, 명시적 나가기/leave 액션.
    • 제외 트리거: 일정 시간 이상 백그라운드 전환, 앱 kill/강제 종료, 결제/스타 충전/인앱 결제 시트/외부 인증 등 플레이 흐름 내 일시 이동.
  • 상태별 동작:
    • 비로그인: 해당 없음. 플레이는 로그인 필수.
    • 계정당 1회 노출 소진 / 신규 유저 아님: 트리거 비발생, 미노출.

3.2 클라이언트 — FirstEpisodeRecommend 추천 바텀시트

  • 주요 동작: 이탈 트리거 발생 시 추천 episode 목록을 하단 바텀시트로 띄운다.
  • 화면 구성:
    • 추천 1순위는 큰 카드로 강조한다.
    • 2~8순위 에피소드는 하단에 가로 스크롤로 나열한다.
    • [홈으로] 버튼을 제공한다.
  • 추천 개수:
    • 최대 8개까지 노출한다.
    • 1순위 후보는 필수다. 1순위 후보도 없으면 미노출한다.
    • 2~8순위는 확보된 개수만큼만 노출하고 빈 슬롯은 렌더하지 않는다.
  • 진입 동작:
    • 추천 1순위 및 2~8순위 에피소드의 썸네일/제목 영역을 누르면 에피소드 상세 이동 없이 바로 프롤로그 플레이로 진입한다.
    • 신규 path는 만들지 않고 기존 프롤로그 플레이 라우팅을 재사용한다.
  • 홈으로:
    • [홈으로] 버튼을 누르면 홈으로 이동한다.
    • 추천 클릭 없이 이탈하더라도 이미 view가 발생했으므로 계정당 1회 노출은 소진된다.

3.3 추천 후보 / 알고리즘 정책

  • 추천 후보 모집단:
    • 별도 추천 전용 풀은 두지 않는다.
    • 공개 발행되어 정상 필터를 통과하고 플레이 가능한 episode 전체가 후보가 될 수 있다.
  • 공통 제외:
    • 현재 들어와 있는/방금 이탈한 episode
    • 미발행, 비공개, 삭제, 플레이 불가 episode
    • 정책상 해당 유저에게 노출 자체가 불가한 episode
  • 성인 episode 제한:
    • 성인 episode는 1순위 후보로 사용할 수 없다.
    • 성인 episode는 전체 추천 슬롯 중 최대 2개까지만 포함할 수 있다.
    • 성인인증 미완료는 후보 제외 사유가 아니다. 단, 기존 정책상 썸네일/제목 노출 자체가 불가한 유저에게는 후보로 내려주지 않는다.
    • 성인용 episode가 후보로 노출되고 미인증 유저가 선택하면 FirstEpisodeRecommendAdult 게이트를 거친다.
  • 후보 우선순위:
    1. 현재 이탈 episode의 visualStyle + category 둘 다 일치
    2. 현재 이탈 episode의 visualStyle 일치
    3. 현재 이탈 episode의 category 일치
    4. 운영 설정 fallback episode 또는 공개 발행 플레이 가능 전체 fallback
  • tier 내부 정렬:
    1. 최근 30일 누적 scene 생성수 desc
    2. 값이 없거나 동률이면 전체 누적 scene 생성수 desc
    3. 그래도 동률이면 최신 발행순
  • 슬롯 배치 정책:
    • 위 우선순위/정렬로 후보를 만든 뒤, 1순위 슬롯에는 성인 episode를 배치하지 않는다.
    • 2~8순위 전체에서 성인 episode는 최대 2개까지만 유지한다.
    • 제한 적용 후 슬롯이 부족하면 다음 후보로 채운다.

3.4 FirstEpisodeRecommendAdult 성인 인증 게이트

  • 등장 시점:
    • 선택한 에피소드가 성인용 에피소드
    • 유저가 아직 성인인증을 하지 않음
  • 주요 동작:
    • FirstEpisodeRecommend 위에 dim 처리된 중앙 인증 모달을 노출한다.
    • 카피: “어른들만의 에피소드를 선택했어요” / “시작하려면 확인이 필요해요”.
    • CTA: [성인 인증하기].
  • CTA 동작:
    • [성인 인증하기] 클릭 시 기존 성인인증 플로우로 이동한다.
    • 인증 완료 후 가능하면 선택한 에피소드의 프롤로그 플레이로 이어진다. 복귀 정책은 기존 성인인증 플로우 정책을 따른다.
    • 인증 취소/실패 시 에피소드 플레이는 시작하지 않는다.

3.5 노출 한도 / persistence

  • 계정당 lifetime 1회 노출.
  • FirstEpisodeRecommend가 실제 view된 순간 소진 마킹한다.
  • 추천 클릭, 홈으로 이동, 닫기 여부와 관계없이 view가 있으면 소진된다.
  • 후보 0건/조회 실패/타임아웃으로 view가 없으면 소진하지 않는다.
  • 소진 마킹은 서버 계정/profile 단위로 멱등 처리한다.

3.6 어드민

본 출시 범위 없음. 추천 후보는 공개 발행 episode 전체에서 이탈 episode의 visualStyle·category 우선순위와 성인 episode 제한 정책으로 산출한다. 전용 운영 큐레이션 surface는 후속 결정으로 둔다.

3.7 Scope

포함

  • 첫 콘텐츠 이탈 판정 룰
  • FirstEpisodeRecommend 바텀시트
  • FirstEpisodeRecommendAdult 성인 인증 게이트
  • 추천 1순위 + 2~8순위 후보 산출
  • 성인 episode 1순위 금지 + 최대 2개 제한
  • 바로 프롤로그 플레이 진입
  • [홈으로] 이탈 동작
  • 계정당 1회 노출 소진 정책
  • 로깅 이벤트

제외

  • 첫 플레이를 한 번도 시작하지 않은 미시작 유저
  • 홈 랜딩 중앙 추천 모달
  • 재진입 surface(홈/내 플레이 추천 카드)
  • 재진입 push / next-day 알림
  • 개인화 ML 랭킹 정교화
  • 추가 스타 지급·미션 등 다음 콘텐츠 외 활성화 수단
  • 기존 Newbie Recommendation 자체 변경
  • 전용 어드민 큐레이션 surface
  • 비노출군 분기

4. 에러 처리 및 예외 상황

상황처리 방향
추천 1순위 후보 없음바텀시트 미노출, 노출 미소진
보조 후보 부족확보된 2~8순위만 노출, 빈 슬롯 미렌더
추천 후보 조회 실패(네트워크/서버)바텀시트 미노출, 이탈 흐름 그대로 진행, 노출 미소진
추천 episode가 선택 시점에 비공개/삭제/플레이 불가기존 오류 안내 후 홈 또는 이전 화면으로 복귀
성인용 episode 선택 + 성인인증 미완료FirstEpisodeRecommendAdult 노출, 바로 플레이하지 않음
성인인증 취소/실패에피소드 플레이 시작하지 않음, 기존 정책에 따라 복귀
결제 등 플레이 흐름 내 일시 이동이탈로 판정하지 않음
일정 시간 이상 백그라운드 전환 / 앱 kill이탈로 판정하지 않음
계정당 1회 노출 이미 소진바텀시트 미노출

5. 데이터 분석 / 로깅

5.1 핵심 지표

지표 정의는 §1.5 참조. 분석 단위는 신규 유저(profile) 단위다.

  • 추가 씬 생성 측정 정의: 이탈 트리거 시각 이후 D0(당일) 동안 해당 유저가 생성한 씬 수.
  • 추천 진입 측정 정의: FirstEpisodeRecommend에서 추천 슬롯 클릭 후 프롤로그 플레이 시작 이벤트까지 도달한 비율.
  • 성인인증 게이트 측정 정의: 성인 미인증 게이트 노출 → 성인인증 CTA 클릭 → 인증 완료/실패/취소 funnel.

5.2 로깅 이벤트

컨벤션 + 기존 이벤트 목록: https://event-docs.frontia.dev/ (Cloudflare Access — WARP/momo 세션) 네이밍: snake_case, 동사_명사. 기존 그룹·이벤트 재사용 우선.

타입이름용도파라미터그룹상태
Eventview_next_content_recoFirstEpisodeRecommend 바텀시트 노출surface=first_episode_recommend, abandoned_episode_id, abandoned_scene_count, reco_episode_ids, top_episode_id, ranking_tiers, has_adult_episodediscovery🆕 신규 또는 기존 추천 모달 view 이벤트 재사용
Eventclick_next_content_reco추천 1~8순위 episode 클릭surface=first_episode_recommend, reco_episode_id, slot_index, is_adult_episode, adult_verification_status, destination(prologue_play/adult_verification), blocked_reasondiscovery🆕 신규
Eventclose_next_content_reco홈으로/뒤로가기/닫기surface=first_episode_recommend, reco_episode_ids, close_reason(home/back/dismiss)discovery🆕 신규 또는 기존 추천 모달 close 이벤트 재사용
Eventclick_next_content_reco_adult_verify성인 인증 CTA 클릭reco_episode_id, slot_index, source=first_episode_recommend_adultauth 또는 discovery기존 성인인증 이벤트 있으면 재사용
Event프롤로그 플레이 시작 이벤트추천 경유 프롤로그 플레이 시작episode_id, referrer=reco, source=first_episode_recommend, slot_index기존 Play 그룹기존 재사용
Log자격/미노출 사유자격 판정 결과와 미노출 사유eligibility_result, no_show_reason, abandoned_episode_id, abandoned_scene_countdiscovery필요

6. Ubiquitous Language

TermKoreanDefinitionDo Not Confuse WithPrimary Domain상태
FirstEpisodeRecommend첫 콘텐츠 이탈 추천 바텀시트신규 유저가 첫 콘텐츠에서 이탈하려는 순간 노출되는 다음 에피소드 추천 바텀시트Newbie RecommendationDiscovery / Play신규
FirstEpisodeRecommendAdult첫 콘텐츠 이탈 추천 성인 인증 게이트FirstEpisodeRecommend에서 성인용 에피소드를 선택했으나 유저가 아직 성인인증을 하지 않은 경우 노출되는 인증 안내 모달성인 에피소드 추천 제외 정책Discovery / Auth신규
Prologue Play프롤로그 플레이에피소드 상세를 거치지 않고 선택한 에피소드의 프롤로그 플레이로 바로 진입하는 목적지Episode DetailPlay기존

기존 용어(Episode, EpisodePlay, Scene, Turn, Newbie Recommendation)는 Frontia UL / Discovery capabilities 정의 그대로 사용한다.


7. Open Questions

확정됨(이번 사이클, 더 이상 OQ 아님): 비실험 단일 출시, 노출 대상 = 신규 유저, 노출 한도 = 계정당 1회, 씬 생성 수 조건 없음, 트리거 = 뒤로가기/홈 이동/나가기, 백그라운드 전환·앱 kill 제외, surface = FirstEpisodeRecommend 바텀시트 + FirstEpisodeRecommendAdult 성인 인증 게이트, 표시 구조 = 추천 1순위 + 2~8순위 최대 8개, 성인 episode = 1순위 금지 + 최대 2개, 진입 = 바로 프롤로그 플레이, tier 내부 정렬 = 최근 30일 scene 생성수 → 전체 누적 scene 생성수 → 최신 발행순.

  • [ ] 성인인증 완료 후 복귀 정책 — 인증 완료 뒤 선택 에피소드 프롤로그 플레이로 자동 복귀 가능한지, 불가하면 홈/이전 화면 복귀인지 확인. — 엔지니어 + PM
  • [ ] 정확한 바로 프롤로그 플레이 destination — 실제 route/event 명칭은 기존 Play 라우팅과 맞춘다. — 엔지니어
  • [ ] 이탈 인텐트 in-flow 예외 목록 — 결제/스타 충전·인앱 결제 시트·외부 인증·권한 팝업·딥링크 이동 중 어디까지 “일시 이동(제외)”으로 볼지. — 엔지니어 + PM
  • [ ] 노출 마킹 저장 단위 — 계정당 1회 노출 소진 마킹을 어디에 저장할지. view 멱등 처리 포함. — 엔지니어
  • [ ] 추천 조회 타임아웃 — 이탈 흐름을 지연시키지 않는 조회 타임아웃 값. — 엔지니어
  • [ ] 로깅 이벤트 재사용 실측 확정 — event-docs에서 기존 추천/성인인증/프롤로그 플레이 이벤트 재사용 여부 확인. — momo + 엔지니어

부록: 메타 정보

Required artifacts

  • [x] Spec (needs-spec) — 이탈 추천 바텀시트, 성인 인증 게이트, UI·상태·인터랙션
  • [x] Design (needs-design) — FirstEpisodeRecommend, FirstEpisodeRecommendAdult
  • [x] QA scenarios (needs-qa-scenarios) — 이탈 판정/예외, 계정당 1회 소진, 후보 0건, 성인 인증
  • [x] Tracking events (needs-tracking) — §5.2 이벤트
  • [x] Migration plan (needs-migration) — 계정당 1회 노출 마킹 저장 구조 (§7 확정 시)

Size & Risks

T-shirt Size

  • Size: M
  • Confidence: medium
  • 추정 근거: 신규 바텀시트 surface + 성인 인증 게이트 + 이탈 트리거 감지 + 추천 후보/성인 cap 로직. 추천 풀은 기존 Discovery 후보 조회/공통 필터 재사용 가능성이 높다.

주요 위험 요소

위험영향대응
바텀시트가 이탈 흐름을 끊어 피로·반감 유발즉시 홈 이동/닫기율 증가계정당 1회 노출로 피로 최소화 + close reason 모니터링
성인 episode가 과도하게 추천되어 신규 유저 경험이 왜곡됨정책/브랜드 리스크1순위 금지 + 최대 2개 제한
추천이 “이탈한 것과 비슷한 것”만 주면 같은 이유로 또 이탈회복률 저하최근 30일 scene 생성수 기반 성과 proxy로 정렬 + fallback tier 운영

의존성

  • Discovery 추천 후보 조회 로직 + 공통 필터
  • 성인 콘텐츠 노출/성인인증 정책
  • 기존 프롤로그 플레이 라우팅
  • 분석 이벤트 파이프라인

References

prd-review 보기

Review log

prd-writer 초기 검토는 같은 폴더 REVIEW.md 참조. 본 파일은 spec 확정 후 PRD 동기화 세션 로그.

2026-06-11 — spec.md 최신 결정사항 기준 PRD 동기화

Slack/spec 확정 결정을 source of truth로 삼아, PRD에 남은 stale 표현을 제거하고 최신 결정 상태만 남김.

채택

  • Q: 추천 표시 구조가 과거 PRD에서 stale
    • A: spec 방향 채택 — 추천 1순위 큰 카드 + 2~8순위 가로 스크롤, 최대 8개
    • → §2.2 시나리오, §3-1 B 추천 개수, §7 확정됨 note
  • Q: 추천 후보 모델이 PRD "Newbie 세그먼트 풀 재사용 + 인기/카테고리/운영고정 기준"으로 stale (spec은 이탈 episode의 visualStyle·category tier)
    • A: spec tier 채택 — ① category+visualStyle 둘 다 → ② visualStyle → ③ category → ④ 공개 발행 플레이 가능 전체. 별도 추천 전용 풀 없음, 공통 필터(제외 룰·연령/성인)만 Newbie와 공유
    • → §1.2 재사용 자산, §1.3 아이디어, §3-1 B 추천 후보 모집단·후보 우선순위·공통 필터, §3-2 어드민, §3-5 Scope 포함
  • Q: tier 내부 정렬 기준이 PRD에 미정의(랭킹 알고리즘 OQ로 미룸)
    • A: MVP 기본 = 최근 30일 scene 생성수 → 전체 누적 scene 생성수 → 최신 발행순
    • → §3-1 B tier 내부 정렬, §7 OQ(랭킹 → 후속 enhancement 도입 여부로 좁힘)
  • Q: 성인 episode 정책이 PRD에 불명확
    • A: 성인 episode는 1순위 금지 + 최대 2개, 미인증 선택 시 FirstEpisodeRecommendAdult로 성인인증 유도
    • → §3.3 성인 episode 제한, §3.4 성인 인증 게이트

Skip / 제거

  • Q: §7 "추천 기준 조합"(인기/동일·유사 카테고리/다른 카테고리/운영 고정) OQ
    • 사유: spec tier 모델로 해소됨 — 더 이상 OQ 아님. 항목 삭제
  • 부수 정리: Reversal Risk Summary Data/Backend review focus, §부록 의존성의 "세그먼트 풀" 표현을 후보 우선순위·공통 필터 기준으로 갱신 (stale 동기화)

모모 인라인 피드백 (criteria 후보)

  • (이번 세션은 spec→PRD 동기화 작업이라 신규 criteria 후보 없음. criteria.md 미변경.)