MSA

[MSA] API Gateway와 BFF 패턴 완전 정복

인생아 2025. 7. 23. 12:15
반응형

마이크로서비스 아키텍처(MSA)를 도입하면 반드시 부딪히게 되는 문제가 있다. 바로 “클라이언트는 어떤 서비스에 요청을 보내야 하는가?”이다.
서비스를 기능별로 잘게 쪼개고 나면 사용자는 로그인, 상품 조회, 결제 등 다양한 기능을 위해 여러 마이크로서비스에 요청을 보내야 한다.
이때 등장하는 것이 바로 API Gateway이다.
또한 모바일, 웹 등 다양한 클라이언트에 맞춤형 응답을 제공하기 위한 BFF(Backend for Frontend) 패턴도 함께 고려해야 한다.

✅ API Gateway란 무엇인가?

API Gateway는 클라이언트와 내부 마이크로서비스들 사이의 중간 관문 역할을 한다.
모든 클라이언트 요청은 API Gateway를 통해 들어오고, 내부에서 적절한 마이크로서비스로 라우팅, 인증, 로깅, 트래픽 제어 등을 수행한다.

🧩 주요 기능

  • 라우팅: 클라이언트 요청을 적절한 서비스로 전달한다.
  • 인증/인가 처리: JWT 토큰 검사 등 보안 기능을 중앙 집중화한다.
  • 요청/응답 변환: REST → gRPC 등 형식 변환이나 필드 재정의 가능하다.
  • 속도 제한, 캐싱: 트래픽 급증 시 보호 역할을 수행한다.
  • 로깅/모니터링: 모든 요청 흐름을 추적하고 기록한다.

즉, API Gateway는 MSA의 진입점이자 보안·성능·운영의 핵심 축이라고 할 수 있다.

반응형

📦 실전에서 많이 쓰이는 API Gateway 솔루션

솔루션 특징 기술 스택
Spring Cloud Gateway Spring Cloud 생태계와 자연스럽게 통합된다. Java, Spring
Kong 고성능, 확장성 중심. 플러그인 기반이다. Lua, Nginx
Nginx 경량 Reverse Proxy로 활용 가능하다. C 기반
AWS API Gateway 서버리스 아키텍처와 궁합이 좋다. Cloud Native
Istio Ingress Gateway Service Mesh 환경에서 사용된다. Kubernetes 기반

MSA 초기에 가장 널리 사용되는 선택지는 Spring Cloud Gateway이다.

🧠 BFF(Backend for Frontend) 패턴이란?

BFF(Backend for Frontend)는 프론트엔드 종류별로 전용 백엔드 API 레이어를 따로 두는 구조이다.
모바일 앱, 웹, 관리자 콘솔 등의 UI는 서로 다른 UX와 데이터 포맷을 요구하기 때문에 하나의 공통 API로는 한계가 생긴다.
이때 BFF를 도입하면 다음과 같은 이점이 있다.

🎯 BFF의 핵심 목적

  • UI 특화 응답 구성: 모바일은 필드 최소화, 웹은 상세 정보 제공 등 맞춤형 응답 가능하다.
  • 프론트와 백엔드의 독립 개발 지원: 화면 수정에 따라 백엔드를 반복적으로 수정할 필요가 없다.
  • 비즈니스 로직과 UI 로직 분리: 복잡한 데이터 조합을 프론트가 아닌 BFF에서 처리하게 한다.

예를 들어 모바일 앱에서는 상품명과 가격만 있으면 되지만, 웹에서는 옵션 정보, 재고 정보까지 필요할 수 있다.
이때 BFF가 각각의 요청을 받아 내부 마이크로서비스로부터 데이터를 조합해 맞춤형으로 응답해준다.

🧪 API Gateway vs BFF 비교

항목 API Gateway BFF
역할 요청 라우팅, 인증, 보안 등 통합 처리 프론트엔드 별 맞춤 API 구성
위치 시스템의 진입점 API Gateway 뒤쪽, 내부 서비스로 분리 가능
대상 전 서비스 공통 처리 특정 UI 전용 백엔드
장점 보안, 트래픽 제어, 중앙 집중화 빠른 프론트 대응, 맞춤화, 유연성
단점 과도한 책임 집중 가능 서비스가 늘어나면 관리 포인트 증가

이 둘은 대체 관계가 아니라 보완 관계이다.
API Gateway는 보안과 운영을, BFF는 사용자 경험을 책임지는 구조로 함께 설계해야 한다.

반응형

🛠️ 실전 예시 아키텍처

이런 구조를 도입하면 한 가지 화면 변경을 위해 여러 마이크로서비스를 수정할 필요 없이 BFF만 수정하면 되므로 생산성이 크게 향상된다.

🧱 BFF 구현 전략

  • 경량 서비스로 분리: 복잡한 상태를 가지지 않게 설계한다.
  • 프론트 팀 주도로 개발: 실제 UI 흐름을 잘 아는 팀이 BFF를 소유해야 한다.
  • 배포 속도 고려: 화면 UI에 따라 배포 주기가 잦기 때문에 단독 배포가 가능해야 한다.
  • GraphQL 적용 고려: 다양한 클라이언트 요구를 유연하게 처리할 수 있다.

실제 네이버, 토스, 배달의민족 같은 기업들도 BFF 구조를 도입해 모바일/웹에 특화된 서비스 구조를 만들고 있다.

✅ 결론

MSA 구조에서 API Gateway는 기능 중심의 보안·라우팅·통합 관리,
BFF는 클라이언트 중심의 유연한 응답 구성을 책임지는 두 축이다.
이 둘을 적절히 조합하면 확장성 높은 아키텍처를 구현할 수 있다.
하나로 통일하려 하지 말고, 목적에 맞는 역할 분리를 통해 사용자 경험과 서비스 운영을 동시에 향상시키는 것이 중요하다.

📌 참고한 공식 문서

 

반응형