BFF(BackEnd For FrontEnd)를 적용하는 이유에 대해서

2025. 9. 18. 09:37·🍞 BackEnd

요즘 서비스는 대부분 MSA(Micro Service Architecture) 기반으로 개발한다.

서비스마다 API가 독립적으로 존재하다 보니, 프론트엔드는 여러 API를 호출해 원하는 데이터를 조합해야 한다.

 

이 과정에서 문제가 발생하는데 예를 들어,

  • Web, Android, iOS 등 플랫폼별로 서로 다른 데이터 요구사항이 발생한다.
  • 원하는 데이터 형태를 얻기 위해 여러 API 응답을 조작하고 합치고 가공해야 하는 일이 생긴다.
  • 결과적으로 프론트엔드 단에서 비즈니스 로직이 과도하게 쌓이고, 렌더링 성능까지 저하되는 문제가 나타난다.

이때 프론트엔드는 UI 스레드가 렌더링과 로직 수행을 같이 담당하게 되면, 화면 반응 속도는 느려지고 코드베이스는 복잡해져 유지보수조차 힘들어진다. 이 문제를 해결하기 위해 BFF(Backend for Frontend)를 적용하는 것이다. 여러 API를 한 번에 모아 프론트엔드가 필요한 형태로 가공해주니, 프론트에서는 UI 구현에만 집중할 수 있고, 성능과 개발 생산성이 모두 향상된다.

API 방식과 BFF 방식의 차이

일반적인 API 방식

다양한 플랫폼을 동시에 지원하는 API는 종종 애플리케이션에서 실제로 사용하지 않는 데이터까지 포함하는 경우가 많다. 예를 들어, 웹·안드로이드·iOS가 같은 API를 호출한다고 가정해보자. 이때 백엔드 개발자는 모든 플랫폼의 요구사항을 충족시키기 위해 필요 이상의 데이터를 한 번에 내려주는 방식으로 API를 구현하게 된다. 여기에 더해 백엔드에서 내부 처리용으로 필요했던 부가 데이터까지 딸려오거나, 하나의 화면을 구성하기 위해 여러 API를 연속해서 호출해야 하는 상황도 쉽게 발생한다.

 

문제는 API에 직접적으로 의존할 때 나타난다.

 

  • MSA(Micro Service Architecture) 환경에서는 API 엔드포인트가 분리되면서 따라오는 팔로업 이슈가 생긴다.
  • 브라우저 환경이라면 피할 수 없는 CORS 문제도 있다.
  • API를 설계하는 쪽에서는 여러 플랫폼과 스펙을 맞추느라 커뮤니케이션 비용이 급증한다.
  • 플랫폼별 인증 방식이 다른데 이를 억지로 통합하려다 보니, 오히려 구조가 꼬이는 경우도 생긴다.
  • 무엇보다 클라이언트 입장에서는 “화면에 필요한 데이터만 받는” 것이 이상적인데, 현실에서는 partial response가 쉽지 않다.

일반적으로 각각 API를 호출하게 되면, 응답 값을 그대로 받아서 보통은 가공해서 상태관리에 저장하게 된다. GET으로 호출하게 되면 브라우저의 캐시를 통해 응답 값을 그대로 받아 처리할 수 있겠지만, 매번 상태관리에서 연산이 필요한 것은 마찬가지다. 중요한 것은 화면에 필요하지 않은 값들이 내려오고 브라우저쪽에서는 두 개의 API 요청을 각각 해야 한다는 점이다.

 

 

BFF 구조

앞서 말한 API 의존성 문제들을 해결하기 위해 등장한 개념이 바로 BFF(Backend For Frontend)다. 말 그대로 프론트엔드를 위한 중간 서버를 두는 것이라고 이해하면 된다.

 

구조를 보면, 하나의 프론트엔드에는 하나의 BFF가 붙어야 한다. 그리고 이 BFF는 해당 프론트엔드가 필요로 하는 데이터 형태에 맞춰 구현할 수 있다. 그래서 여러 플랫폼(Web, iOS, Android 등)을 동시에 지원하지 않는 서비스라면 BFF를 굳이 둘 필요가 없을 수도 있다.

 

BFF가 하는 일은 단순하다.

  • 흩어진 여러 API 데이터를 프론트엔드 요구사항에 맞게 통합해 가공한다.
  • 프론트엔드와 백엔드를 느슨하게 연결해 독립성을 유지시켜준다.
  • 궁극적으로는 프론트엔드 개발자가 직접 구현하고 운영하는 게 가장 이상적이다.

결과적으로, 앞에서 언급했던 문제들을 BFF에서 처리할 수 있다.

  • MSA 환경에서 엔드포인트가 늘어나며 생기는 팔로업 문제
  • 브라우저 특성상 피할 수 없는 CORS 이슈
  • 플랫폼마다 다른 스펙을 맞추느라 생기는 커뮤니케이션 비용
  • 플랫폼별로 제각각인 인증 방식 처리
  • 클라이언트가 원하던 “화면에 필요한 데이터만 받는” partial response

즉, BFF는 프론트엔드가 UI와 사용자 경험에 집중할 수 있도록 환경을 정리해주는 역할을 맡는다.

 

 

- 참조

https://tech.kakaoent.com/front-end/2022/220310-kakaopage-bff/

저작자표시 (새창열림)

'🍞 BackEnd' 카테고리의 다른 글

[Postman] Postman으로 Mock Server 구축하기  (0) 2022.11.10
'🍞 BackEnd' 카테고리의 다른 글
  • [Postman] Postman으로 Mock Server 구축하기
박빵이
박빵이
2025년에도 갓생살기
  • 박빵이
    기억보다 기록
    박빵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (337)
      • 🍞 FrontEnd (97)
        • HTML+CSS (4)
        • JavaScript (17)
        • TypeScript (4)
        • React (52)
        • Next.js (2)
        • Android (15)
      • 🍞 BackEnd (24)
        • Java (15)
        • Node.js (6)
        • Spring (1)
      • 🍞 Cloud & Infra (0)
        • AWS SAA (0)
        • Microsoft Azure (0)
      • 🍞 Algorithm (147)
        • C++ (4)
        • Baekjoon (41)
        • Programmers (97)
      • 🍞 Computer Science (18)
        • 운영체제 (1)
        • 데이터 통신 (6)
        • 네트워크 (6)
        • 데이터베이스 (1)
      • 🍞 대외활동 & 부트캠프 (42)
        • 삼성 청년 SW 아카데미 (1)
        • LG유플러스 유레카 (0)
        • 한국대학생IT경영학회 (1)
        • IT연합동아리 UMC (17)
        • 길벗 블로깅 멘토 (18)
        • IT연합동아리 피로그래밍 (3)
        • 개발 컨퍼런스 (2)
  • 블로그 메뉴

    • Admin
  • 링크

    • GitHub
  • 인기 글

  • 태그

    react
    Front
    Java
    알고리즘
    안드로이드
    백준
    map
    C++
    umc
    level2
    level1
    JavaScript
    Android
    코딩자율학습
    프로그래머스
    코틀린
    유니온파인드
    위상정렬
    길벗 블로깅 멘토링
    길벗 블로깅 멘토
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박빵이
BFF(BackEnd For FrontEnd)를 적용하는 이유에 대해서
상단으로

티스토리툴바