시스템 디자인

서비스가 커질수록 API는 왜 점점 더 못생겨질까요? - BFF 패턴으로 풀어보는 진화하는 API 설계

프론트엔드도, 백엔드도 만족시키는 우아한 API 설계 패턴의 비밀

2024.10.24 | 조회 361 |
0
|

데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

Introduction

"모바일용 API를 따로 만들어야 할까요?"

"웹용 API는 또 어떻게 하죠?"

"파트너사 연동은요?"

대규모 서비스를 운영하다 보면 어김없이 마주치게 되는 질문들입니다. 처음에는 깔끔했던 API가 클라이언트가 늘어날수록 점점 더 복잡해지고, 결국에는 누구도 만족시키지 못하는 괴물이 되어버리곤 하죠. Netflix, Twitter, SoundCloud와 같은 글로벌 기업들은 이런 문제를 어떻게 해결했을까요?

여기서 등장하는 것이 바로 'BFF(Backend For Frontend) 패턴'입니다. 직역하면 '프론트엔드를 위한 백엔드'인데요. 이름부터 뭔가 특별하지 않나요? 마치 절친한 친구처럼 프론트엔드의 특성과 요구사항을 깊이 이해하고 맞춤형 서비스를 제공하는 이 패턴은, 현대 마이크로서비스 아키텍처의 핵심 설계 패턴으로 자리잡았습니다.

오늘은 이 BFF 패턴의 모든 것을 System Design Codex의 Intro to BFF Pattern과 함께 파헤쳐보려고 합니다. 각 클라이언트의 요구사항을 우아하게 수용하면서도, 백엔드의 복잡성은 최소화할 수 있는 이 설계 패턴의 장단점과 실제 적용 방법까지, A부터 Z까지 자세히 알아보겠습니다. 특히 실무에서 자주 부딪히는 코드 중복과 복잡성 관리에 대한 해결책도 함께 다뤄볼 예정이니, 끝까지 함께해주시기 바랍니다.


BFF(Backend For Frontend) 패턴 입문하기

개발자의 든든한 동반자

소프트웨어 개발에서는 때로 BFF가 필요한 순간이 있습니다. 소프트웨어 개발에서 BFF(Backends-for-Frontends)는 각각의 디바이스나 인터페이스 유형에 맞춘 전용 API 게이트웨이를 구축하는 설계 패턴을 말합니다. 예를 들어, 웹 브라우저용, 모바일 앱용, 또는 공개/파트너 API용으로 각각 별도의 BFF를 구축할 수 있습니다. 각 BFF는 클라이언트와 기저 서비스 사이에서 특화된 중간 계층으로 작동하며, 해당 클라이언트의 고유한 요구사항에 맞게 API를 최적화합니다.

BFF의 핵심 특징

  1. 전용 API 게이트웨이: 각 BFF는 특정 디바이스나 인터페이스 유형을 위한 전용 API 게이트웨이 역할을 수행합니다. 이를 통해 해당 클라이언트 유형에 특화된 로직과 요구사항을 캡슐화할 수 있습니다.
  2. 맞춤형 기능: BFF는 단순한 API 라우팅을 넘어 다음과 같은 다양한 기능을 수행할 수 있습니다:
    1. 요청 속도 제한(rate limiting)
    2. 사용자 인증(authentication)
    3. 헤더 데이터 정제(header sanitization)
    4. 캐시 제어(cache control)
  3. 하위 계층 서비스와의 분리: BFF를 도입함으로써 클라이언트별 특화 로직을 하위 계층 서비스로부터 분리할 수 있습니다. 이를 통해 각 서비스는 핵심 기능에만 집중하고, 클라이언트별 요구사항은 BFF가 처리하도록 할 수 있습니다.

BFF 패턴의 이점

BFF 패턴을 도입하면 다음과 같은 이점을 얻을 수 있습니다:

  1. 안정성: 클라이언트 유형별로 독립된 BFF를 운영함으로써, 특정 BFF에서 발생한 배포 오류나 문제가 해당 클라이언트에만 국한됩니다. 다른 클라이언트는 영향을 받지 않아 전체 시스템의 안정성이 향상됩니다.
  2. 자율성: 각 BFF는 담당하는 클라이언트의 특수한 요구사항에 맞춰 최적화할 수 있습니다. 예를 들어, 모바일 클라이언트는 네트워크 호출 횟수를 줄이기 위해 더 큰 응답을 선호할 수 있고, 웹 클라이언트는 더 작은 페이로드를 선호할 수 있습니다. BFF를 통해 이러한 다양한 요구사항을 유연하게 대응할 수 있습니다.
  3. 개발 속도: BFF가 제공하는 안정성과 자율성은 개발자들의 자신감을 높이고 개발 속도를 향상시킵니다. 각 팀은 다른 클라이언트에 영향을 주지 않고 담당 BFF를 독립적으로 개발할 수 있습니다.

