"추상화는 전부 뭔가가 변할 거라는 데 거는 판돈이야. 변화가 진짜인 자리에만 걸어. 엔진한테 그런 자리는 딱 하나고."
추상화는 장식이 아니라 판돈이야
추상 베이스 클래스든 인터페이스든 protocol 이든, 하나하나가 다 주장이야. "이건 구현이 여럿일 거고, 위쪽 코드는 어느 건지 몰라도 돼." 그 주장이 참이면 추상화가 값어치를 해. 거짓이면 — 구현이 영영 하나뿐이면 — 그냥 값만 드는 거야. 읽고 지나가야 하는 우회로 하나, 아무것도 안 하는 seam 하나. 규율은 변화가 진짜라고 확신하는 자리에만 판돈을 거는 거야.
엔진이 거는 단 하나의 판돈
엔진을 보고 물어봐. 제일 위에서 진짜로 변하는 게 뭐지? VAE 는 아니야. 그건 파이프라인 안에서 변하는 모듈이고. sampler 도 아니야. 마찬가지로 안쪽이지. 제일 위에서 변하는 건 생성이 물리적으로 어디서 벌어지느냐야.
- LocalAdapter — 네 GPU 에 올린 모델 weight 를 두고 PyTorch 랑 diffusers 를 돌려.
- APIAdapter — closed-weight vendor 를 HTTP 로 불러. local weight 도 없고 GPU 도 안 써.
이 둘은 진짜로 다른 세계야. 망가지는 모양도 다르고, 걸리는 시간도 다르고, 전부 다 달라. 그 차이가 진짜 변화라서, 엔진이 내놓는 단 하나의 추상화인 Adapter 가 자리를 번 거고.
'좁다' 는 게 두 가지 뜻이야
Adapter 경계는 두 가지 의미에서 좁아. 첫째, 제일 위에 있는 추상화가 이거 하나야. 추상 router 니 추상 store 니 하는 게 나란히 늘어선 층이 없어. 둘째, Adapter 인터페이스 자체가 작아. 요청 받고, 돌리고, 결과 바이트랑 메타데이터를 돌려주고. 좁은 인터페이스는 제대로 구현하기 쉽고, 따라가기 쉽고, 새기 어려워. 넓은 인터페이스는 구현하는 쪽마다 절반은 시늉만 하게 될 때까지 메서드를 쌓아 올려.
아직 안 지은 미래의 adapter
Adapter 추상화는 ceiling matrix 에서 잡아 둔 seam 도 같이 채워. 나중에 올 VideoAdapter(local video)나 video-API adapter 둘 다 같은 경계에 맞아. 비디오의 날이 오면 이미 있는 추상화의 새 구현으로 꽂히지, 경계를 고칠 일이 없어. '생성 위치가 변한다' 는 판돈 하나가 아직 안 지은 변화까지 미리 덮어 주는 거야. 축을 맞게 골랐으니까.