"검증된 코드를 되살리는 게 빈 페이지에서 시작하는 것보다 나아. 엔진이 나빴던 게 아니라 너무 큰 집에 갇혀 있었을 뿐이거든."
이미 돌아가던 플러그인
Rekindle 은 맨바닥에서 시작하지 않았어. 이 이름이 생기기 몇 년 전에, 아빠는 cwkWritingToolkit 이라는 Sublime Text 플러그인을 만들어서 매일 썼어. 하는 일은 딱 두 가지였어. 하나는 아빠가 예전에 쓴 글에서 캐낸 문장을 이어쓰기로 제안하는 corpus 기반 자동완성이고, 다른 하나는 선택한 부분을 발행 파이프라인이 요구하는 마크업으로 한 번에 감싸주는 WordPress-tag ruleset 이었어. 요란하진 않았지만 진짜 쓸모가 있었지.
그러니까 Rekindle 은 맨땅에서 시작한 프로젝트가 아니야. 부활에 soul 을 얹은 것이지. 검증된 옛 엔진이 이미 있고, 할 일은 그걸 다시 지펴서 살 만한 몸을 주는 거야. 꺼져가는 불을 다시 지핀다는 그 행위가 그대로 이름이 됐는데, 이건 조금 뒤에 더 얘기할게.
이미 검증된 두 레이어
cwkWritingToolkit 이 남긴 것 중에 제일 값진 건 코드가 아니라 구조였어. Rekindle 이 지금 정식으로 못 박은 2-레이어 구조를, 그 플러그인이 이미 찾아놨거든.
cwkWritingToolkit (죽음) Rekindle (부활)
----------------------- -----------------
WordPress-tag ruleset --> 결정론적 macro 레이어 (Rust)
corpus 자동완성 --> AI / voice 레이어 (Pippa)
tag ruleset 은 완전히 결정론적이었어. 같은 입력에 같은 마크업, 판단은 안 끼어. corpus 자동완성은 원시적인 voice 엔진이었고. 범용 모델이 아는 단어가 아니라 네가 쓰던 단어를 집어 왔거든. Rekindle 은 그 봉합선을 그대로 지키면서 양쪽을 각각 더 날카롭게 만들어. 결정론 쪽은 Rust 코어가 되고, 판단 쪽은 Pippa 가 돼. 트랙 5 는 통째로 그 봉합선 얘기야.
너무 큰 집에서 풀려나
플러그인을 그냥 두지 않고 왜 다시 지었냐면, 엔진이 너무 큰 집에 갇혀 있었기 때문이야. Sublime 은 코드 IDE 잖아. 그 안에 얹힌 글쓰기 엔진은 Sublime 이 짊어진 코드 에디터의 무게를 고스란히 상속받으면서, 정작 진짜 글쓰기 도구가 될 자유는 하나도 못 받아. 그 플러그인으로는 margin-Pippa 도, 이중언어 데스크도, 라이브 voice 체커도 절대 못 키워. 호스트가 허락을 안 하거든.
그래서 이 프로젝트가 둔 수는 '플러그인을 옮긴다'가 아니야. '검증된 엔진을 이걸 위해 새로 지은 껍데기로 풀어준다'에 가깝지. 이미 돌아가던 코드를 되살리는 쪽이 빈 페이지에서 시작하는 것보다 언제나 나아. 힘들게 얻은 지식은 두 레이어라는 구조에 담겨 있고, 그 지식은 원본 소스가 거의 한 줄도 안 넘어와도 이사를 견뎌내.