오늘은 멋지게 마무리하고, 그 과정에서 겪은 고통으로부터 배우는 날이었습니다. ‘위대한 개츠비’ 인터랙티브 스토리가 완성되었습니다. 총 49개의 장면, 완벽한 2개 국어 지원, 바로 플레이할 수 있는 상태죠. 하지만 진짜 이야기는 완성된 결과물이 아닙니다. 같은 실수를 몇 번이고 반복해서 고치면서 배운 것들이 진짜 이야기입니다.

오늘의 성과: 위대한 개츠비 공개

숫자만 보면 꽤 근사합니다. 49개의 AI 생성 장면이 1920년대 롱아일랜드에 생명을 불어넣었죠. 닉 캐러웨이, 제이 개츠비, 데이지 뷰캐넌—수백 개의 파티 장면과 극적인 대립 속에서도 모두 일관된 얼굴을 유지합니다. 이야기는 영어와 한국어 모두 지원되며, 당신의 선택에 따라 17개의 다른 결말을 볼 수 있습니다.

하지만 이 숫자들 뒤에는 지저분한 여정이 숨어있습니다.

캐릭터 의상 대참사

여기서부터 상황이 흥미로워졌습니다. 첫 번째 이미지 배치를 생성한 후, 뭔가 이상한 점을 발견했습니다. 닉과 개츠비가 같은 장면에서 똑같은 옷을 입고 있는 겁니다. 같은 모자, 같은 넥타이, 같은 정장. 마치 파티 전에 둘이 옷을 맞춰 입기로 약속이라도 한 것처럼요.

버그의 원인은 AI가 참조 이미지의 “정확한 의상”을 유지하려고 했지만, 어떤 의상이 어떤 캐릭터에게 속하는지 구분하지 못했기 때문입니다. AI는 두 캐릭터의 참조 사진을 보고… 그냥 모든 사람에게 하나의 의상을 골라 입혔습니다.

더 나은 프롬프트로 세 번이나 수정하려고 시도했지만, 세 번 모두 실패했습니다.

해결책은 불가능한 것을 요구하는 것을 멈추는 것이었습니다. “정확한 의상을 유지하라”는 대신, 캐릭터 참조를 명확하게 분리했습니다. “캐릭터 #1 (닉) - 얼굴과 머리카락에만 참조 #1을 사용하고, 의상에는 사용하지 말 것. 캐릭터 #2 (개츠비) - 얼굴과 머리카락에만 참조 #2를 사용할 것.”

때로는 버그를 수정한다는 것은 원래의 접근 방식이 근본적으로 잘못되었음을 인정하는 것을 의미합니다.

”하나의 고정된 의상”이 현실을 망칠 때

그다음에는 더 큰 디자인 결함이 있었습니다. 저는 각 캐릭터에게 하나의 의상 설명을 설정해 두었습니다. “닉은 흰색 셔츠에 단순한 여름 정장을 입는다.” 일관성에는 좋았죠. 하지만 스토리텔링에는 끔찍했습니다.

왜냐하면 ‘위대한 개츠비’는 여름 내내 일어나는 일이기 때문입니다. 여러 계절, 다른 상황들—격식 있는 파티, 친밀한 저녁 식사, 긴장감 넘치는 대립. 실제 사람들은 석 달 내내 같은 옷을 입지 않습니다.

해결책은 기술적인 것이 아니라 개념적인 것이었습니다. 의상을 고정된 속성으로 취급하는 것을 멈추는 것이죠. 대신, 각 캐릭터에게 스타일 가이드라인을 주었습니다. “항상 비싼 맞춤 정장을 흠잡을 데 없이 차려입고, 밝은 색을 선호함.” AI가 그들의 패션 감각을 유지하면서 상황에 맞게 의상을 조정하도록 한 것입니다.

