"모든 추상화는 뭔가 변할 거라는 베팅이야. 변화가 진짜인 데서만 베팅해 — 그리고 엔진엔 진짜 베팅이 정확히 하나야."
추상화는 장식이 아니라 베팅이야
추상 베이스 클래스, 인터페이스, protocol — 하나하나가 주장이야: "이것의 구현이 여럿일 거고, 위의 코드는 어느 건지 신경 안 써야 해." 그 주장이 참이면, 추상화가 밥값을 해. 거짓이면 — 구현이 영영 하나뿐이면 — 추상화는 순수 비용이야: 읽고 통과해야 하는 우회, 아무것도 안 하는 seam. 규율은 변화가 진짜라고 확신하는 데서만 베팅하는 거야.
엔진의 진짜 베팅 하나
엔진을 보고 물어봐: 최상위에서 진짜 변하는 게 뭐야? VAE 아니야 — 그건 모듈, 파이프라인 안에서 변하고. sampler 아니야 — 역시 내부고. 최상위에서 변하는 건 생성이 물리적으로 어디서 일어나냐야:
- LocalAdapter — 네 GPU 의 모델 weight 에 대고 PyTorch 랑 diffusers 를 돌려.
- APIAdapter — closed-weight vendor(외부 이미지 서비스)를 HTTP 로 호출해; local weight 없음, GPU 없음.
이 둘은 진짜로 다른 세계야 — 다른 실패 양상, 다른 latency, 다른 모든 것. 그 차이가 진짜 변화라서, 엔진이 출하하는 단 하나의 추상화 — Adapter — 를 벌어.
'좁다' 가 뜻하는 것
Adapter 경계는 두 가지 의미로 좁아. 첫째, 유일한 최상위 추상화야 — 추상 router, 추상 store, 추상 뭐의 병렬 계층이 없어. 둘째, Adapter 인터페이스 자체가 작아: 요청 받고, 돌리고, 결과 바이트 + 메타데이터 반환. 좁은 인터페이스는 올바르게 구현하기 쉽고, 추론하기 쉽고, 누출하기 어려워. 넓은 인터페이스는 모든 구현자가 절반을 가짜로 만들어야 할 때까지 메서드를 쌓아.
아직 안 짓는 미래 adapter
Adapter 추상화는 ceiling matrix 의 예약된 seam 도 구체화해. 미래의 VideoAdapter(local video)랑 미래의 video-API adapter 둘 다 같은 경계에 맞아 — 비디오의 날이 오면, 기존 추상화의 새 구현으로 꽂혀, 경계 변경 없이. '생성 위치가 변한다' 는 네 베팅 하나가 아직 안 지은 변화까지 이미 커버해, 옳은 축에 베팅했으니까.