Skip to content

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

Refinement 단계의 산출물. PRD에서 정의한 의도를 화면 단위 디테일로 명세한다. API 시그니처·DB 스키마·랭킹 알고리즘 구현은 별도 개발 설계 문서로. 본 문서는 추천 바텀시트의 노출 조건, 화면 구성, 클릭/이탈 동작, 성인 인증 게이트, 로깅·QA 기준을 정의한다.


1. Overview

  • PRD: ./PRD.md
  • Figma / 디자인 기준: FirstEpisodeRecommend / FirstEpisodeRecommendAdult 화면 시안
  • Linear: DEE-336 (Spec writing)
  • 앱/웹/스튜디오: 앱 + 웹
  • What: 신규 유저가 이 기능 배포 후 계정당 1회 미소진 상태에서 첫 콘텐츠를 이탈하는 순간, 에피소드 플레이 화면 위로 FirstEpisodeRecommend 바텀시트를 노출한다. 추천 1순위를 크게 강조하고, 2~8순위 에피소드는 하단 가로 스크롤 리스트로 제공한다. 추천 에피소드의 썸네일 또는 제목 영역을 누르면 에피소드 상세로 가지 않고 바로 프롤로그 플레이로 진입한다.
  • 노출 기준: 씬 생성 수 조건은 두지 않는다. 신규 유저가 계정당 1회 미소진 상태에서 첫 콘텐츠를 이탈하면 추천 바텀시트를 노출한다.
  • 트리거: 사용자가 에피소드/플레이어에서 나가기(leave) 탭, 뒤로가기, 홈 이동으로 이탈하려는 순간. 일정 시간 이상 백그라운드 전환, 결제/스타 충전 등 플레이 흐름 내 일시 이동, 앱 kill/강제 종료는 이탈 트리거가 아니다.
  • 출시 방식: 비실험 단일 출시. feature flag는 kill switch 용도다.
  • v1 surface 경계: v1 신규 surface는 이탈 시점 바텀시트 1개다. 홈 랜딩 중앙 추천 모달은 본 spec 범위에서 제외한다.

2. Ubiquitous Language

TermKoreanDefinitionDo Not Confuse WithPrimary Domain상태
FirstEpisodeRecommend첫 콘텐츠 이탈 추천 바텀시트신규 유저가 첫 콘텐츠에서 이탈하려는 순간 노출되는 다음 에피소드 추천 바텀시트Newbie Recommendation(웰컴 스타 직후 1회성 진입 추천)Discovery / Play신규
FirstEpisodeRecommendAdult첫 콘텐츠 이탈 추천 성인 인증 게이트FirstEpisodeRecommend에서 성인용 에피소드를 선택했으나 유저가 아직 성인인증을 하지 않은 경우 노출되는 인증 안내 모달성인 에피소드 추천 제외 정책Discovery / Auth신규
Episode에피소드플레이 단위 콘텐츠SceneDiscovery / Play기존
Prologue Play프롤로그 플레이에피소드 상세를 거치지 않고 선택한 에피소드의 프롤로그 플레이로 바로 진입하는 목적지Episode DetailPlay기존
Scene플레이 진행·credit 차감의 기준 단위. 본 기능에서는 추천 이후 추가 씬 생성 성과를 측정하는 기준Turn, FramePlay기존

본 spec 한정 약속어:

  • 이탈 인텐트(churn intent): 에피소드/플레이어에서 나가기(leave) 탭, 뒤로가기, 홈 이동. 일정 시간 이상 백그라운드 전환, 결제/스타 충전 등 플레이 흐름 내 일시 이동, 앱 kill/강제 종료는 제외한다.
  • 자격 이탈(qualifying exit): 이 기능 배포 후 신규 유저가 계정당 1회 미소진 상태에서 첫 콘텐츠를 이탈하는 경우. 씬 생성 수 5회 미만 같은 조건은 사용하지 않는다.
  • 추천 1순위: 바텀시트 중앙에 큰 카드로 강조되는 대표 추천 에피소드.
  • 2~8순위 추천: 추천 1순위 아래에 가로 스크롤로 나열되는 보조 추천 에피소드.

3. User Flows

3.1 전체 플로우

3.2 시나리오별 플로우