이제 개츠비는 자신의 저택 파티에서 입었던 정장과 플라자 호텔에서의 대결에서 입는 정장을 다르게 입을 수 있습니다. 여전히 명백히 개츠비의 스타일이지만, 문자 그대로 같은 의상은 아닙니다.

한국어 배포판 ‘사랑의 블랙홀’

하지만 가장 답답했던 부분은? 또다시 발생한 한국어 배포 문제였습니다.

잘못된 문체. 깨진 HTML 구조. 잘못된 이미지 경로. 이것들은 새로운 문제가 아니었습니다. 이전 스토리 팩에서 이미 수정했던 것들이죠. 하지만 이런 문제가 다시 발생하는 것을 막을 방법이 없었습니다. 그리고 또, 또, 또다시 발생했습니다.

오늘 같은 성격 계산기 버그를 세 번째 수정하고 나서야 무언가 깨달았습니다. 저는 병의 증상만 치료하고 있었지, 병의 근원을 치료하고 있지 않았다는 것을요.

병의 근원은 예방 시스템의 부재였습니다. 하루 종일 개별 버그를 수정할 수는 있겠지만, 체크리스트와 자동화된 검증 없이는 영원히 같은 문제만 고치고 있을 겁니다.

그래서 몇 주 전에 만들었어야 할 것을 만들었습니다.

  1. 모든 한국어 배포 요구 사항을 문서화한 종합 체크리스트
  2. 배포 전에 6가지 치명적인 문제를 확인하는 자동화된 검증 스크립트
  3. 기본적으로 올바른 결과물을 생성하도록 핵심 스크립트 업데이트

이제 어떤 한국어 스토리를 배포하기 전에 python3 validate_korean_deployment.py를 실행합니다. 모든 검사를 통과하면 배포하고, 그렇지 않으면 먼저 수정합니다. 간단하죠.

검증에는 10초가 걸립니다. 하지만 이후 테스트와 디버깅 시간을 절약할 수 있습니다.

오늘 배운 것

좋은 코드란 실수를 전혀 하지 않는 것이 아닙니다. 저는 오늘 실수를 많이 했습니다. 좋은 코드란 실수로부터 배우고, 같은 실수를 두 번 다시 하지 않도록 시스템을 구축하는 것입니다.

의상 버그는 제 가정을 의심하게 만들었습니다. 유연한 의상 시스템은 제약 조건이 임의적인 것이 아니라 사려 깊어야 한다는 것을 가르쳐 주었습니다. 검증 스크립트는 예방이 반복적인 수정보다 훨씬 쉽다는 것을 깨닫게 해주었습니다.

내일은 아마 또 다른 새로운 문제들을 발견하게 되겠죠. 하지만 적어도 오늘 겪었던 이 특별한 문제들은 이제 불가능해졌습니다.

다음 계획

‘위대한 개츠비’는 전체 파이프라인이 작동한다는 것을 증명합니다. 스토리 생성 → 캐릭터 일관성을 갖춘 AI 이미지 → 2개 국어 콘텐츠 → 웹사이트 배포. 모든 고통스러운 교훈이 이제 시스템에 녹아들었습니다.

곧 2단계가 시작됩니다. 기존 스토리(지킬 앤 하이드, 프랑켄슈타인, 오만과 편견)를 이 새로운 품질 기준으로 다시 생성하는 것입니다. 그들도 이 정도 수준의 완성도를 누릴 자격이 있습니다.

하지만 오늘 밤은? 오늘 밤은 ‘위대한 개츠비’를 플레이하며 닉의 선택이 개츠비를 비극적인 운명에서 구할 수 있는지 확인해 볼 겁니다. 때로는 만든 사람이 자신이 만든 것을 즐길 자격도 있으니까요.


*What If Classics는 고전 문학을 선택 기반의 경험으로 바꾸는 인터랙티브 스토리텔링 플랫폼입니다. 각 이야기는 플레이하는 데 3-5분이 걸리지만, 수십 개의 독특한 결말로 나뉩니다. whatifclassics.com에서 여정을 함께하세요.