BFF 패턴의 단점

BFF 패턴은 많은 이점을 제공하지만, 다음과 같은 단점도 고려해야 합니다:

  1. 코드 중복: 여러 BFF가 인증이나 비즈니스 로직과 같은 공통 기능을 구현할 때 코드가 중복될 수 있습니다. 이는 유지보수를 어렵게 만들고 일관성 유지에 문제를 일으킬 수 있습니다.
  2. 복잡성: BFF가 연결 로직과 서비스 오케스트레이션을 담당하면서 시간이 지날수록 복잡도가 증가할 수 있습니다. 이러한 복잡성을 관리하기 위해서는 세심한 설계와 지속적인 유지보수가 필요합니다.
  3. BFF 난립: 개발자들이 사소한 차이에도 새로운 BFF를 만들고 싶어 할 수 있어, BFF가 과도하게 많아질 수 있습니다. 이는 전체 시스템의 복잡도를 높이고 유지보수 부담을 가중시킬 수 있습니다.

BFF 구현 모범 사례

BFF 패턴을 효과적으로 활용하기 위해 다음과 같은 모범 사례를 참고하세요:

  1. 명확한 클라이언트 요구사항 정의: 각 클라이언트 유형의 구체적인 요구사항을 철저히 분석하고 이에 맞춰 BFF를 설계하세요. 사소한 차이를 위해 불필요한 BFF를 만드는 것은 지양하세요.
  2. 코드 중복 최소화: BFF 간에 공통으로 사용되는 기능을 파악하고, 이를 공유 라이브러리나 서비스로 분리하여 코드 중복을 줄이세요.
  3. 명확한 경계 설정: 각 BFF의 책임 범위를 명확히 정의하고 전체 시스템 아키텍처와의 정합성을 확보하세요. BFF에 과도한 기능을 부여하지 않도록 주의하세요.
  4. 성능 모니터링과 최적화: BFF의 성능을 지속적으로 모니터링하고 클라이언트의 요구사항과 사용 패턴에 따라 최적화하세요. 리소스를 효율적으로 활용하고 확장성을 확보하세요.

여러분은 BFF 패턴을 사용해보셨나요?

 


👥 더 나은 데브필을 만드는 데 의견을 보태주세요

Top 1% 개발자로 거듭나기 위한 처방전, DevPill 구독자 여러분 안녕하세요 :) 

저는 여러분들이 너무 궁금합니다. 

어떤 마음으로 뉴스레터를 구독해주시는지, 

어떤 환경에서 최고의 개발자가 되기 위해 고군분투하고 계신지, 

제가 드릴 수 있는 도움은 어떤 게 있을지. 

아래 설문조사에 참여해주시면 더 나은 콘텐츠를 제작할 수 있도록 힘쓰겠습니다. 설문에 참여해주시는 분들 전원 1개월 유료 멤버십 구독권을 선물드립니다. 유료 멤버십에서는 아래와 같은 혜택이 제공됩니다.

  • DevPill과의 1:1 온라인 커피챗
  • 멤버십 전용 슬랙 채널 참여권
    • 채용 정보 공유 / 스터디 그룹 형성 / 실시간 기술 질의응답
  • 이력서/포트폴리오 템플릿

 

설문 참여하고 유료 멤버십 혜택받기 →

Top 1% 개발자로 거듭나는 확실한 처방전, 데브필입니다.

 

 

다가올 뉴스레터가 궁금하신가요?

지금 구독해서 새로운 레터를 받아보세요

이번 뉴스레터 어떠셨나요?

데브필 DevPill 님에게 ☕️ 커피와 ✉️ 쪽지를 보내보세요!

댓글

의견을 남겨주세요

확인
의견이 있으신가요? 제일 먼저 댓글을 달아보세요 !
© 2024 데브필 DevPill

Top 1% 개발자로 거듭나는 성공 처방전

뉴스레터 문의dev.redpill@gmail.com

자주 묻는 질문 서비스 소개서 오류 및 기능 관련 제보

서비스 이용 문의admin@team.maily.so

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울 서초구 강남대로53길 8, 8층 11-7호

이용약관 | 개인정보처리방침 | 정기결제 이용약관