시나리오 1 — 첫 콘텐츠 이탈 → 추천 1순위 바로 프롤로그 플레이

  1. 신규 유저가 첫 콘텐츠 플레이 중 나가기/뒤로가기/홈 이동으로 이탈하려 한다.
  2. 계정당 1회 미소진이면 추천 후보를 조회한다.
  3. FirstEpisodeRecommend 바텀시트가 노출된다. 추천 1순위가 큰 카드로 강조되고, 2~8순위는 하단 가로 스크롤로 나열된다.
  4. 유저가 추천 1순위의 썸네일 또는 제목 영역을 누른다.
  5. 에피소드 상세 화면으로 이동하지 않고 해당 에피소드의 프롤로그 플레이로 바로 진입한다.

시나리오 2 — 2~8순위 추천 선택 → 바로 프롤로그 플레이

  1. 바텀시트 하단의 2~8순위 에피소드 리스트를 좌우로 스크롤한다.
  2. 특정 보조 추천 에피소드의 썸네일 또는 제목 영역을 누른다.
  3. 에피소드 상세 화면 없이 해당 에피소드의 프롤로그 플레이로 바로 진입한다.

시나리오 3 — 홈으로 이탈

  1. 바텀시트가 노출된 상태에서 유저가 [홈으로] 버튼을 누른다.
  2. 추천 플레이로 진입하지 않고 홈으로 이동한다.
  3. 바텀시트 view가 발생했으므로 계정당 1회 노출은 이미 소진된 상태다.

시나리오 4 — 성인용 에피소드 선택 + 성인인증 미완료

  1. FirstEpisodeRecommend에서 유저가 성인용 에피소드를 선택한다.
  2. 유저가 아직 성인인증을 하지 않았다면 FirstEpisodeRecommendAdult 인증 안내 모달을 노출한다.
  3. 안내 카피: “어른들만의 에피소드를 선택했어요” / “시작하려면 확인이 필요해요”.
  4. 유저가 **[성인 인증하기]**를 누르면 기존 성인인증 플로우로 이동한다.
  5. 인증 완료 후 목적지 복귀 정책은 기존 성인인증 플로우 정책을 따른다. 가능하면 선택한 에피소드의 프롤로그 플레이로 이어진다.

시나리오 5 — 후보 0건 / 조회 실패

  1. 노출 자격은 충족했으나 추천 후보가 0건이거나 후보 조회가 실패/타임아웃된다.
  2. 바텀시트를 노출하지 않고 사용자가 시작한 이탈 동작을 그대로 진행한다.
  3. view가 없으므로 계정당 1회 노출을 소진하지 않는다.

4. Screens

4.1 FirstEpisodeRecommend — 이탈 시점 추천 바텀시트

  • Purpose: 첫 콘텐츠 이탈 순간, 다음 에피소드 후보를 제시해 유저를 곧바로 다른 프롤로그 플레이로 이어준다.
  • Figma 기준 화면명: FirstEpisodeRecommend
  • 노출 위치: 에피소드 플레이 화면 위 하단 부착 바텀시트. 상단 배경의 플레이 화면은 dim/blur 처리된다.

Components

  • 바텀시트 컨테이너
    • 화면 하단 부착
    • 상단 rounded corner
    • 상단 grab handle
    • 배경 dim 처리
  • 타이틀
    • 문구: “이 에피소드도 좋아하실거에요!”
  • 추천 1순위 카드
    • 큰 썸네일/커버 이미지
    • 중앙 play affordance 표시 가능
    • 카테고리/장르 라벨 예: SF/판타지
    • 제목 예: 나의 멸망 나의 구원자
    • 1순위 추천임을 시각적으로 강조한다.
  • 2~8순위 추천 리스트
    • 추천 1순위 아래에 가로 스크롤로 나열
    • 각 카드: 썸네일 + 제목(말줄임 가능)
    • 2순위부터 8순위까지 최대 7개 보조 추천을 표시
  • 하단 이탈 버튼
    • 문구: “홈으로”
    • 아이콘이 있으면 기존 홈 아이콘 사용

States

  • Default: 추천 1순위 + 2~8순위 리스트를 노출한다.
  • 부분 후보: 1순위 후보는 필수다. 2~8순위는 확보된 개수만큼 표시한다. 1순위 후보도 없으면 바텀시트를 노출하지 않는다.
  • 후보 조회 실패/타임아웃: 바텀시트를 노출하지 않는다.
  • 이미 노출 소진 / 신규 유저 아님: 바텀시트를 노출하지 않는다.

