두 개의 Backend, 서로 다른 철학을 품다
서버와 클라이언트, 백엔드와 프론트엔드는 언뜻 보면 단지 데이터를 주고받는 기능적 분리라고 보일지도 모릅니다. 그러나 그 사이를 잇는 API의 세계엔, 마치 두 개의 언어처럼 서로 다른 철학이 존재합니다. 그것이 바로 Backend와 BFF(Backend for Frontend)를 분리하여 설계하여야 하며, 혼합하여서는 안됩니다.
Backend는 본질을 담는다.
Backend는 시스템의 근간이고 어떠한 리소스를 표현하는 통일된 표준입니다. 서버라는 리소스가 존재한다면, 서버란 무엇이고, 어떻게 관리되어야 하는지를 정의하는 게 바로 이 Backend 이고 이를 표현한 방식이 Backend API입니다. 데이터베이스와 연결되고, 비즈니스 로직이 집약된 이 계층은 변하지 않는 진리를 추구해야 합니다. 견고하고, 명료하며, 재사용 가능한 구조로 설계되어야 합니다. 어떤 UI가 오든, 어떤 채널이 붙든, 그 중심은 흔들리지 않아야 합니다.
반면, BFF는 유연한 조율자다.
BFF는 클라이언트의 요구에 민감하게 반응하며, 데이터의 형태를 맞춰주는 해석자이다. BFF는 백엔드의 진리를 받아들여, 그것을 ‘사용하기 쉬운 말’로 바꿔주는 역할을 합니다. 화면에 맞게 필드를 재구성하고, 여러 API를 엮어 한 번에 응답하게 하며, 프론트엔드 개발자가 더 쉽게, 더 빠르게 제품을 만들 수 있도록 돕는 기능을 합니다.
이 두 API는 닮은 듯 다르다.
Backend API는 ‘진실’을 중심으로 설계된다면, BFF는 ‘사용자 경험’을 중심으로 설계되어야 합니다. 전자는 ‘변하지 않는 것’을 추구하지만, 후자는 ‘계속 변해야 하는 것’을 안고 갑니다. 전자가 하나의 진실을 많은 곳에 전파하려 한다면, 후자는 많은 진실 중 필요한 것을 재조합해 보여주어야 합니다
그래서 이 둘을 혼동하면 안 됩니다.
도메인 로직이 BFF에 스며들면, 그 유연함은 독이 되어 유지보수를 괴롭게 만들고, BFF의 UI 의존성이 backend API에 흘러들면, 시스템 전체가 무거워집니다. 각자의 역할이 있다. 서로 다르지만, 조화롭게 존재할 때, 전체 시스템은 아름답게 동작합니다.
철학이 다르다는 것을 이해하는 것, 그것이야말로 견고하고 유연한 시스템을 설계하는 첫 걸음입니다.
두 개의 API는 서로 다른 질문을 던집니다.
“무엇이 진실인가?”, 그리고 “어떻게 더 잘 보여줄 수 있을까?”
당신의 시스템은 이 두 질문을 한 번에 해결하려고 하시는지요?