AI 스토리의 치명적 결함
Claude API로 『오만과 편견』 인터랙티브 스토리 자동 생성했어요. 노드 43개짜리 방대한 스토리. 근데 문제가 하나 있었습니다.
엔딩이 3개뿐이었어요.
What If Classics 핵심 기능이 뭐냐면, 독자 선택 추적해서 MBTI 성격 유형 분석하는 거예요. 근데 엔딩 3개로 16가지 MBTI 유형 구분이 되겠어요? 안 되죠.
더 큰 문제는 스토리 구조였습니다. 갈라진 경로가 다시 합쳐지는 “수렴형 분기”였어요. 독자가 뭘 선택하든 결국 같은 길로 돌아오는 구조.
선택 A ──┐
├──→ 공통 경로 ──→ 엔딩
선택 B ──┘
이러면 선택이 의미 없잖아요.
왜 이렇게 됐지?
AI 프롬프트 다시 봤어요. “최소 8개 엔딩” 요청했는데 3개만 나왔네요.
원인 분석:
- 프롬프트가 애매했음 - “최소 8개”가 뭔 소리인지 AI가 명확히 이해 못 함
- 구조 제약 없었음 - “경로 합치지 마”를 명시 안 함
- 검증 단계 약했음 - 엔딩 개수만 세고 구조는 안 봄
프롬프트 전면 수정
완전히 다시 썼습니다:
prompt += """
CRITICAL REQUIREMENTS (절대적 요구사항):
- **최소 12개의 고유한 엔딩 (목표: 12-16개)** - 타협 불가
CRITICAL BRANCHING STRUCTURE (중요한 분기 구조):
- **경로 수렴 금지**: 한번 갈라진 경로는 절대 다시 안 합쳐짐
- **3막 필수 분기**: 스토리 후반부(마지막 30%)에서 3-4개 선택 지점
- **트리 구조**: 나무가 가지 뻗어나가듯, 안 합쳐지는 구조
"""
검증 로직도 강화:
if num_endings < 8:
issues.append(f"❌ 치명적: 엔딩이 {num_endings}개뿐 (최소: 8개, 목표: 12-16개)")
elif num_endings < 12:
warnings.append(f"엔딩이 {num_endings}개 (목표: 12-16개)")
새 『오만과 편견』
개선 결과:
이전:
- 43개 노드, 3개 엔딩
- 수렴형 분기
- MBTI 분석 불가
개선 후:
- 29개 노드, 12개 엔딩
- 비수렴형 트리 구조
- 각 엔딩마다 16개 MBTI 유형별 설명
주요 분기점 4개, 각각 3개씩 총 12개 고유 엔딩:
시작
├─ Path A (감정적 반응)
│ ├─ 엔딩 A1: 성장과 독립
│ ├─ 엔딩 A2: 후회와 화해
│ └─ 엔딩 A3: 적극적 구원
│
├─ Path B (분석적 관찰)
│ ├─ 엔딩 B1: 지적 동등함
│ ├─ 엔딩 B2: 학문적 독립
│ └─ 엔딩 B3: 이해에서 사랑으로
│
├─ Path C (내적 갈등)
│ └─ ... (3개 엔딩)
│
└─ Path D (회의적 탐구)
└─ ... (3개 엔딩)
AI 콘텐츠 생성 파이프라인
전체 스토리팩 자동 생성 시스템:
1단계: 스타일 가이드 생성
- Gemini 2.5 Flash로 시대별 비주얼 스타일 이미지 생성
- 『오만과 편견』은 영국 섭정시대 스타일
2단계: 캐릭터 레퍼런스
- 주요 캐릭터 초상화 (엘리자베스, 다시, 제인, 위컴)
- 각 캐릭터 2-2.2MB, 일관된 외모
3단계: 장면 일러스트
- 17개 장면 이미지 자동 생성
- 스타일 가이드+캐릭터 레퍼런스 참조해서 일관성 유지
- 각 이미지 ~2.3MB
4단계: 마크다운 파일
- 29개 노드별 마크다운 자동 생성
- 엔딩 노드엔 MBTI 성격 분석 UI 자동 삽입
전체 소요 시간: 약 23분
- 스타일 가이드: 2분
- 캐릭터 4개: 5분
- 장면 17개: 15분
- 마크다운 29개: 1분
기술적 이슈: 윈도우 인코딩
Windows 인코딩 문제로 시간 많이 날렸어요. 한국어 윈도우는 기본이 cp949인데 JSON이랑 Python은 UTF-8 쓰잖아요.
모든 파일 I/O에 UTF-8 명시:
# 콘솔 출력 인코딩 수정
if sys.platform == 'win32':
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
# 파일 읽기/쓰기 인코딩 수정
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
Python 스크립트 5개 다 고쳤어요.
배운 것들
1. AI 프롬프트는 구체적으로 “최소 8개”보다 “최소 12개, 목표 12-16개, 타협 불가”가 훨씬 먹힘
2. 구조 제약을 명시하라 “좋은 스토리 만들어줘”보다 “경로 수렴 금지, 트리 구조”가 훨씬 중요
3. 검증은 생성만큼 중요 AI 결과물 자동 검증 없으면 사람이 일일이 찾아야 함
4. 시각 일관성은 레퍼런스로 스타일 가이드+캐릭터 레퍼런스 쓰니까 17개 이미지가 다 일관됨
다음 단계
『오만과 편견』 스토리팩 배포 준비 끝.
개선된 생성기로 다른 고전들도 만들 겁니다:
- 『1984』 - 디스토피아 선택의 무게
- 『위대한 개츠비』 - 1920년대 사회적 선택
- 『변신』 - 실존적 딜레마
다음 편에서 계속…