이식성

가져오기와 내보내기: 이야기는 창작자의 것이어야 합니다

제가 브라우저와 웹을 좋아하는 이유에 관한 또 하나의 이야기입니다. 빠르게 발전한 웹 덕분에 2026년에는 하나의 이야기를 여러 개의 독립적인 게임 엔진으로 다시 만들지 않고도 브라우저, 오프라인 아카이브, Windows와 macOS 앱에서 실행할 수 있습니다.

2026년 8월 가져오기와 내보내기가 출시되기 전까지 Romergo에는 오랫동안 vendor lock-in 문제가 있었습니다. 사용자는 시스템 안에서 창작할 수 있었지만 완성한 작업을 온전히 가져가기 어려웠습니다. 이제는 그렇지 않습니다. 프로젝트 소유자는 문서화된 .romergo 아카이브를 다운로드하거나 web, Windows, macOS, Microsoft Store용 독립 실행형 게임을 준비할 수 있습니다. 언젠가 Romergo를 떠나더라도 프로젝트는 창작자의 것이어야 합니다.

그래서 가져오기와 내보내기를 만들기 시작했습니다.

웹이 이 작업을 크게 줄여 준 이유

Romergo에는 이미 장면, 분기, 이미지, 음악, 영상, 번역, RTL 언어와 로컬 저장을 처리하는 공통 Player runtime이 있었습니다. 평소에는 서비스에서 공개된 이야기를 불러오지만, 이야기와 함께 패키징하고 네트워크를 완전히 끌 수도 있습니다.

Web 빌드는 ZIP 루트에 index.html을 둡니다. Windows와 macOS는 같은 Player를 보안이 강화된 Electron 셸로 감쌉니다. Microsoft Store에는 같은 게임이 MSIXUpload로 들어갑니다. 이야기 로직을 네 번 다시 쓰는 대신 하나의 runtime 바깥 패키지만 바뀝니다.

플랫폼 서명, 인증서, notarization, 스토어 규칙과 개발자 계정은 여전히 필요합니다. 하지만 가장 비싼 부분인 플랫폼마다 다른 클라이언트와 동작을 만드는 일은 더 이상 반복되지 않습니다.

내보내기는 어떻게 동작하는가

Romergo는 편집기의 우연한 중간 상태를 복사하지 않습니다. 상태가 Saved인 초안이나 선택한 공개 버전을 사용합니다. Runtime과 asset은 특정 revision에 고정됩니다. 빌드 중 프로젝트가 바뀌면 오래된 장면과 새 파일을 섞지 않고 작업을 다시 실행합니다.

첫 결과는 항상 .romergo입니다. 문서화된 구조를 가진 일반 ZIP으로, manifest, 프로젝트, 챕터, 장면, 흐름 그래프, 변수, 표현 설정, 미디어, credits와 SHA-256 checksums를 담습니다. 아카이브에는 기여자의 표시 이름과 역할만 포함되고 email이나 내부 ID는 들어가지 않습니다.

저장된 초안 또는 공개 버전
        ↓
일관된 runtime과 asset revision
        ↓
문서화된 .romergo 아카이브
        ↓
격리된 플랫폼 빌더
        ↓
7일간 보관되는 비공개 ZIP 또는 MSIXUpload

각 asset을 읽어 hash를 계산하고 쓰기 전에 다시 확인합니다. 아카이브는 스트리밍 방식으로 곧바로 비공개 R2에 기록되므로 Worker가 수 GB 프로젝트 전체를 메모리에 담지 않아도 됩니다.

편집 가능한 프로젝트만 필요하면 여기서 끝납니다. 게임 빌드가 필요하면 .romergo가 인터넷에 접근할 수 없는 격리된 Linux 컨테이너로 전달됩니다. 컨테이너는 아카이브를 검증하고 오프라인 Player를 더한 뒤 다음 중 하나를 만듭니다.

Romergo는 Steam credentials, Apple Developer ID, 인증서나 비밀번호를 요구하지 않습니다. 서명과 배포는 창작자 자신의 계정에서 이루어집니다. 서비스는 업로드할 수 있는 빌드를 만들고 7일 동안 비공개로 보관한 뒤 소유자에게 만료 시간이 짧은 다운로드 링크를 제공합니다.

비용도 놀라웠습니다. Production의 “Blizzard”에는 약 30 MB인 미디어 파일 101개가 있습니다. Cloudflare 요금제에 포함된 리소스를 모두 사용한 뒤에도 현재 요금으로 플랫폼 내보내기 한 번은 몇 센트에 불과합니다. 가장 큰 비용은 R2나 트래픽이 아니라 패키징을 마친 뒤 컨테이너가 살아 있는 시간입니다.