Interactions

액션트리거결과
노출첫 콘텐츠 이탈 인텐트 + 신규 유저 + 계정당 1회 미소진 + 1순위 후보 확보view_next_content_reco 발화, 계정당 1회 노출 소진
추천 1순위 선택1순위 에피소드 썸네일 또는 제목 영역 tap에피소드 상세 이동 없이 바로 프롤로그 플레이. click_next_content_reco 발화(slot_index=1)
2~8순위 선택하단 가로 스크롤 리스트의 에피소드 썸네일 또는 제목 영역 tap에피소드 상세 이동 없이 바로 프롤로그 플레이. click_next_content_reco 발화(slot_index=2..8)
홈으로[홈으로] 버튼 tap홈으로 이동. close_next_content_reco 또는 별도 close reason 발화(close_reason=home)
닫기/뒤로가기시스템 뒤로가기, 바텀시트 닫기 동작이 있는 경우사용자가 시작한 이탈 동작을 그대로 진행. close_next_content_reco 발화

클릭 영역: 에피소드 썸네일 영역과 제목 영역은 모두 같은 선택 액션으로 처리한다. 별도 에피소드 상세 진입은 없다.

Data

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

Persistence

데이터위치정책
계정당 1회 노출 소진 플래그서버(계정/profile 단위)view 발생 시점에 소진 마킹. 추천을 클릭하지 않고 홈으로 가도 소진된다. 후보 0건/조회 실패로 view가 없으면 소진하지 않는다.

4.2 FirstEpisodeRecommendAdult — 성인 인증 게이트

  • Purpose: 추천 바텀시트에서 성인용 에피소드를 선택했지만 유저가 아직 성인인증을 하지 않은 경우, 플레이 진입 전에 인증 필요를 안내한다.
  • Figma 기준 화면명: FirstEpisodeRecommendAdult
  • 등장 시점
    • 선택한 에피소드가 성인용 에피소드
    • 유저가 아직 성인인증을 하지 않음

Components

  • 배경
    • 기존 FirstEpisodeRecommend 화면을 유지하되 전체 dim 처리
  • 중앙 인증 모달
    • 성인/프로필 인증 그래픽 아이콘
    • 타이틀: “어른들만의 에피소드를 선택했어요”
    • 보조 카피: “시작하려면 확인이 필요해요”
    • CTA: “성인 인증하기”

Interactions

액션트리거결과
성인 인증하기CTA tap기존 성인인증 플로우로 이동. click_next_content_reco_adult_verify 또는 click_next_content_recoblocked_reason=adult_verification_required 기록
인증 완료성인인증 성공가능하면 선택한 에피소드의 프롤로그 플레이로 이어진다. 복귀 정책은 기존 성인인증 플로우를 따른다.
인증 취소/실패성인인증 중단 또는 실패기존 정책에 따라 이전 화면 또는 홈으로 복귀. 에피소드 플레이는 시작하지 않는다.

5. Edge Cases & Error Handling

5.1 입력 경계

  • 1순위 후보 없음: 바텀시트 미노출. view가 없으므로 노출 소진하지 않는다.
  • 보조 후보 부족: 2~8순위는 확보된 후보만 노출한다. 빈 슬롯을 렌더하지 않는다.
  • 추천 카드 메타 누락: 썸네일/제목이 깨진 후보는 노출하지 않고 다음 후보로 대체한다.

5.2 권한 / 인증

  • 비로그인: 해당 없음. 플레이는 로그인 필수이며 본 트리거는 로그인 신규 유저에만 발생한다.
  • 성인인증 미완료 + 성인용 에피소드 선택: FirstEpisodeRecommendAdult를 노출하고 바로 플레이하지 않는다.
  • 성인인증 완료 + 성인용 에피소드 선택: 일반 에피소드와 동일하게 바로 프롤로그 플레이로 진입한다.
  • 정책상 노출 불가 성인 episode: 후보에서 제외한다. 예: 미성년자로 확정된 유저 등 기존 정책상 성인 콘텐츠 노출 자체가 불가한 경우.
  • 흐름 내 일시 이동 / 백그라운드 / 강제 종료: 일정 시간 이상 백그라운드 전환, 결제/스타 충전·인앱 결제 시트·외부 인증 등 플레이 흐름 내 일시 이동과 앱 kill은 이탈로 판정하지 않는다.

