Appearance
이식 기능 PRD
Release date: 03/19/2026 Status: Released created: March 12, 2026 5:35 PM 앱/웹/스튜디오: 스튜디오
1. 목표 및 배경
목표
타 캐릭터챗 서비스(크랙, 캐릭터AI 등)에서 작품을 운영하던 디렉터가 프론티아로 작품을 이전할 때의 진입 장벽을 최소화한다. 기존에 작성한 통 프롬프트를 붙여넣으면 LLM이 자동으로 파싱하여 프론티아 에피소드 초안을 생성해주는 "딸-깍 임포트" 기능을 제공한다.
배경
프론티아로의 디렉터 유입을 늘리기 위해 크랙 등 타 플랫폼 디렉터의 전환을 적극 유도하고 있다. 그러나 기존 디렉터들이 이미 공들여 작성한 프롬프트(세계관, 캐릭터, 상태값, 이미지 규칙 등)를 프론티아 형식에 맞춰 일일이 재입력하는 것은 큰 전환 비용이 된다. 이 전환 비용을 줄여야 디렉터 이탈 없이 온보딩할 수 있다.
핵심 가설
기존 프롬프트를 붙여넣기만 하면 에피소드 초안이 자동 생성되면, 디렉터의 프론티아 작품 등록 전환율이 유의미하게 높아질 것이다.
2. 타깃 사용자
Primary: 타 캐릭터챗 플랫폼 디렉터 (크리에이터)
- 크랙 등에서 이미 통 프롬프트를 작성해본 경험이 있는 사용자
- 세계관, 캐릭터 설정, 상태값 시스템, 이미지 출력 규칙 등이 포함된 프롬프트를 보유
- 프론티아로 플랫폼을 이전하거나 여러 플랫폼을 동시에 운영하려는 의사가 있는 사용자
Secondary: 프론티아 기존 디렉터
- 다른 곳에서 프롬프트를 먼저 작성한 뒤 프론티아에 등록하려는 기존 디렉터
3. 핵심 기능 요구사항 및 사용자 플로우
3.1 전체 사용자 플로우
Step 1. 진입
- 프론티아 스튜디오에서 [+새 에피소드] 버튼 클릭
- 팝업 표시: "새로운 에피소드를 만들까요?"
- 선택지: [새로 만들기] / [이미 작성된 프롬프트가 있어요]
- [새로 만들기] → 기존 에피소드 생성 플로우 (변경 없음)
- [이미 작성된 프롬프트가 있어요] → Step 2로 진행
Step 2. 제목, 프롬프트, 프롤로그 입력
- 안내 문구: "기존에 사용하시던 프롬프트를 붙여넣어 주세요. 프론티아가 자동으로 분석해서 초안을 만들어 드릴게요."
- 제목(필수): 최대 20글자
- 프롬프트(필수): 텍스트 입력 화면 표시. 최소 500자, 최대 7,000자
- 대용량 텍스트 입력이 가능한 텍스트 에어리어 제공
- 프롤로그(선택): 최대 4,000자
- [초안 만들기] 버튼 클릭 → Step 3으로 진행
Step 3. LLM 파싱 (로딩)
- 로딩 화면 표시: "프롬프트를 분석하고 있어요..."
- 백엔드에서 Gemini Flash + 파싱 시스템 프롬프트를 사용하여 통 프롬프트를 JSON으로 변환
- 파싱 결과 JSON 구조: system info, character info, status value (player/character), images, 삭제
- 파싱 완료 시 Step 4로 진행
- 파싱 실패/부분 실패 시에도 가능한 만큼의 결과를 보여주고 Step 4로 진행
- Step3 완료 시점 = 에피소드 생성 시점
- Step3(파싱)까지 완료되고 이탈하는 경우에도 에피소드가 생성되어 있음
Step 4. 초안 확인 및 수정
- 파싱된 결과를 프론티아 에피소드 필드에 매핑하여 초안 확인/수정 UI 표시
- 수정 가능한 항목: 세계관(system info), 캐릭터 정보(character info), 상태값 — 플레이어(player status), 상태값 — 캐릭터(character status), 캐릭터 이미지 이름 및 status1/status2
- 각 항목은 텍스트 편집이 가능한 형태로 제공
- 파싱이 부분적으로만 성공한 경우, 빈 필드로 표시하여 유저가 직접 채울 수 있도록 함
- 만약 각 컴포넌트의 최대 글자 수를 넘어선 경우, 다 넣어주고 글자 수를 줄여달라고 안내 (글자수 초과됐다는 것을 알려주는 에러알림 필요)
- 상태값 혹은 캐릭터 상태(status1, status2) 등 입력 가능한 개수를 넘어간 경우 저장이 안되며 저장이 안되는 컴포넌트를 따로 표시해서 알려줌. 저장이 안되는 컴포넌트는 수정 불가. 참고만 가능하며, 저장된 컴포넌트에 수정하도록 유도
- [확인] 버튼 클릭 → Step 5로 진행
Step 5. 이미지 타입 선택
- "캐릭터 이미지를 어떤 형태로 연출할까요?" 팝업 표시
- 선택지: [가로형] / [세로형]
- 이미지 예시(캐릭터 연출 방법에 있는거)도 같이 보여줌
- 각 선택에 맞는 캐릭터 이미지 연출방법과 플레이 뷰로 기본 설정해준다는 안내
- 선택한 값이 해당 에피소드의 캐릭터 이미지 연출법 default 값으로 설정됨
- 가로형: 가로형 이미지(캐릭터 연출 방법), 스크롤 뷰(스크롤 뷰 추가 되기 전까진 페이지 뷰)
- 세로형: 세로형 이미지(캐릭터 연출 방법), 페이지 뷰
Step 6. 에피소드 수정 페이지 진입
- 이미지 타입 선택 완료 → 바로 에피소드 수정 페이지로 진입
- 초안 데이터가 각 필드에 pre-fill 된 상태로 에디터 열림
- 디렉터는 여기서 추가 수정/보완 후 저장
3.2 파싱 결과 → 프론티아 에피소드 필드 매핑
| 파싱 JSON 필드 | 프론티아 에피소드 필드 | 비고 |
|---|---|---|
| system info | 시스템 프롬프트 (세계관/지침) | 세계관, 응답 규칙, 톤앤매너 등 |
| character info[].name | 캐릭터 이름 | 캐릭터별 개별 생성 |
| character info[].info | 캐릭터 설정 (프로필) | 성격, 말투, 배경 등 |
| status value.player status | 플레이어 상태값 | name, change rule, initial value |
| status value.character status | 캐릭터 상태값 | name, change rule, initial value |
| images.character images.name | 캐릭터 이미지 이름 목록 | |
| images.character images.status1 | 캐릭터 이미지 상태1 목록 | |
| images.character images.status2 | 캐릭터 이미지 상태2 목록 | optional |
| images.situation images | 상황 이미지 목록 | |
| images.background images | 배경 이미지 목록 | |
| 삭제 | — | 매핑하지 않음 (이미지 출력 규칙, INFO 상태창 형식 등) |
⚠️ 매핑 상세 스펙은 백엔드 개발 시 확정 필요. 프론티아 에피소드 데이터 모델에 맞춰 필드 매핑 테이블을 최종 확정한다.
4. 기술 요구사항 및 성능 지표
4.1 LLM 파싱 시스템
- 사용 모델: Gemini 3 Flash
- Temperature: 0.55
- 시스템 프롬프트: 딸-깍 임포트 문서에 정의된 파싱 프롬프트 사용 (세계관/캐릭터/상태값/이미지/삭제 분류)
- 출력 포맷: JSON (system info, character info, status value, images, 삭제)
- 참고 문서: 딸-깍 임포트
4.2 백엔드 요구사항
- 파싱 API 엔드포인트: 통 프롬프트 텍스트를 받아 파싱된 JSON 반환
- 에피소드 생성 API: 파싱된 JSON을 프론티아 에피소드 필드에 매핑하여 에피소드 초안 생성
- 이미지 타입(가로/세로) 저장: 에피소드 캐릭터 이미지 연출법 default 값으로 저장
4.3 비용
- Gemini Flash API 호출 비용 (1회 파싱당 input/output 토큰 비용)
- 향후 LLM 외 경량 파싱 모델로 전환 가능성 검토 (비용 최적화)
5. 에러 처리 및 예외 상황
5.1 파싱 실패/부분 실패
- 파싱이 완전히 실패한 경우 (JSON 생성 불가): "프롬프트를 분석하지 못했어요. 내용을 확인하고 다시 시도해 주세요." 에러 메시지 + 입력 화면으로 복귀
- 파싱이 부분적으로만 성공한 경우: 파싱된 항목만 채워서 초안 확인 UI 표시. 빈 필드는 유저가 직접 입력 가능. 상단에 "일부 항목을 자동으로 채우지 못했어요. 직접 확인하고 수정해 주세요." 안내 표시
5.2 입력 관련 예외
- 빈 텍스트로 제출 시: [초안 만들기] 버튼 비활성화
- 입력 최소/최대 글자 수
- 최소: 50초0자
- 최대: 7,000자
6. 데이터 분석
6.1 로깅 이벤트
| 이벤트 명 | 트리거 시점 | 수집 속성 |
|---|---|---|
| view_new_episode | [+새 에피소드] 클릭 시 팝업 노출 | — |
| click_episode_import_mode | [이미 작성된 프롬프트가 있어요] 클릭 | — |
| click_new_episode_mode | [새로 만들기] 클릭 | episode_id |
| click_import_episode | [초안 만들기] 클릭 | — |
| import_parsing_completed | 파싱 완료 시 | episode_id |
| click_confirm_import_draft | 초안 확인 후 [확인] 클릭 | episode_id |