"밖은 단순하게, 안은 쪼개서. 기존 툴은 둘 다 안 줘. 그래서 둘 다 주는 걸 짓는 거야."
축 두 개짜리 지도
이 판을 축 두 개 위에 올려놔 봐. 한 축은 매일 쓰기 단순한가야. 하고 싶은 것과 결과 사이에 턱이 얼마나 적은지. 다른 축은 모델을 얼마나 받아들이나고. 재작성 없이 소화할 수 있는 모델 계열이 몇 개인지. 여기에 기존 툴들을 찍어 보면 구멍이 보여.
- monolith 는 단순함 높음, 커버리지 낮음 자리에 앉아. 쓰기 좋은데 안 자라.
- node graph 는 커버리지 높음, 단순함 낮음 자리고. 얼마든지 자라는데 몰기가 무거워.
- 오른쪽 위, 단순함도 높고 커버리지도 높은 칸이 비어 있어.
그 빈 칸이 교집합이야. Ember 는 거길 차지하려고 있는 거고.
그 칸이 왜 비었나 (그리고 왜 우연이 아닌가)
칸이 빈 건 기존 두 툴이 각자 정직한 거래를 했기 때문이야. monolith 는 단순함을 골랐고 천장으로 값을 치렀어. node graph 는 커버리지를 골랐고 매일의 턱으로 값을 치렀고. 각 툴은 자기 거래 안에서는 옳아. 칸이 빈 건 양쪽 절반을 다 잘 짓는 값을 치를 이유가 아무한테도 없었기 때문이야. 한 사람이, 매일, 자기 모델로, 둘 다 필요해지기 전까지는.
그 칸에 실제로 닿는 법
절충으로는 못 닿아. 적당히 단순하고 적당히 유연한 툴은 그냥 아무도 안 쓰는 한가운데에 앉게 돼. 층을 쌓아서 닿아야 해. 커버리지를 만들어 주는 쪼개진 내부를 먼저 짓고(트랙 3), 그 위에 그걸 다 감춰 주는 단순한 recipe 화면을 얹는 거야. 두 층은 서로를 깎지 않아. 단순함은 API 에 살고 커버리지는 모듈에 살아서, 어느 쪽도 다른 쪽을 묽게 만들지 않아.
단순한 화면으로서의 recipe
바깥 층은 recipe 야. 뭘 원하는지만 말하고(프롬프트, init 이미지, steps, 모델 id) 안에서 어떻게 엮이는지는 한마디도 안 하는 요청 객체 하나. 엔진이 recipe 를 읽고, registry 를 찾아보고, 모듈을 고르고, 돌려. 부르는 쪽은 — UI 앞의 사람이든 다른 프로그램이든 — 모듈 기계장치를 한 번도 안 봐. 단순한 요청이 들어가고 이미지가 나와. node graph 의 속을 가진 monolith 의 사용감인 거야.