5.3 네트워크 / 시스템

  • 추천 후보 조회 실패: 바텀시트 미노출, 이탈 흐름 그대로 진행, 노출 미소진.
  • 조회 지연: 짧은 타임아웃 내 후보 미확보 시 미노출. 이탈 흐름을 추천 조회로 지연시키지 않는다.
  • 성인인증 플로우 오류: 기존 성인인증 오류 처리 정책을 따른다. 추천 에피소드 플레이는 시작하지 않는다.

5.4 데이터 상태

  • 추천 episode가 선택 시점에 비공개/삭제/플레이 불가로 변경됨: 플레이 진입 전 검증 실패 시 기존 오류 안내 후 홈 또는 이전 화면으로 복귀한다.
  • 노출 마킹 경합: view 직후 홈으로/추천 선택/뒤로가기가 빠르게 발생해도 소진 마킹은 view 1회 기준 멱등 처리한다.

5.5 비즈니스 룰 위반

  • 계정당 1회 이미 소진: 모달 미노출.
  • 신규 유저 아님: 모달 미노출.
  • 씬 생성 수 5회 이상: 별도 미노출 조건이 아니다. 신규 유저 + 계정당 미소진 + 첫 이탈이면 노출 대상이다.

6. Acceptance Criteria

  • [ ] 신규 유저가 첫 콘텐츠 플레이에서 나가기/뒤로가기/홈 이동으로 이탈하는 순간, 계정당 1회 미소진이고 추천 1순위 후보가 있으면 FirstEpisodeRecommend 바텀시트가 노출된다.
  • [ ] 씬 생성 수 5회 미만 조건은 사용하지 않는다. 씬 생성 수와 무관하게 첫 이탈이면 노출 대상이다.
  • [ ] 바텀시트는 추천 1순위를 큰 카드로 강조하고, 2~8순위 에피소드를 하단 가로 스크롤 리스트로 노출한다.
  • [ ] 추천 1순위 및 2~8순위 카드의 썸네일/제목 영역을 누르면 에피소드 상세 이동 없이 바로 프롤로그 플레이로 진입한다.
  • [ ] [홈으로] 버튼을 누르면 추천 플레이로 진입하지 않고 홈으로 이동한다.
  • [ ] 선택한 에피소드가 성인용이고 유저가 아직 성인인증을 하지 않았다면 FirstEpisodeRecommendAdult 모달을 노출한다.
  • [ ] 성인 episode는 추천 1순위 슬롯에 배치하지 않고, 2~8순위 전체에서 최대 2개까지만 노출한다.
  • [ ] FirstEpisodeRecommendAdult에서 [성인 인증하기]를 누르면 기존 성인인증 플로우로 이동한다.
  • [ ] 성인인증 완료 유저가 성인용 추천을 선택하면 일반 추천과 동일하게 바로 프롤로그 플레이로 진입한다.
  • [ ] 후보 0건/조회 실패/타임아웃이면 바텀시트를 노출하지 않고, 계정당 1회 노출도 소진하지 않는다.
  • [ ] 바텀시트가 실제 view되면 홈으로 가거나 닫더라도 계정당 1회 노출이 소진된다.
  • [ ] 추천 후보는 방금 이탈한 episode 기준 visualStyle+categoryvisualStylecategory → fallback 순으로 채우고, 각 tier 안에서 최근 30일 scene 생성수 → 전체 누적 scene 생성수 → 최신 발행순으로 정렬한다.
  • [ ] view_next_content_reco, click_next_content_reco, close_next_content_reco가 surface, slot_index, reco_episode_id(s)/title(s), adult gate 여부를 구분할 수 있게 기록된다.

7. Analytics / Logging

컨벤션 + 기존 이벤트 목록: https://event-docs.frontia.dev/ (Cloudflare Access — WARP/momo 세션). 본 surface는 추천 모달 계열이므로 기존 discovery 그룹 이벤트 재사용을 우선한다. 단, event-docs 실측 대조 전까지 아래 신규 이벤트명은 초안이다.

