"UI 랑 엔진이 한 프로세스를 공유해. 그건 편의지, API 를 건너뛸 면허가 아냐."
유혹적인 지름길
Bonfire 의 내장 UI 와 엔진은 같이 돌아 — 서버 하나, 엔진은 포트에, UI 가 거기 말 걸어. 너무 가까워서 끊임없는 유혹이 있어: 엔진 객체가 같은 코드베이스 바로 거기 있는데 왜 모델을 HTTP 로 가져와? 그냥 import 해. 더 빠르고, 줄도 적고, 그 순간 완벽히 작동해.
근데 그게 엔진을 지을 가치 있게 만드는 그것을 조용히 파괴해. UI 가 엔진 내부를 import 하는 순간, 엔진의 API 가 아니라 모양 에 결합돼. 엔진을 리팩터하면 API 계약이 약속한 적 없는 방식으로 UI 가 깨져. 더 나쁜 건, 이제 모델이 다른 클라이언트가 쓸 수 없는 경로로 UI 에 도착할 수 있어 — 그래서 나중에 짓는 Live 브리지, 모바일 앱, CLI 가 전부 그 경로에서 잠겨.
in-process 를 remote 처럼 다뤄
규율은 말하긴 쉽고 지키긴 짜증나: 내장 UI 는 엔진이 다른 머신에 있는 것처럼 API 를 불러. 함수 호출이 될 텐데도 HTTP 요청을 해. 비용은 약간의 레이턴시와 약간의 예식. 보상은 UI 가 매 요청마다 API 가 충분하다는 걸 증명한다는 거야 — UI 가 API 만으로 필요한 모든 걸 할 수 있는 클라이언트라는 살아 있는 증거니까.