프론트엔드 개발을 하다 보면 하나의 화면을 만들기 위해 여러 API를 호출해야 하는 상황이 자주 발생합니다.
이런 경우에는 프론트엔드가 여러 API를 직접 호출해야하는데
프로젝트가 커질수록 이러한 로직이 늘어나면서 프론트엔드 코드가 복잡해질 수 있습니다.
이러한 문제를 해결하기 위해 등장한 아키텍처 패턴이 BFF(Backend For Frontend) 입니다.
BFF란 무엇인가요?
BFF는 Frontend를 위해 존재하는 전용 Backend 계층을 의미합니다.
즉, 프론트엔드가 여러 백엔드 서비스에 직접 요청을 보내는 것이 아니라 중간에 BFF 서버를 두어 데이터를 처리하는 구조입니다.
이 구조에서는 프론트엔드가 여러 API를 직접 호출하지 않고 BFF 하나의 API만 호출하면 된다고 합니다.
BFF는 내부적으로 여러 서비스에 요청을 보내고 데이터를 조합한 뒤 프론트엔드에 전달합니다.

BFF를 사용하면 좋은 점
1. 프론트엔드 코드가 단순
예를 들어 AI가 추천해준 대시보드 화면을 만든다고 가정해 보겠습니다.
BFF가 없는 경우에는
GET /user
GET /posts
GET /notifications
프론트엔드는 여러 API를 호출해야하지만 BFF가 있다면 아래처럼 사용할 수 있습니다.
GET /api/dashboard
BFF가 내부에서 여러 API를 호출한 뒤 데이터를 합쳐서 반환합니다.
2. 프론트엔드 맞게 데이터를 가공 가능
백엔드 서비스는 보통 도메인 중심으로 API를 설계하는걸로 알고있는데 알다시피 프론트는 화면 중심인 데이터가 필요하게 됩니다.
예를 들어 서비스에서 아래와과 같은 데이터를 반환한다고 가정해 보겠습니다.
{
"first_name": "Seo",
"last_name": "Yeon"
}
BFF에서는 다음과 같이 할 수 있는데
{
"name": "Seo Yeon"
}
프론트엔드에서는 별도의 가공 없이 바로 사용할 수 있습니다.
3. 클라이언트별 API를 분리 가능
서비스에는 여러 클라이언트가 존재할 수 있는데
- Web
- Mobile
- Admin
각 클라이언트는 필요한 데이터가 다르기 때문에 이런 구조를 만들 수 있고
이렇게 하면 각 클라이언트마다 다른 API를 제공할 수 있습니다.
하지만 개인적인 의견으로는..
BFF는 좋은 아키텍처 패턴이긴하지만 모든 프로젝트에 반드시 필요한 것은 아닙니다.
특히 작은 프로젝트나 학교 프로젝트에서는 오히려 과한 구조가 될 수도 있다고 생각합니다..
BFF의 단점
1. 서버 비용이 추가 발생
BFF는 결국 서버 하나가 더 생기는 구조입니다.
즉 아래처럼 프론트와 백엔드 사이에 서버가 하나 더 생기죠..
Frontend
↓
BFF 서버
↓
Backend API 서버
서버가 하나 더 늘어나기 때문에 서버 비용, 인프라 관리, 배포 관리 등의 부담이 생깁니다.
특히 AWS 같은 클라우드를 사용하는 경우 비용이 많이 증가합니다.
2. 아키텍처가 복잡도
BFF를 도입하면 시스템 구조가 또 다음처럼 바뀌는데요
Frontend
↓
BFF
↓
Backend Services
↓
Database
프로젝트 규모가 작다면 굳이.. 이런 구조까지 만들 필요는 없습니다.
오히려 디버깅 어려워지고 코드 흐름이 복잡해질 것 같아요.
3. 작은 프로젝트에서는? X
예를 들어 저희 학교 프로젝트나 작은 팀 프로젝트에서는 사용자 수가 많지 않고 서비스 규모도 크지 않기 때문에
단순한 REST API 구조가 더 적합한 경우가 많습니다. 지금 저희가 쓰고있는것처럼요
즉 다음과 같은 구조만으로도 충분할 수 있습니다.
Frontend
↓
Backend API
이 구조가 아무래도 개발 속도, 유지보수, 인프라 관리 측면에서 더 효율적입니다.
실제로 언제 BFF가 필요할까?
다음과 같은 상황에서 BFF가 특히 유용합니다.
- 여러 클라이언트(Web, Mobile, Admin)가 존재하는 경우
- 프론트엔드에서 API 조합 로직이 매우 많은 경우
- 서비스 규모가 큰 경우
대표적으로 넷플릭스, 사운드클라우드 같은 회사에서 BFF 아키텍처를 사용한다고하네요
정리
BFF(Backend For Frontend)는 프론트엔드를 위한 전용 백엔드 계층을 만드는 아키텍처 패턴입니다.
이를 통한 여러가지 장점들이 있지만 현실적으로 생각해 보면 서버가 하나 더 필요하고 비용이 비싸서 저희 입장에선 과한 설계라고 생각합니다.
따라서 BFF는 모든 프로젝트에서 사용하는 구조라기보다는 서비스 규모와 상황에 맞게 선택해야 하는 아키텍처라고 생각합니다.
오늘은 BFF에 대해 알아보았는데요, 프론트 입장에선 무조건 알아야한다기보단 알아두면 언젠간 취업하고 나서 쓸모있지 않을까해서 글을 적어보게 되었습니다.
