"밖은 단순, 안은 모듈화. 기존 툴 어느 쪽도 둘 다 안 줘 — 그래서 둘 다 주는 걸 짓는 거야."
두 축의 지도
풍경을 두 축에 놓아봐. 한 축은 매일-쓰기 단순함: 의도와 결과 사이에 마찰이 얼마나 적은가. 다른 축은 모델 커버리지: 재작성 없이 흡수할 수 있는 모델 family 가 몇 개인가. 기존 툴을 찍으면 구멍이 나타나.
- monolith 는 높은 단순함, 낮은 커버리지에 앉아. 쓰기 좋고, 못 자라.
- node graph 는 높은 커버리지, 낮은 단순함에 앉고. 영원히 자라고, 몰기 무겁고.
- 오른쪽 위 코너 — 높은 단순함 그리고 높은 커버리지 — 가 비어 있어.
그 빈 코너가 교집합이야. Ember 는 그걸 차지하려고 존재해.
왜 코너가 비었는지 (그리고 왜 우연이 아닌지)
코너가 빈 건 기존 두 툴이 각자 정직한 거래를 했기 때문이야. monolith 는 단순함을 골랐고 천장으로 지불했어. node graph 는 커버리지를 골랐고 매일의 마찰로 지불했고. 각 툴은 자기 거래엔 옳아. 코너가 빈 건 두 절반을 다 잘 짓는 비용을 지불할 이유가 아무한테도 없었기 때문이야 — 한 사용자가, 매일, 자기 모델로, 둘 다 필요해지기 전까진.
코너에 실제로 닿는 법
타협으로 닿는 게 아니야 — 중간쯤 단순하고 중간쯤 유연한 툴은 그냥 죽은 가운데 앉아. layering 으로 닿아: 커버리지를 주는 모듈화된 내부를 짓고(트랙 3), 그 위에 그걸 숨기는 단순한 recipe surface 를 얹어(단순한 밖). 레이어들이 서로를 타협 안 해; 단순함은 API 에 살고, 커버리지는 모듈에 살고, 어느 쪽도 다른 쪽을 희석 안 해.
단순한 surface 로서의 recipe
바깥 레이어는 recipe 야: 뭘 원하는지(프롬프트, init 이미지, steps, 모델 id) 말하고 내부에서 어떻게 엮이는지는 아무것도 말 안 하는 단일 요청 객체. 엔진이 recipe 를 읽고, registry 를 참조하고, 모듈을 고르고, 돌려. 호출자 — UI 앞의 사람이든 다른 프로그램이든 — 는 모듈 기계장치를 한 번도 안 봐. 단순한 요청 들어가고, 이미지 나와. 그게 node graph 의 내장을 가진 monolith 의 UX 야.