Study/디자인 패턴

[디자인 패턴] BFF란?

AC 2024. 4. 28. 18:05

 

Agenda


  • 배경
  • BFF 패턴이란?
  • BFF 패턴의 필요성
  • BFF 패턴의 장점
  • BFF 패턴의 단점
  • BFF 패턴의 역할
  • BFF 패턴의 구현 방법
  • BFF 패턴 사용 사례
  • 결론

 

배경

많은 기업들이 MSA(Micro Service Architecture)를 채택하고 있다.

그러나, 개발하다 보면 다음과 같은 상황들이 펼쳐질 수 있다.

  • 여러 플랫폼(Web, Android, iOS 등)을 지원하게 되면서 각각 특정 데이터가 필요한 상황
  • 원하는 데이터 형태에 도달하기 위해 여러 API 호출의 응답을 조작, 혼합, 일치시키는 상황
  • 이런 상황들이 겹쳐 프론트엔드에서 복잡한 계산이나 비즈니스 로직을 작성하는 상황

코드 베이스가 점점 더 크고 복잡해지면 관리하기가 매우 어려워진다.

결국에는 코드 베이스가 통제 불가능한 상태에 이르게 되어 숨어있는 버그들을 발견하기 어려워지는데, 특히 프론트엔드에서 복잡한 계산을 수행하는 경우, 렌더링 속도가 느려질 수 있다. 이는 UI 스레드에서 렌더링과 비즈니스 로직 처리가 경합을 일으키기 때문이다.

 

 

다양한 플랫폼을 지원하는 API를 사용하면, 애플리케이션에서 실제로 필요하지 않은 데이터까지 받게 된다. 백엔드 개발자들이 여러 플랫폼의 요구사항을 충족시키기 위해 API 응답에 모든 데이터를 포함시키기 때문이다. 단일 페이지에서 여러 API를 호출하는 경우에도 유사한 문제가 발생할 수 있다.

이렇게 API에 직접 의존하게 되면 다음과 같은 이슈들이 생길 가능성이 있다.

- MSA 환경에서 API 엔드포인트 분리로 인한 복잡성 증가
- CORS 이슈 해결의 어려움
- 여러 플랫폼 간 조율과 소통의 부담 증가
- 다양한 인증 방식 통합의 복잡성
- 필요한 데이터만 선별적으로 가져오는 것의 어려움

1. BFF 패턴이란?

BFF(Backend for Frontend)는 특정 프론트엔드 애플리케이션에 맞춤화된 백엔드 계층을 말한다.

BFF는 프론트엔드 애플리케이션과 백엔드 시스템 사이에 위치하며, 프론트엔드에 필요한 데이터와 기능을 제공한다.

출처 : 구글

 

BFF(Backend For Frontend)는 API 직접 의존에 따른 문제를 해결하기 위해 등장했다.

BFF는 프론트엔드를 위한 중간 서버로, 프론트엔드 요구사항에 맞게 구현되며, 여러 플랫폼을 지원하지 않을 경우 BFF가 필요 없을 수 있다.

BFF에서는 데이터를 통합하고 프론트엔드를 백엔드에서 분리하여 생산성을 높인다. BFF를 통해 API 직접 의존에 따른 문제들을 해결할 수 있다.

- MSA 환경의 팔로업 이슈
- CORS 처리
- 다양한 플랫폼/스펙 대응
- 인증 방식 처리
- partial response

 

 

 

2. BFF 패턴의 필요성

현대 웹 애플리케이션은 점점 더 복잡해지고 있다. 단일 백엔드 시스템이 다양한 프론트엔드 환경(웹, 모바일, 데스크톱 등)을 지원하기 어려워졌고, 각 프론트엔드 환경마다 다른 요구사항과 제약 조건이 있기 때문이다. BFF 패턴은 이러한 문제를 해결하기 위해 등장했다.

 

 

3. BFF 패턴의 장점

  • 프론트엔드 전용 API: BFF는 프론트엔드 애플리케이션에 최적화된 API를 제공한다. 이를 통해 프론트엔드 개발자는 복잡한 백엔드 시스템에 대한 이해 없이 작업할 수 있다.
  • 보안 강화: BFF는 프론트엔드에 필요한 데이터만 필터링하여 제공할 수 있다. 이를 통해 불필요한 데이터 노출을 방지할 수 있다.
  • 성능 최적화: BFF는 프론트엔드 애플리케이션의 특성을 고려하여 데이터를 가공하고 캐싱할 수 있다. 이를 통해 성능을 향상시킬 수 있다.
  • 프론트엔드 독립성: BFF를 통해 프론트엔드 애플리케이션과 백엔드 시스템을 분리할 수 있다. 이를 통해 각각의 변경 사항이 서로에게 영향을 미치지 않게 할 수 있다.

 

 

4. BFF 패턴의 단점

  • 복잡성 증가: BFF 패턴은 추가적인 계층을 도입하기 때문에 시스템의 복잡성이 증가할 수 있다.
  • 개발 및 유지보수 비용 증가: 각 프론트엔드 애플리케이션마다 별도의 BFF를 구현해야 하므로 개발 및 유지보수 비용이 증가할 수 있다.
  • 데이터 중복: 동일한 데이터를 여러 BFF에서 처리해야 할 경우, 데이터 중복이 발생할 수 있다.

 

 

5. BFF 패턴의 역할

API 호출 최소화
클라이언트 별 필요한 데이터 파싱
프론트앤드 로직 최소화 가능

 

 

 

6. BFF 패턴의 구현 방법

BFF 패턴을 구현하는 방법은 다음과 같습니다.

  1. 프론트엔드 애플리케이션 식별: 먼저 BFF를 구현할 프론트엔드 애플리케이션을 식별한다.
  2. 요구사항 분석: 프론트엔드 애플리케이션의 요구사항을 분석하고, 필요한 데이터와 기능을 파악한다.
  3. BFF 설계 및 구현: 요구사항 분석을 바탕으로 BFF를 설계하고 구현한다. BFF는 백엔드 시스템과 통신하여 필요한 데이터와 기능을 제공한다.
  4. 프론트엔드 통합: 구현된 BFF를 프론트엔드 애플리케이션과 통합한다.

 

 

7. BFF 패턴 사용 사례

BFF 패턴은 다음과 같은 시나리오에서 유용하게 사용될 수 있다.

  • 마이크로서비스 아키텍처: 마이크로서비스 아키텍처에서 BFF는 각 마이크로서비스의 API를 통합하고 프론트엔드에 맞춤화된 API를 제공할 수 있다.
  • 레거시 시스템 통합: 레거시 시스템과 새로운 프론트엔드 애플리케이션을 통합할 때, BFF를 통해 레거시 시스템의 API를 추상화할 수 있다.
  • 다중 디바이스 지원: 웹, 모바일, 데스크톱 등 다양한 디바이스를 지원하는 애플리케이션에서 BFF를 활용하여 각 디바이스에 맞춤화된 API를 제공할 수 있다.

 

 

8. 결론

긴 글은 별로 좋아하지 않아서 짧게 정리 해봤다.

BFF 패턴은 프론트엔드 애플리케이션과 백엔드 시스템 간의 격차를 해소하기 위한 효과적인 방법이다. 프론트엔드 전용 API를 제공하여 개발 효율성을 높이고, 보안과 성능을 개선할 수 있다.

그러나 시스템의 복잡성이 증가하고 개발 및 유지보수 비용이 증가할 수 있다는 단점도 있다. 따라서 프로젝트의 요구사항과 제약 조건을 고려하여 BFF 패턴의 적용 여부를 결정해야 한다.

LIST