7.1 로깅 컨벤션

  • episode_id를 이벤트 파라미터로 남기는 경우, 같은 이벤트에 대응하는 episode_title도 함께 남긴다.
  • 여러 추천 후보를 배열로 남길 때는 reco_episode_idsreco_episode_titles를 같은 순서의 배열로 남긴다. 순서는 바텀시트 노출 슬롯 순서(1~8)와 동일해야 한다.
  • 클릭/진입처럼 단일 추천 에피소드를 남길 때는 reco_episode_id, reco_episode_title, slot_index를 함께 남긴다.
  • 방금 이탈한 원본 에피소드는 abandoned_episode_id, abandoned_episode_title로 남긴다.
  • 이미지 URL/썸네일 URL/이미지 바이너리 값은 이벤트 파라미터로 보내지 않는다.

7.2 이벤트별 발화 조건

view_next_content_reco

  • 발화 시점: FirstEpisodeRecommend 바텀시트가 실제 노출된 순간 1회.
  • 파라미터: surface=first_episode_recommend, abandoned_episode_id, abandoned_episode_title, abandoned_scene_count, reco_episode_ids, reco_episode_titles, top_episode_id, top_episode_title, ranking_tiers, has_adult_episode.
  • 제외 조건: 후보 0건/조회 실패/자격 미달로 미노출된 경우 미발화.
  • 그룹: discovery.

click_next_content_reco

  • 발화 시점: 추천 1순위 또는 2~8순위 에피소드의 썸네일/제목 영역 tap 시.
  • 파라미터: surface=first_episode_recommend, reco_episode_id, reco_episode_title, slot_index(1~8), is_adult_episode, adult_verification_status, destination(prologue_play|adult_verification).
  • 성인 미인증 선택: 바로 플레이하지 않고 destination=adult_verification, blocked_reason=adult_verification_required로 남긴다.
  • 그룹: discovery.

close_next_content_reco

  • 발화 시점: [홈으로], 뒤로가기, 닫기 동작으로 추천 바텀시트를 벗어날 때.
  • 파라미터: surface=first_episode_recommend, reco_episode_ids, reco_episode_titles, close_reason(home|back|dismiss).
  • 제외 조건: 추천 카드 선택은 click으로 기록한다.
  • 그룹: discovery.

성인 인증 CTA

  • 기존 성인인증 이벤트가 있으면 재사용한다.
  • 별도 이벤트가 필요하면 click_next_content_reco_adult_verify를 사용한다.
  • 파라미터: reco_episode_id, reco_episode_title, slot_index, source=first_episode_recommend_adult.

click_play_start / 프롤로그 플레이 시작 이벤트

  • 발화 시점: 추천 경유로 프롤로그 플레이가 실제 시작될 때.
  • 파라미터: episode_id, episode_title, referrer=reco, source=first_episode_recommend, slot_index.
  • 그룹: 기존 Play 이벤트 그룹 재사용.

자격/미노출 사유 로깅

  • 목적: 자격 판정 결과와 미노출 사유를 남겨 커버리지/누락을 측정한다.
  • 남길 값(예): eligibility_result(eligible|already_consumed|not_new_user), no_show_reason(no_candidate|fetch_error|timeout), abandoned_episode_id, abandoned_episode_title, abandoned_scene_count.

8. Open Questions

확정됨(이번 사이클, OQ 아님): 노출 대상 = 신규 유저·계정당 1회 미소진·첫 이탈, 트리거 = 나가기/뒤로가기/홈 이동, 일정 시간 이상 백그라운드 전환은 트리거 제외, 씬 생성 수 5회 미만 조건 삭제, surface = FirstEpisodeRecommend 바텀시트 1개, 추천 1순위 강조 + 2~8순위 가로 스크롤, 성인 episode = 1순위 금지 + 최대 2개, 썸네일/제목 클릭 시 에피소드 상세 없이 바로 프롤로그 플레이, 성인용 에피소드 선택 + 미인증 시 FirstEpisodeRecommendAdult → 성인인증 플로우, 비실험 단일 출시.

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

9. QA Scenarios

9.1 노출 트리거 / 자격

#전제액션기대 결과
T1신규 유저, 계정당 1회 미소진첫 콘텐츠 플레이에서 뒤로가기FirstEpisodeRecommend 바텀시트 노출, view 이벤트 발화, 노출 소진
T2신규 유저, 계정당 1회 미소진첫 콘텐츠 플레이에서 나가기 tapT1과 동일
T2-1신규 유저, 계정당 1회 미소진첫 콘텐츠 플레이에서 홈 이동T1과 동일
T3신규 유저, 씬 생성 수 5회 이상, 계정당 1회 미소진첫 콘텐츠 이탈씬 수와 무관하게 바텀시트 노출
T4계정당 1회 이미 소진첫 콘텐츠 이탈미노출
T5신규 유저 아님플레이 이탈미노출
T6신규 유저, 미소진결제/스타 충전 등 흐름 내 일시 이동미노출, 복귀 시 플레이 이어감
T7신규 유저, 미소진일정 시간 이상 백그라운드 전환 또는 앱 kill/강제 종료미노출

