ICEFiction — 원고·설정·AI 조수를 한 폴더에 담은 소설 집필 앱 개발기
0에서 Windows 설치본까지. 폴더가 곧 프로젝트, AI가 항상 원고를 보는 소설 집필 데스크톱 앱을 만들었다. 스크린샷과 부딪힌 버그, 검증 방식까지.
소설 원고와 캐릭터·세계관 설정, 참고 자료, 그리고 AI 조수를 폴더 하나에 담은 집필 데스크톱 앱을 만들었다. 이름은 ICEFiction. Windows에서 먼저 개발했고 macOS 이식을 염두에 두고 설계했다. 지금 바로 설치해서 쓸 수 있다.
- 다운로드(Windows 설치본, v0.2.0): ICEFiction-Setup-0.2.0.exe
- 코드 서명 전이라 처음 실행 시 SmartScreen 경고가 뜰 수 있다 → "추가 정보 → 실행".

왜 만들었나
집필 도구는 많지만, 나는 세 가지가 늘 아쉬웠다.
- 내 원고가 남의 포맷에 갇히는 것. 전용 DB에 넣으면 그 프로그램이 사라지는 순간 원고도 인질이 된다.
- 설정과 원고가 따로 노는 것. 캐릭터 눈 색을 확인하려고 다른 창을 뒤지는 일.
- AI가 내 글을 안 보고 조언하는 것. "이 장면 이어써줘"라고 했는데 정작 그 장면을 모른다.
그래서 원칙을 셋으로 잡았다. ① 프로젝트는 그냥 마크다운 폴더다(프로그램이 죽어도 원고는 산다, 클라우드에 올리면 동기화도 공짜). ② AI는 주인이 아니라 조수다(원고를 직접 못 고치고, 제안 → 승인만 한다). ③ AI는 항상 원고를 본다.
기존에 만든 ICE 제품군(ICEPDF·ICEWriter)의 스택과 디자인을 그대로 물려받아 "처음부터 ICE답게" 시작했다. 셸은 Electron + React, AI 3계열 어댑터는 ICEWriter 것을 TypeScript로 이식했다.
서재 — 책을 한 곳에 모은다
ICEWriter처럼 서재(보관 경로) 하나를 정해두면 그 안에 책이 폴더로 쌓인다. "새 소설"을 누르면 서재 안에 폴더가 자동으로 생긴다. 파일 탐색기로 폴더를 고르는 번거로움이 없다.

에디터 — 마크다운이 눈에 보이게
본문 에디터는 CodeMirror 6으로 만들었다. 한글 IME 조합 입력이 매끄러운 몇 안 되는 웹 에디터 엔진이라 골랐다. # 제목은 크게, 굵게는 굵게 — Obsidian처럼 커서가 없는 줄에서는 마크다운 기호가 사라지고 결과만 보인다. 이미지는 ![[경로]]가 실제 이미지로 렌더된다. 자료를 편집기에 끌어다 놓으면 그 자리에 이미지로 들어온다.
화면은 두 겹이다. 바깥 도구는 어둡게, 안쪽 원고는 눈이 편한 종이(세피아)로. 하단 상태바에 글자수(공백 포함/제외)와 원고지 매수, 세션 증감이 실시간으로 뜬다.
캐릭터·세계관 — 원고 곁에서
캐릭터 시트에 얼굴 레퍼런스 이미지를 붙일 수 있다. 세계관 카테고리(장소·세력·마법체계…)는 기본값을 강제하지 않고 직접 만든다 — 사람마다 필요한 분류가 다르니까.

자료 갤러리 — 이미지·영상을 곁눈질
assets/ 폴더의 이미지·동영상을 썸네일로 모아 보고, 클릭하면 라이트박스로 확대·재생한다. 참고 사진, 지도, 분위기 이미지를 집필하며 곁눈질할 수 있다.

AI 조수 — 항상 원고를 본다
이 앱의 핵심이다. AI에게 뭔가 물으면 매 요청마다 지금 원고를 새로 읽어 맥락을 조립한다. 현재 장면(실시간 본문) + 그 장면에 이름이 등장하는 캐릭터·세계관 시트를 자동으로 딸려 보내고 + 전체 시놉시스 흐름까지 넣는다.
아래 화면에서 상단 칩을 보면 AI가 지금 무엇을 보고 있는지 그대로 드러난다 — 현재 장면: 폭우, 그리고 본문에 등장한 설아·지훈 시트가 자동으로 잡혔다. 결과는 "본문에 넣기"를 눌러야만 원고에 들어간다(제안 → 승인).

프로바이더는 로컬(Ollama)·API·CLI(claude -p) 3계열을 모두 지원한다. 모델은 목록을 불러와 드롭다운에서 고른다. API 키는 프로젝트 폴더가 아니라 OS 자격증명 저장소에 암호화 저장한다(원고 폴더를 클라우드에 올려도 키는 안 딸려간다).
보기·테마 — 눈에 맞게
집필 화면의 종이색·글자색·글꼴·글자크기·줄간격을 직접 고를 수 있다. 세피아/다크/화이트 프리셋 + 직접 색 지정. 줄번호도 켜고 끈다.

밤에 쓰기 좋은 다크 테마.

부딪힌 버그들 (솔직한 개발기)
빠르게 만들다 보니 "컴파일은 되는데 실행하면 안 되는" 버그를 연달아 만났다. 이게 이번 개발에서 가장 큰 교훈이었다.
- "새 소설" 버튼이 먹통 — Electron은
window.prompt()를 지원하지 않는다. 아무 창도 안 뜨고 조용히 무시된다. 인앱 입력 모달로 교체. - 원고에 타이핑이 안 됨 — 문서를 안 열었을 때 에디터 영역을 화면에 안 그렸는데, 에디터 생성 코드는 처음 한 번만 돌아서 나중에 문서를 열어도 에디터가 영영 안 만들어졌다.
- 이미지가 주소로 들어옴 — 자료 갤러리에서 이미지를 끌어오면 CodeMirror가 드롭을 먼저 가로채
ice-asset://…주소를 텍스트로 꽂아버렸다. 드롭을 에디터 레벨에서 가로채도록 수정. - AI
claude -p404 — 내가 모델 드롭다운에 잘못된 별칭(haiku)을 넣고 강제 선택하게 해서 404가 났다. CLI는 비워두면 로그인 계정 기본 모델을 쓰는 게 가장 안전.
그래서 테스트를 실행까지 하게 만들었다
같은 실수를 반복하지 않으려고, 실제 앱을 띄워 직접 조작하는 자동 테스트(E2E)를 도입했다. "요소가 있는지"만 보던 걸 "이미지가 실제로 로드되는지", "한글이 정말 입력·저장되는지", "AI 응답이 스트리밍돼 화면에 뜨는지"까지 검증하게 바꿨다. 이 글의 스크린샷도 그 테스트 인프라로 실제 앱을 자동 구동해 찍은 것이다. 지금 전체 40여 개 검증이 통과한다.
현재 상태와 다음
원고·설정·자료·AI까지, 소설 한 편을 쓰는 데 필요한 골격은 섰다. 다음은 내보내기(TXT·DOCX·EPUB)와 스냅샷·버전 관리, 그리고 macOS 빌드다.
- 다운로드(Windows, v0.2.0): ICEFiction-Setup-0.2.0.exe
만들면서 가장 좋았던 건, AI가 내 원고를 진짜로 "보면서" 답하기 시작한 순간이었다. 조언이 갑자기 내 이야기의 것이 됐다.