브라우저에서 “Blizzard”의 프로덕션 버전을 플레이할 수 있습니다. 비용 계산에 사용한 것과 동일한 프로젝트입니다.

가져오기는 훨씬 복잡했습니다

비주얼 노벨 편집기와 엔진은 이미 열 종류가 넘습니다. 어떤 창작자는 Twine, ink, Yarn Spinner 또는 Ren’Py를 사용하고, 다른 사람은 메모장, Obsidian이나 Notion에 씁니다. PDF, Markdown, 표, 음성 메모, 영상 링크와 이미지 폴더가 원본일 수도 있습니다.

포맷은 수천 가지이고 매년 생겨나고 사라집니다. 포맷마다 네이티브 importer를 만들면 5년 뒤에는 외부 제품의 특정 구버전만 이해하는 parser의 묘지만 남을 것입니다.

답은 이미 가까이에 있었습니다. AI agent입니다.

Agent에게 HTML, Markdown, PDF, 오디오, 이미지와 링크를 줄 수 있습니다. Agent는 순서를 복원하고, 반복되는 등장인물을 찾고, 모호한 분기를 표시하고, 창작자에게 질문할 수 있습니다. 사람은 흐름을 이끌고 결과를 확인합니다.

Romergo에는 이미 MCP 지원이 있었습니다. 그래서 세상의 모든 포맷을 Romergo에 가르치는 대신 안정적인 목적지를 만들었습니다. Agent가 일반 Romergo 프로젝트를 만들고 검증하는 도구들입니다.

Agent를 통한 가져오기 흐름

원본 파일과 링크
        ↓
사용자의 MCP 지원 agent
        ↓
목록, 미리보기, 질문과 warnings
        ↓
Romergo MCP 저작 도구
        ↓
저장 데이터 재조회와 프로젝트 검증
        ↓
Builder에서 창작자가 최종 확인

먼저 사용자가 MCP 호환 agent를 연결하고 원본을 전달합니다. Agent는 챕터, 장면, 인물, 장소, 미디어, 언어와 관계를 정리합니다. HTML, Markdown, TXT와 텍스트 PDF에는 romergo_inspect_story_sourceromergo_import_story_source를 사용해 존재하지 않는 분기를 꾸며내지 않고 충실한 선형 이전을 할 수 있습니다.

Twine, ink, Yarn Spinner와 Ren’Py에서는 passages, knots, nodes, 대화, 선택지와 기본 변수가 보통 챕터, 장면과 이동으로 바뀝니다. Macros, Python, Unity commands, screens, CSS/JS와 external functions는 warnings로 남겨 사람의 결정을 요청합니다.

미리보기 후 agent는 새 프로젝트를 만들고 첨부 파일을 일괄 업로드하며 그래프와 장면을 기록합니다. 큰 미디어는 일회용 업로드를 통해 R2로 직접 전송됩니다. 그런 다음 romergo_get_chapter로 저장 내용을 다시 읽고 romergo_validate_project를 실행하며, romergo_verify_quest_change가 성공한 뒤에만 이전을 완료합니다.

AI가 검토를 없애지는 않습니다

Agent는 의미를 잘 이해하지만 추측이 사실이 되지는 않습니다. 오디오는 외부 전사가 필요할 수 있고, 영상 링크가 사용 권리를 주는 것은 아니며, 복잡한 Ren’Py 코드나 Twine macro는 그 자체로 프로그램일 수 있습니다. 그래서 가져오기 흐름은 미리보기와 warnings를 보여 주고 프로젝트 생성 전에 자료의 권리를 확인하게 합니다.

Romergo의 네이티브 업로더는 .romergo만 받습니다. 의도적인 제한입니다. 자체 공개 포맷은 결정적이고 안전하게 가져와야 하고, 무한한 외부 원본은 추론하고 질문할 수 있는 도구가 해석하는 편이 낫습니다.

앞으로 5년을 위한 선택

포맷은 바뀌고 모델과 agent도 바뀔 것입니다. 하지만 경계는 안정적으로 유지할 수 있습니다. 한쪽에는 어떤 형태든 인간이 만든 자료가 있고, 다른 쪽에는 문서화된 .romergo와 MCP 저작 도구가 있습니다.

새로운 인기 편집기가 등장해도 Romergo가 전용 importer를 기다릴 필요는 없습니다. Agent가 파일을 학습하고 이해한 내용을 보여 준 뒤 같은 계약으로 결과를 기록할 수 있습니다. 창작자가 Romergo를 떠나더라도 공개 아카이브와 오프라인 게임은 남습니다.

제가 생각하는 올바른 방향은 이것입니다. Romergo는 이야기를 만들기 편한 곳이어야지, 이야기를 꺼낼 수 없는 감옥이어서는 안 됩니다.

개발 블로그로 돌아가기