Appearance
프론티아 글로벌 — 탐색·플레이 (콘텐츠 소비) PRD
글로벌 유저가 앱·웹에서 콘텐츠를 찾고·열고·플레이하고·알림을 받는 소비 경험을 다룬다. 유저가 자기 마켓·언어에 맞는 콘텐츠만 자연스럽게 만나고, 안 맞는 콘텐츠는 어느 경로로도 닿지 않게 한다. 운영자가 콘텐츠를 큐레이션·공지·발송하는 어드민 쪽은 운영·어드민 PRD, 마켓·언어 판정 로직 자체는 가입·온보딩 & 글로벌 토대 PRD 소관이다.
Status: draft Created: 2026-07-03 Last updated: 2026-07-03 대상 표면: 앱 / 웹
이 문서의 표기
- 마켓 코드: 콘텐츠 마켓 7개(NA·JP·KR·TW·LATAM·BR·ID). 마켓에 매핑되지 않은 나머지 국가(태국·베트남 등)는 NA로 매핑된다(별도 'ROW' 구분 없음). 마켓은 국가에서 매핑되는 콘텐츠 격리 단위이며 언어와 무관. 전체 정의는 가입·온보딩 & 글로벌 토대 PRD.
- 언어 코드: UI 언어 8종(ko·en·ja·zh-Hant·es·pt·id·th, 기기/브라우저 디폴트+유저 변경·마켓과 무관) / 콘텐츠 언어 7종(en·ja·ko·zh-Hant·es·pt·id, 에피소드별). 둘은 별개.
- 노출 규칙(이 문서 전체의 기준): 유저는 자기 마켓 콘텐츠만 본다. (마켓에 매핑되지 않은 국가의 유저는 마켓이 NA라 자연히 NA 콘텐츠를 본다 — 별도 예외 아님. 유저/콘텐츠 마켓·언어의 정의·판정은 토대 PRD.)
- 마켓 하드 게이트: 마켓을 성인 콘텐츠와 똑같이 다룬다 — 탐색뿐 아니라 상세·딥링크·공유·플레이 등 콘텐츠를 소비하는 모든 경로에서 마켓 안 맞는 콘텐츠를 막는다.
- 표시 약속:
검토 필요=아직 정해지지 않음(§7) ·후속=출시 후 디테일 패스.
Reversal Risk Summary
| 레이어 | R등급 | 점검 초점 |
|---|---|---|
| 정책 / 규칙 | R2 | 마켓 간 노출 분리·딥링크 포함 모든 경로 접근 차단은 규제·경험과 닿아 출시 전 고정. 필터 로직 자체는 토대 PRD가 정의 |
| 데이터 / 백엔드 | R2 | 모든 탐색·알림 조회에 마켓 조건을 빠짐없이 얹는 범위 관리 |
| 유저 대면 화면 | R1~R2 | 기존 화면에 필터만 얹음(R1). 단 다른 마켓 접근 시 차단·안내 화면은 신규(R2, 디자인 필요) |
| 문구 / 시각 표현 | R1 | 차단 안내·빈 피드 문구는 언어별 리소스(UI 현지화)라 조정 쉬움 |
1. 목표 및 배경
1.1 목표
- 글로벌 유저가 자기 마켓·언어에 맞는 콘텐츠만 자연스럽게 탐색·플레이하게 해, 각 마켓 진입 유저의 첫 경험을 한국 수준으로 유지한다. 일본 유저가 검색에서 한국어 제목을 보거나, 다른 마켓 콘텐츠를 플레이하다 깨지는 일이 없게 한다.
1.2 배경 (현황)
- 프론티아는 지금 탐색·발견(홈·검색·랭킹·신작·큐레이션…)·플레이·프로필·알림이 전부 하나의 한국 풀 기준으로 동작한다. 마켓 구분이 0건이라, 그대로 글로벌에 열면 마켓이 섞여 노출된다.
- 성인 콘텐츠는 이미 "모든 경로에서 막는" 하드 게이트를 쓰고 있다 — 마켓도 같은 방식으로 태우면 격리가 일관된다.
1.3 접근
- 토대 PRD의 공용 마켓 필터를 탐색·발견 전 화면에 얹는다(중복 구현 없이 가져다 씀).
- 에피소드·소울은 성인 콘텐츠처럼 상세·딥링크·플레이 등 모든 소비 경로에서 하드 게이트한다(예외 없음).
- 프로필(사람)도 콘텐츠처럼 마켓 하드 게이트한다 — 다른 마켓 유저의 프로필은 검색뿐 아니라 디렉터 링크·댓글 작성자·딥링크·팔로워 목록 등 모든 도달 경로에서 막는다.
- 콘텐츠·프로필이 막혔을 때는 "볼 수 없음" 안내 화면을 보여준다(성인 콘텐츠 차단과 같은 패턴).
- 공지·알림은 자기 마켓·언어 것만 받게 한다.
2. 타깃 사용자
2.1 주요 사용자
- 글로벌 일반 유저(앱·웹) — 홈/검색/랭킹/플레이/프로필/알림을 자기 마켓 기준으로 소비.
2.2 핵심 시나리오
- NA 유저가 홈/검색/랭킹에서 NA(영어) 에피소드만 본다. 한국·일본·대만 콘텐츠는 탐색에 안 뜬다.
- NA 유저가 일본 친구의 공유 딥링크를 눌러도 그 일본 에피소드는 자기 마켓과 안 맞아 막혀서 열리지 않는다(성인 콘텐츠를 막을 때와 같은 안내 화면).
- NA 유저가 링크로 한국 디렉터 프로필에 도달하면 그 프로필은 자기 마켓과 안 맞아 막혀서 열리지 않는다("볼 수 없음" 안내 화면 — 콘텐츠 차단과 같은 패턴).
- 일본 유저는 알림센터 "프론티아 소식"에서 일본 마켓·일본어 공지만 본다.
3. 핵심 기능 요구사항
3.1 탐색·발견 마켓 필터
- 동작: 유저는 자기 마켓에 맞는 콘텐츠만 탐색·추천 화면에서 본다.
- 적용 화면(전수): 홈 추천/랭킹/신작, 검색, 홈 장르칩, 띠 배너/메인 배너, 큐레이션 섹션/오가닉 셀렉트, 세그먼트 큐레이션, 팝업, 댓글 카드 큐레이션, 로그인 화면 콘텐츠, 신규 유저 추천, 첫 콘텐츠 이탈 회복 추천, 추천 대체값.
- 비즈니스 룰:
- 노출 기준 = 유저 마켓. 콘텐츠는 자기 마켓이 유저 마켓과 맞을 때만 보인다.
- 마켓 간 교차 노출 없음 — 한국 에피소드는 NA 피드에 안 뜬다. 마켓 콘텐츠가 부족하면 빈 피드를 허용한다(교차로 채우지 않음, 운영으로 채움).
- 차단·삭제·링크 전용 콘텐츠가 탐색 후보에서 빠지는 것은 기존 동작 그대로다. 마켓 필터는 그 위에 얹히는 새 레이어 — 기존 제외를 적용한 뒤 남은 후보에 마켓 필터를 건다.
- 마켓 필터는 토대 PRD의 공용 마켓 필터를 가져다 쓴다(중복 구현 금지). 본 PRD는 어느 조회·화면에 적용하는지만 정의한다.
- 세그먼트 큐레이션도 다른 큐레이션과 동일하게 노출 대상 마켓으로 상위에서 거른다 — 세그먼트 조건 자체에 마켓을 넣지 않는다(노출 대상 마켓 설정은 운영·어드민 소관).
- 비로그인 노출: 앱=스토어 국가, 웹=IP로 마켓을 즉석 판정(매핑 없거나 판정 실패 시 NA). 이 값은 노출용일 뿐 유저에 고정되지 않는다(고정은 가입 시, 토대 PRD). 프롤로그 미리보기도 같은 판정을 받는다.
3.2 콘텐츠 하드 접근 게이트 (모든 소비 경로)
- 동작: 공유링크·딥링크·상세 직접 조회·플레이 진입 등 유저가 콘텐츠를 소비하는 모든 경로에서, 자기 마켓과 안 맞는 에피소드·소울을 막는다.
- 비즈니스 룰:
- 성인 콘텐츠를 막는 것과 같은 지점에서 판정한다 — 단건 조회(딥링크·플레이 진입)와 목록·검색·추천 쿼리 양쪽.
- 소유자·성인 인증도 예외 없음 — 마켓 체크가 소유자 체크보다 앞선다(성인 게이트가 소유자를 예외로 안 두는 것과 동일). 크로스마켓 공유 딥링크는 막힌다.
- 링크 전용 공개(탐색엔 안 뜨고 링크로만 접근하는 상태)는 같은 마켓 딥링크만 허용한다.
- 소비 경로엔 마켓 예외가 없다 — 누구든 앱/웹 소비(홈·검색·상세·딥링크·플레이·본인 "내 에피소드" 조회 포함)에서는 자기 마켓만 보고 접근한다. 전 마켓 접근은 소비 경로가 아니라 **어드민(운영·어드민)**에만 있다.
- 차단·안내 화면(신규): 다른 마켓 콘텐츠에 딥링크·공유로 도달했을 때 보여줄 "볼 수 없음" 안내 화면이 필요하다. 성인 콘텐츠 차단 화면과 같은 자리라 그 패턴을 재사용·응용한다. 새 유저 대면 화면이라 디자인(Figma) 필요. 프로필 차단(§3.3)도 같은 안내 화면을 쓴다.
3.3 프로필·유저 노출 (마켓 하드 게이트)
사람(프로필)도 콘텐츠와 같은 방식으로 다룬다 — 다른 마켓 유저의 프로필은 모든 도달 경로에서 막는다.
- 동작:
- 프로필(사람)은 자기 마켓 유저만 볼 수 있다 — 콘텐츠의 디렉터 링크, 댓글 작성자, 프로필 딥링크, 팔로워/팔로잉 목록 어디로 들어가든 다른 마켓 유저의 프로필은 열리지 않고 "볼 수 없음" 안내 화면(§3.2와 같은 화면)이 뜬다.
- 검색·추천에서도 다른 마켓 유저는 나오지 않는다(노출 자체가 없음).
- 팔로워/팔로잉 목록에서도 다른 마켓 유저는 걸러진다 → 크로스마켓으로 이어진 관계라도 목록에 안 나온다.
- 비즈니스 룰:
- 강제 지점 = 콘텐츠 하드 게이트와 동일하게, 단건 프로필 조회와 목록·검색 조회 양쪽에서 유저 마켓 기준으로 거른다.
- 사람을 발견·추천·랭킹하는 별도 표면은 없다(콘텐츠 랭킹만 존재) → 필터가 필요한 곳은 프로필 단건 조회 + 목록(팔로워/팔로잉·검색)뿐이다.
- 본인 프로필은 본인이 항상 볼 수 있다(자기 마켓이라 자연 통과).
- 함의: 내가 보는 에피소드의 디렉터 프로필은 항상 열린다(그 에피소드가 내 마켓 대상이라 디렉터도 같은 마켓). 유저 셀프 마켓 변경을 여는 2차에 프로필 필터 완화 여부를 재검토한다(§7).
3.4 공지·알림 소비
- 동작: 유저는 알림센터 "프론티아 소식"에서 자기 마켓·언어 공지만 본다.
- 비즈니스 룰:
- 공지는 노출 대상 마켓·언어를 가지며, 유저 마켓·언어와 맞을 때만 보인다(공지 작성은 운영·어드민 소관).
- 활동 알림(댓글/좋아요/팔로우/디렉터 신작)은 연결된 에피소드의 마켓을 물려받으므로 별도 필터가 필요 없다.
- 알림센터 합치기·읽음 처리·안 읽음 표시는 기존 그대로, 노출 후보에만 마켓 필터를 얹는다.
3.5 플레이·채팅 생성 언어 (소비)
- 동작: 에피소드 플레이(씬 생성·선택지·유저 노트)와 캐릭터 채팅은 콘텐츠 언어에 맞춰 생성된다 — 영어 에피소드는 영어로, 일본어는 일본어로.
- 경계: 생성에 쓰는 시스템 프롬프트 프레임(언어 조건 블록)의 작성·관리는 창작·발행 PRD 소관이다. 본 PRD는 플레이·채팅 런타임이 그 프레임을 콘텐츠 언어 기준으로 소비한다는 점만 명시한다(중복 정의 금지).
3.6 딥링크 / 주소(URL)
- 딥링크 경로·주소 구조는 새로 없다(기존 재사용). 단 접근 판정이 바뀐다 — 다른 마켓 콘텐츠 딥링크는 자기 마켓과 안 맞으면 막는다(§3.2). 앱 미설치 시 대체 동작은 기존 정책 유지.
- 비로그인 딥링크·미리보기 접근: 앱=스토어 국가, 웹=IP로 판정한 마켓으로 차단 판정(매핑 없거나 판정 실패 시 NA). 노출 판정용이며 유저 마켓 고정은 아니다.
3.7 Scope
포함 (In scope)
- 탐색·발견 화면 전체(앱·웹) 마켓 노출 필터(토대 공용 로직 사용).
- 콘텐츠(에피소드·소울) 하드 접근 게이트 + "볼 수 없음" 안내 화면(신규 디자인).
- 프로필·유저 마켓 하드 게이트(단건 조회·검색·팔로워 목록 전수) + 같은 안내 화면 재사용.
- 공지·알림 소비 마켓·언어 필터 + 활동알림 마켓 물려받기.
제외 (Out of scope) — 인접 문서 경계
| 항목 | 소관 |
|---|---|
| 마켓 필터·하루 경계·언어 판정 로직 자체, 유저/콘텐츠 마켓·언어 정의 | 가입·온보딩 & 글로벌 토대 |
| 시스템 프롬프트 프레임(언어 조건 블록) 작성·관리 | 창작·발행 |
| 큐레이션·화면 관리·공지 작성·팝업·푸시 발송 등 어드민 도구 | 운영·어드민 |
| 차단·안내 화면 문구 번역 | UI 현지화 |
| 마켓 전체 켜기/끄기·전체 차단 스위치 | 1차 미도입 |
| 프로필 마켓 노출 완화(유저 셀프 마켓 변경과 함께) | 2차 |
4. 에러 처리 및 예외 상황
| 상황 | 처리 방향 |
|---|---|
| 마켓 콘텐츠 없음(빈 피드) | 교차 노출 금지 — 빈 상태 안내, 운영으로 채움 |
| 다른 마켓 딥링크 진입 | 차단·안내(성인 콘텐츠 차단과 같은 지점, 예외 없음). 차단 화면은 신규 디자인 |
| 링크 전용 콘텐츠의 크로스마켓 딥링크 | 같은 마켓 딥링크만 허용, 그 외 차단 |
| 다른 마켓 유저 프로필 도달 | 차단·"볼 수 없음" 안내(콘텐츠 차단과 같은 화면). 팔로워/팔로잉 목록에서도 제외 |
5. 데이터 분석
- 기존 탐색·플레이·알림 이벤트에 마켓/언어 속성을 추가만 한다(새 이벤트 최소화). 유저 공통 속성
user_market·user_language·user_country, 콘텐츠 실린 이벤트엔episode_market·episode_language(또는soul_*). 속성 규칙 원본은 토대 PRD. 후속: event-docs.frontia.dev에서 탐색·알림 기존 이벤트명·그룹 확인 후 속성 추가 대상 확정.
6. Ubiquitous Language
마켓·언어 용어는 전부 토대 PRD 용어표가 기준이다. 본 PRD 고유 신규 용어는 없다(마켓 하드 게이트·링크 전용 공개는 §3에서 동작으로 정의).
7. 검토 필요 (미결정 항목)
열린 결정 없음. 프로필 마켓 노출 완화는 2차로 연기(§3.7 제외 표), 세그먼트 큐레이션은 노출 대상 마켓 상위 필터로 확정(§3.1).
외부 grounding 필요 (구현 시 코드/데이터에서 확인)
- 마켓·성인 하드 게이트가 걸리는 단건 조회·목록 조회 지점을 코드에서 확인(같은 지점에 마켓 조건 삽입).
- event-docs 탐색·알림 기존 이벤트 목록(속성 추가 대상).
부록: 메타 정보
Required artifacts
- Spec — N/A. 대부분 기존 화면에 필터를 얹는 것.
- Design — 예외 1건: 다른 마켓 콘텐츠·프로필 접근 시 "볼 수 없음" 안내 화면은 신규 유저 대면 화면이라 Figma 필요(성인 차단 화면 패턴 재사용, 콘텐츠·프로필 공용). 그 외 피드는 기존 화면에 필터만 얹음.
- Migration plan — 본문 §3에 포함(조회에 마켓 조건 추가). 별도 파일 아님.
Size & Risks
- Size: L / Confidence: medium — 영향 화면 다수(탐색·발견 14개+, 플레이, 프로필, 알림). 화면당 난도는 낮으나 빠짐없이 마켓 필터를 적용하는 범위가 관리 포인트.
- 위험: ①마켓 필터 누락 화면 → 잘못된 노출(대응: 토대 공용 로직 한 곳만 거치게, 화면 체크리스트) ②하드 게이트가 스튜디오·어드민 관리 화면까지 막음(대응: 그 화면은 소비 경로 아님을 명시, 게이트 비대상 테스트).
- 의존: 가입·온보딩 & 글로벌 토대(마켓 필터·유효 노출 규칙, 선행). 창작·발행(콘텐츠 마켓·언어, 프롬프트 프레임). UI 현지화(차단 안내·빈 피드 문구).
References
- 코드/위키 근거(As-is): 탐색·발견 영역이 하나의 풀(마켓 구분 0), 성인 콘텐츠 하드 게이트 존재, 링크 전용 공개 상태 존재 — frontia-wiki discovery/notification/social-community capabilities.
- 결정 로그 원문: CLAUDE.md §8.