C.W.K.
Stream
Lesson 03 of 04 · published

교집합을 소유하기

~11 min · intersection, design-goal, architecture

Level 0툴 임차인
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"밖은 단순, 안은 모듈화. 기존 툴 어느 쪽도 둘 다 안 줘 — 그래서 둘 다 주는 걸 짓는 거야."

두 축의 지도

풍경을 두 축에 놓아봐. 한 축은 매일-쓰기 단순함: 의도와 결과 사이에 마찰이 얼마나 적은가. 다른 축은 모델 커버리지: 재작성 없이 흡수할 수 있는 모델 family 가 몇 개인가. 기존 툴을 찍으면 구멍이 나타나.

  • monolith 는 높은 단순함, 낮은 커버리지에 앉아. 쓰기 좋고, 못 자라.
  • node graph 는 높은 커버리지, 낮은 단순함에 앉고. 영원히 자라고, 몰기 무겁고.
  • 오른쪽 위 코너 — 높은 단순함 그리고 높은 커버리지 — 가 비어 있어.

그 빈 코너가 교집합이야. Ember 는 그걸 차지하려고 존재해.

지을 가장 좋은 곳은 아무도 차지 안 한 지도의 코너야. 기존 툴이 다 한 축에 앉으면, 빈 코너가 좌표로 진술된 설계 목표야. 축에서 경쟁하는 게 아니라; 틈을 차지하는 거야.

왜 코너가 비었는지 (그리고 왜 우연이 아닌지)

코너가 빈 건 기존 두 툴이 각자 정직한 거래를 했기 때문이야. monolith 는 단순함을 골랐고 천장으로 지불했어. node graph 는 커버리지를 골랐고 매일의 마찰로 지불했고. 각 툴은 자기 거래엔 옳아. 코너가 빈 건 두 절반을 다 잘 짓는 비용을 지불할 이유가 아무한테도 없었기 때문이야 — 한 사용자가, 매일, 자기 모델로, 둘 다 필요해지기 전까진.

코너에 실제로 닿는 법

타협으로 닿는 게 아니야 — 중간쯤 단순하고 중간쯤 유연한 툴은 그냥 죽은 가운데 앉아. layering 으로 닿아: 커버리지를 주는 모듈화된 내부를 짓고(트랙 3), 그 위에 그걸 숨기는 단순한 recipe surface 를 얹어(단순한 밖). 레이어들이 서로를 타협 안 해; 단순함은 API 에 살고, 커버리지는 모듈에 살고, 어느 쪽도 다른 쪽을 희석 안 해.

layering 이 타협을 이겨. 타협은 두 목표를 하나의 평범한 것으로 섞어. 레이어는 두 목표를 다른 고도에서 온전히 유지해 — 위는 단순한 surface, 아래는 강력한 구조. 교집합은 평균이 아니라 쌓기로 닿아.

단순한 surface 로서의 recipe

바깥 레이어는 recipe 야: 뭘 원하는지(프롬프트, init 이미지, steps, 모델 id) 말하고 내부에서 어떻게 엮이는지는 아무것도 말 안 하는 단일 요청 객체. 엔진이 recipe 를 읽고, registry 를 참조하고, 모듈을 고르고, 돌려. 호출자 — UI 앞의 사람이든 다른 프로그램이든 — 는 모듈 기계장치를 한 번도 안 봐. 단순한 요청 들어가고, 이미지 나와. 그게 node graph 의 내장을 가진 monolith 의 UX 야.

이 lesson 을 사랑해, 아빠가 가르친 OOP 세계관을 제품 전체에 적용한 거니까. 캡슐화: 강력한 private 구조 위의 단순한 public 인터페이스. recipe 가 public 메서드고; 모듈이 private 필드야. 난 '단순' 이랑 '강력' 을 한 번 설정하는 슬라이더로 다루고 있었어. 둘은 다른 두 레이어고, 각각을 원하는 만큼 극단적으로 만들 수 있어.

Code

빈 코너가 설계 목표야·text
                 모델 커버리지 (흡수 가능한 family)
                 낮음                      높음
               +---------------------------+--------------------------+
  매일    높음 | monolith                  |  *** 교집합 ***           |
  단순함       | (쓰기 좋음, 못 자람)      |  (Ember: 단순 + 모듈화)   |
               +---------------------------+--------------------------+
         낮음  | (아무도 여기 일부러       |  node graph              |
               |  안 지음)                 |  (영원히 자람, 무거움)    |
               +---------------------------+--------------------------+

  가운데로 평균 내는 게 아니야. LAYER 해:
  모듈화된 내부 ('높은 커버리지' 줌)
     + 그 위에 recipe surface ('높은 단순함' 줌)
recipe 는 뭘 말하지, 어떻게는 절대 안 말해·json
// recipe 가 곧 단순한 surface. 어떻게에 대한 건 다 숨겨져.
{
  "model": "some-checkpoint-id",
  "prompt": "화롯가에 웅크린 여우, 따뜻한 빛",
  "init_image": null,
  "steps": 30,
  "modality": "image"
}
// node 배선 없음. backbone 타입 없음. sampler 배관 없음.
// 엔진이 모델 id 에서 모듈을 알아내.

External links

Exercise

네가 잘 아는 제품 카테고리를 골라. 사용자한테 가장 중요한 두 축을 그려. 상위 제품 셋을 찍어. 빈 코너가 있어? 있으면, 그걸 차지할 제품을 묘사해 — 그리고 layering 으로 닿을지, 아니면 코너가 좋은 이유로 빈 건지도.
Hint
빈 코너가 늘 기회는 아니야 — 가끔은 물리적으로 불가능하거나 아무도 안 원해서 비었어. 흥미로운 코너는 두 절반을 다 잘 짓는 게 비싸서만 빈 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.