Appearance
프론티아 글로벌 — 창작·발행 (스튜디오·어드민) PRD
글로벌 마켓에 콘텐츠를 채우는 발행·LLM 언어 분기 레이어. 에피소드·소울에 마켓·언어를 붙여 발행하고, LLM이 콘텐츠 언어에 맞게 생성하도록 프롬프트를 조립한다. 유저가 콘텐츠를 탐색·플레이하는 소비 쪽은 탐색·플레이 PRD, 마켓·언어 필드 정의·판정은 가입·온보딩 & 글로벌 토대 PRD 소관이다.
Status: draft Created: 2026-07-03 Last updated: 2026-07-06 대상 표면: 스튜디오 / 어드민 (플레이·채팅 런타임은 발행 결과물을 소비)
이 문서의 표기
- 마켓 코드: 콘텐츠 마켓 7개(NA·JP·KR·TW·LATAM·BR·ID). 마켓에 매핑되지 않은 나머지 국가(태국·베트남 등)는 NA로 매핑된다(별도 'ROW' 구분 없음). 마켓은 국가에서 매핑되는 콘텐츠 격리 단위이며 언어와 무관. 전체 정의는 가입·온보딩 & 글로벌 토대 PRD.
- 언어 코드: 콘텐츠 언어 7종(en·ja·ko·zh-Hant·es·pt·id). 콘텐츠 언어(에피소드·소울이 쓰인 언어)는 마켓과 독립이며 프롬프트·생성에만 쓴다. (UI 언어 8종은 별개로 UI 현지화 소관.)
- 마켓별 대표 언어: 각 마켓에 발행되는 콘텐츠의 기본 언어 — NA=en·JP=ja·KR=ko·TW=zh-Hant·LATAM=es·BR=pt·ID=id (1차엔 마켓:언어 1:1).
- 되돌리기 비용 등급(R): R1=쉬움(노출/UI) · R2=중간(재발행) · R3=비쌈(발행 정책 또는 스키마 재이전).
- 표시 약속:
검토 필요=아직 정해지지 않음(§7) ·후속=출시 후 디테일 패스.
Reversal Risk Summary
| 레이어 | R등급 | 점검 초점 |
|---|---|---|
| 정책 / 규칙 | R3 | 발행 마켓·언어를 본인 마켓으로 고정하고 발행 후 불변으로 두는 정책 · 콘텐츠 라이선스는 창작자 신뢰와 닿아 출시 후 되돌리기 비쌈 |
| 데이터 / 백엔드 | R2 | 발행 스냅샷에 마켓·언어 동반. 필드 정의·백필은 토대 PRD, 여기선 발행 시 쓰기·검증 |
| 유저 대면 화면 | R2 | 스튜디오 발행 시 마켓·언어는 본인 마켓으로 고정 표시(편집 UI 없음) |
| 문구 / 시각 표현 | R1 | 안내 문구는 UI 현지화 소관. 프롬프트 프레임 텍스트는 품질 영향 있어 R2 성격 |
1. 목표 및 배경
1.1 목표
- 프론티아 사용자 층을 넓히기 위해, 각 글로벌 마켓에 그 마켓 언어의 콘텐츠를 채운다. 이 PRD는 콘텐츠를 마켓·언어별로 발행하고, 플레이·채팅 시 LLM이 그 언어로 생성하게 만드는 부분을 맡는다.
1.2 배경 (현황)
- 프론티아 스튜디오는 한국 전용이다 — 에피소드·소울에 마켓·언어 개념이 없고(전원 한국·한국어), 씬 생성·채팅 시스템 프롬프트 틀이 한국어 단일이다.
- 글로벌 마켓을 채우려면 각 마켓에 그 마켓 언어의 콘텐츠가 있어야 하고, LLM이 콘텐츠 언어로 생성해야 한다. 지금은 그 수단이 전혀 없다.
- 콜드스타트 방식: 출시 초기 각 글로벌 마켓의 콘텐츠는, 운영팀이 그 마켓에 만든 계정으로 그 마켓 언어의 콘텐츠를 직접 작성·발행해 채운다. 이는 운영 작업이며 별도 제품 기능이 아니다 — 운영팀 계정도 일반 디렉터와 동일한 발행 경로를 쓴다.
1.3 접근
- 발행 마켓·언어 = 본인 마켓 고정: 발행 시 마켓은 발행자의 마켓, 언어는 그 마켓의 대표 언어로 자동 지정된다. 모든 유저 동일 — 마켓·언어를 고르는 UI가 없고, 서버가 본인 마켓으로 강제한다. 발행 자격 등급(내부/일반) 구분은 두지 않는다.
- 콘텐츠 모델: 에피소드·소울에 마켓 한 개 + 언어 한 개. 다른 마켓·언어의 콘텐츠는 그 마켓 계정에서 직접 작성·발행한다(원본-복제 추적 없음).
- LLM 프롬프트: 언어별로 프롬프트를 따로 두지 않고, 하나의 프롬프트 안에 언어 조건 블록을 둬서 조건에 따라 일부를 넣고 뺀다.
2. 타깃 사용자
2.1 주요 사용자
- 디렉터(발행자): 자기 마켓에 에피소드·소울을 발행하는 유저. 한국 유저는 현행 그대로 한국 마켓에, 비-KR 디렉터는 자기 마켓에 발행한다.
- 운영팀 마켓 계정: 콜드스타트를 위해 각 글로벌 마켓에 운영팀이 만든 그 마켓 계정. 그 마켓 언어로 콘텐츠를 직접 작성·발행한다(별도 권한 등급이 아니라 일반 디렉터와 같은 경로).
- (간접) 비-KR 플레이어·채팅 유저 — 발행된 언어 콘텐츠를 자기 언어로 생성·소비.
2.2 핵심 시나리오
- 운영팀 마켓 계정 발행(콜드스타트): 운영팀이 NA 마켓 계정으로 영어 에피소드를 작성 → 발행 시 마켓=NA·언어=en이 자동 고정(셀렉터 없음) → NA 유저에게 노출.
- 일반 자기마켓 발행: NA 디렉터가 영어 에피소드를 발행 → 마켓=NA·언어=en 자동 → 본인 스튜디오에서 소유·편집. (한국 유저는 동일 플로우로 한국 발행.)
- LLM 언어 생성: NA 플레이어가 영어 에피소드를 플레이 → 씬 생성·채팅이 영어 조건 블록이 적용된 프롬프트로 생성된다.
3. 핵심 기능 요구사항
3.1 발행 마켓·언어 지정 (본인 마켓 고정)
- 동작: 에피소드·소울 발행 시 마켓을 발행자의 마켓, 언어를 그 마켓의 대표 언어로 자동 지정한다. 마켓·언어를 고르는 UI는 없다.
- 비즈니스 룰:
- 마켓 = 본인 마켓(마켓에 매핑되지 않은 국가의 유저는 마켓이 NA). 서버가 발행 마켓을 본인 마켓으로 강제한다(클라가 보낸 마켓 값을 믿지 않음).
- 언어 = 그 마켓의 대표 언어로 자동(1차엔 마켓:언어 1:1 — NA=en·JP=ja·KR=ko·TW=zh-Hant·LATAM=es·BR=pt·ID=id). 스튜디오에서 언어를 바꾸는 UI는 없다.
- 모든 유저 동일 — 일반/내부 등 발행 자격 등급을 두지 않는다. 운영팀 마켓 계정도 자기 마켓에만 발행한다.
- 다른 마켓·언어의 콘텐츠는 그 마켓 계정에서 발행한다(콜드스타트 = 운영팀이 마켓별 계정으로 발행, §1.2).
3.2 발행 플로우 — 마켓·언어 확정
- 동작: Draft는 생성 시점부터 마켓·언어가 본인 마켓·그 대표 언어로 채워져 있다(빈 값 없음, 편집 UI 없음). 유저는 그대로 발행한다.
- 비즈니스 룰:
- 콘텐츠의 마켓·언어는 각각 한 개다. 언어는 프롬프트 분기에 쓰는 단일 필드이며 "콘텐츠 언어"라는 별도 저장값은 없다(그 텍스트가 쓰인 언어를 가리키는 개념). 값은 마켓 대표 언어로 자동 결정된다.
- 발행 시 마켓·언어 필수(기본값이 있어 "미지정" 상태 자체가 없음).
- 다른 마켓·다른 언어의 콘텐츠는 그 마켓 계정에서 새로 작성·발행한다 — 한 콘텐츠는 한 마켓에만 속한다. 원본-복제 추적(계보)은 두지 않는다.
- 발행 후 마켓·언어는 변경 불가(재발행 시에도 유지). 이미 발행된 콘텐츠의 마켓을 바꾸면 그걸 플레이하던 유저에게 노출이 끊기고, 언어를 바꾸면 진행 중인 모든 플레이의 생성 언어가 즉시 바뀌어 경험이 깨지기 때문이다. 서버가 발행본의 마켓·언어 수정을 거부한다.
- 마켓·언어 필드 정의·기존 한국 콘텐츠 백필은 토대 PRD 소관. 본 PRD는 발행 시점 입력·검증·스냅샷 쓰기만 한다. 백필값(KR·ko)도 위 불변 규칙을 동일하게 따른다.
- 스튜디오 입력 필드 글자수 제한 = 마켓 2등급: KR·JP·TW 마켓(ko·ja·zh-Hant)은 현행 한국어 제한과 동일, NA·LATAM·BR·ID 마켓(en·es·pt·id)은 현행 한국어 제한의 2.5배. 근거: 동일 의미 번역 시 en·es·pt·id 글자수는 최대 4.9x 팽창하나 Gemini 토큰 배율은 최대 1.5x로 LLM 컨텍스트 부담은 제한적이며, 2.5x 제한 시 토큰 소비는 한국어 대비 약 1x 수준.
3.3 스튜디오 콘텐츠 조회
- 동작: 스튜디오는 본인이 소유한 에피소드·소울만 보여준다. 모든 콘텐츠가 본인 마켓에 발행되므로 자연히 본인 마켓 콘텐츠만 보인다.
- 비즈니스 룰:
- 본인 소유 콘텐츠만 목록에 나온다. 남의 콘텐츠는 스튜디오에 안 보인다. 다른 디렉터의 콘텐츠를 대신 발행하는 기능은 없다.
- 서버가 조회 범위를 소유자로 제한한다. 이 필터는 디렉터 대면 조회에만 적용된다(플레이어 대면 탐색은 탐색·플레이 소관).
3.4 소울 발행
- 동작: 소울도 에피소드처럼 마켓·언어를 붙여 발행한다.
- 비즈니스 룰:
- 소울에 마켓 한 개 + 언어 한 개. 발행 시 언어 필수(페르소나·프롬프트 언어 결정), 마켓 = 본인 마켓 자동. 독립 채팅 소울도 마켓·언어를 갖는다(추천 조회에 떠야 하므로).
- 발행 후 소울 마켓·언어도 변경 불가(에피소드와 동일 — 언어는 프롬프트 분기에 직결).
- 캐릭터↔소울 동일 마켓 강제 제약은 두지 않는다(마켓 병합·미래 통합 유연성, 링크 적합성은 운영 품질로 관리).
- 소울 입력 필드 글자수 제한도 §3.2와 동일한 마켓 2등급 적용: KR·JP·TW 마켓은 현행 한국어 제한과 동일, NA·LATAM·BR·ID 마켓은 현행 한국어 제한의 2.5배.
3.5 시스템 프롬프트 언어 조건 블록
- 동작: 언어별로 프롬프트를 따로 관리하지 않는다. 하나의 프롬프트 안에 언어 조건 블록을 둬서, 조건이 맞으면 그 블록을 넣고 아니면 뺀다.
- 비즈니스 룰:
- 조건 기준 = 콘텐츠 언어(그 에피소드·소울이 쓰인 언어). 플레이·채팅이 콘텐츠 언어로 생성되므로 조건도 콘텐츠 언어로 평가한다(유저의 UI 표시 언어와는 별개 — 마켓이 NA인 유저(태국 등 매핑 없는 국가)는 UI가 자기 언어여도 NA 영어 콘텐츠를 플레이하므로 프롬프트는 영어 조건이 맞아야 한다).
- 매칭되는 언어 조건이 없으면 조건 블록 없이 기본 프롬프트만 적용한다(생성 중단 없음).
- 관리 = 현행 어드민 프롬프트 관리에서 한다. 프롬프트에 언어 조건 블록을 추가·검수한다.
- 소비 경계: 프롬프트 프레임 작성·관리는 어드민이 소유하고, 플레이·채팅 런타임은 조건을 평가해 최종 프롬프트를 조립·소비만 한다(중복 정의 금지). UI 현지화 PRD는 화면 텍스트만 다룬다(프롬프트 프레임 제외).
- ⏭️ 조건 블록 데이터 구조·평가 위치 디테일은 개발 담당자와 논의.
3.6 발행 스냅샷 · 콘텐츠 라이선스
- 발행 스냅샷: 발행 시 frozen 스냅샷에 마켓·언어를 동반 저장한다. 현행 발행 처리(동시 발행 잠금, draft→발행 단방향)는 유지하고 마켓·언어 쓰기만 추가한다. 필드 스키마 정의·기존 한국 백필은 토대 PRD 소관.
- 콘텐츠 라이선스: 실제 이용약관(제12조④)이 전 회원으로부터 비독점·전세계·2차적저작물작성(=번역) 포함 라이선스를 이미 부여받았다 → 발행·현지화·마켓별 발행에 신규 동의 불요. 약관에 "번역·현지화·해외 다국가 발행" 명시 보강은 정책 트랙.
3.7 Scope
포함 (In scope)
- 발행 마켓·언어 = 본인 마켓 고정·대표 언어 자동(전원 동일, 셀렉터 없음, 서버 강제).
- 발행 시 마켓·언어(각 한 개) 필수 검증·스냅샷 쓰기, 발행 후 불변 강제.
- 스튜디오 콘텐츠 조회(본인 소유·자연히 본인 마켓).
- 시스템 프롬프트 언어 조건 블록(관리) + 플레이·채팅 소비 경계.
제외 (Out of scope) — 인접 문서 경계
| 항목 | 소관 |
|---|---|
| 에피소드/소울 마켓·언어 필드 정의·스키마·기존 한국 백필 | 가입·온보딩 & 글로벌 토대 |
| 탐색·발견 필터·딥링크 접근 차단·플레이/채팅 생성 런타임 | 탐색·플레이 |
| 발행 콘텐츠 정산 계산·지급 | 결제·정산 |
| 안내 문구 번역 | UI 현지화 |
| 타·복수 마켓 발행, 스튜디오 복제 기능, 발행 자격 등급(파트너 등), 국가별 프롬프트 톤·안전 튜닝 | 2차 |
4. 에러 처리 및 예외 상황
| 상황 | 처리 방향 |
|---|---|
| 유저가 다른 마켓 발행 요청(클라 우회) | 서버 권한 검증으로 거부(본인 마켓 강제) |
| 발행된 콘텐츠의 마켓·언어 변경 시도 | 거부 — 발행 후 불변(다른 마켓·언어는 그 마켓 계정에서 새로 발행) |
| 유저가 다른 소유자·마켓 콘텐츠 스튜디오 조회(클라 우회) | 서버가 조회 범위를 소유자로 제한 |
| 발행 시 마켓/언어 미선택 | 기본값이 있어 발생 안 함. 소울 언어 미지정 시 발행 차단 |
| 콘텐츠 언어에 맞는 조건 블록 없음 | 기본 프롬프트만 적용(생성 중단 없음) |
| 캐릭터에 다른 마켓 소울 링크 | 허용(강제 제약 없음) — 운영 품질로 관리 |
5. 데이터 분석
- 1차엔 발행 관련 로깅 이벤트를 별도로 추가하지 않는다. 마켓별 발행 현황은 발행 스냅샷의 마켓·언어 집계로 확인한다.
- 필요 속성 규칙(
episode_market·episode_language·soul_*)의 원본은 토대 PRD.
6. Ubiquitous Language
마켓·언어 용어는 토대 PRD 용어표가 기준이다. 본 PRD 고유 용어(마켓별 대표 언어=§표기, 언어 조건 블록=§3.5)는 해당 위치에서 정의했으므로 별도 표를 두지 않는다.
7. 검토 필요 (미결정 항목)
- [ ] 프롬프트 언어 조건 블록 데이터 구조 — 조건 표현·평가 위치. (담당: 엔지니어)
- [ ] 여러 언어 소울의 '영혼' 그룹핑 표시 — 같은 캐릭터의 언어별 소울을 하나의 정체성으로 묶어 보여주는 방안. 1차 미도입, 백엔드와 모델링 논의만. (담당: 엔지니어/PM, 2차)
외부 grounding 필요 (구현 시 코드/데이터에서 확인)
- 현행 발행 처리(발행 잠금·스냅샷) 필드명, 프롬프트 초안 스키마, 소울 설정·발행 스냅샷 필드명 — 백엔드 설계 소관.
부록: 메타 정보
Required artifacts
- Spec — 별도 화면 spec 없음(발행·게이팅은 룰 우선). 화면 디테일은 디자인 단계.
- Design — 스튜디오 발행 시 마켓·언어는 본인 마켓으로 고정된 읽기 표시(편집 UI 없음) → 신규 유저 대면 화면 거의 없음. 어드민 프롬프트 관리(언어 조건 블록)는 백엔드가 요구사항 보고 직접 구현.
- Migration plan — 본문 §3.6에 포함(발행 스냅샷 마켓·언어 쓰기, 프롬프트 관리 개편). 별도 파일 아님.
Size & Risks
- Size: M / Confidence: medium — LLM 프롬프트 조건 블록이 플레이·채팅을 관통하는 것이 핵심. 발행은 본인 마켓 고정으로 단순. 타·복수 마켓 발행·복제·발행 자격 등급은 범위 밖(2차).
- 위험: ①프롬프트 분기 소유 경계 모호 → 본 PRD가 관리 단일 소유, 플레이·채팅은 소비만 ②발행 후 마켓·언어 불변 강제 누락 시 진행 중 플레이 경험 붕괴 → 서버 거부.
- 의존: 가입·온보딩 & 글로벌 토대(마켓·언어 필드·백필, 선행). UI 현지화(프롬프트 프레임 번역, 병렬). 소비처: 탐색·플레이(콘텐츠 마켓·언어·프롬프트), 결제·정산(발행 콘텐츠 정산 귀속).
References
- 코드/위키 근거(As-is): Studio 에피소드 인트로·발행 스냅샷·발행 잠금, 소울 발행 시 메타·설정 분리·캐릭터→소울 링크·어드민 소울 endpoint, 프롬프트 초안 관리 — frontia-wiki episode-authoring/episode-content/soul capabilities. 콘텐츠 라이선스 = 이용약관 제12조④.
- 결정 로그 원문: CLAUDE.md §8.