9.2 추천 후보 / 화면 구성

#전제액션기대 결과
R1후보 8개 이상이탈 트리거1순위 큰 카드 + 2~8순위 하단 가로 스크롤 노출
R2후보 3개이탈 트리거1순위 큰 카드 + 2~3순위만 노출, 빈 슬롯 없음
R3후보 1개이탈 트리거1순위 큰 카드만 노출
R4후보 0건이탈 트리거미노출, 노출 미소진
R5visualStyle/category 후보 혼재이탈 트리거visualStyle+category → visualStyle → category → fallback 순으로 1~8순위 산출
R6tier 내 후보 다수이탈 트리거최근 30일 scene 생성수 → 전체 누적 → 최신 발행순
R7성인 episode 후보 포함이탈 트리거성인 episode는 1순위에 배치되지 않고, 2~8순위 전체에서 최대 2개까지만 노출

9.3 인터랙션 / 진입

#전제액션기대 결과
I1바텀시트 노출1순위 썸네일 tap에피소드 상세 없이 바로 프롤로그 플레이, click 이벤트 slot_index=1
I2바텀시트 노출1순위 제목 tapI1과 동일
I3바텀시트 노출2~8순위 썸네일/제목 tap에피소드 상세 없이 바로 프롤로그 플레이, click 이벤트 slot_index=2..8
I4바텀시트 노출[홈으로] tap홈으로 이동, close 이벤트 close_reason=home, 노출 소진 유지
I5바텀시트 노출뒤로가기/닫기사용자가 시작한 이탈 동작 계속, close 이벤트

9.4 성인 인증

#전제액션기대 결과
A1성인용 추천, 유저 성인인증 완료추천 카드 tap바로 프롤로그 플레이
A2성인용 추천, 유저 성인인증 미완료추천 카드 tapFirstEpisodeRecommendAdult 노출, 플레이 미시작
A3A2 상태[성인 인증하기] tap기존 성인인증 플로우로 이동
A4성인인증 취소/실패인증 플로우 중단에피소드 플레이 시작하지 않음, 기존 정책에 따라 복귀
A5정책상 성인 콘텐츠 노출 불가 유저이탈 트리거해당 유저에게 노출 불가한 성인 episode는 후보에서 제외

9.5 노출 한도 / 소진

#전제액션기대 결과
L1바텀시트 view 후 홈으로 이동다시 첫 콘텐츠 이탈미노출(계정당 1회 소진)
L2바텀시트 view 후 추천 진입이후 이탈미노출
L3후보 0건으로 미노출이후 후보 확보된 이탈재시도 가능(이전에는 view가 없어 미소진)
L4view 직후 홈/추천 클릭 경합소진 1회만 멱등 처리

10. References

  • PRD: ./PRD.md
  • Figma / 디자인 기준: FirstEpisodeRecommend / FirstEpisodeRecommendAdult
  • 시각 산출물: ./spec-preview.html, ./screen-design.html
  • 비슷한 기존 기능: Newbie Recommendation(웰컴 스타 직후 1회성 진입 추천), 기존 성인인증 플로우
  • 관련 위키: Discovery 도메인, UL(Episode/Scene/Turn/Credit), 기존 성인 콘텐츠 노출 정책
  • Linear: DEE-336

⚠️ Fuzzy points

  • 성인인증 완료 후 선택 에피소드 프롤로그 플레이로 자동 복귀 가능한지는 기존 인증 플로우 구현 확인 필요.
  • 바로 프롤로그 플레이의 정확한 route/event 명칭은 기존 Play 라우팅과 맞춰야 한다.
  • event-docs 본 환경 미접근 — 추천/성인인증/프롤로그 플레이 이벤트 재사용 여부는 momo 세션 대조로 확정.
  • 이탈 인텐트 in-flow 예외 목록, 조회 타임아웃, 노출 마킹 저장 구조는 엔지니어 확정 영역.