마이크로서비스 아키텍처(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는 클라이언트 중심의 유연한 응답 구성을 책임지는 두 축이다.
이 둘을 적절히 조합하면 확장성 높은 아키텍처를 구현할 수 있다.
하나로 통일하려 하지 말고, 목적에 맞는 역할 분리를 통해 사용자 경험과 서비스 운영을 동시에 향상시키는 것이 중요하다.
📌 참고한 공식 문서
- Spring Cloud Gateway 공식 문서
- BFF 패턴 설명 - Sam Newman, ThoughtWorks
- API Gateway vs BFF 사례 - Netflix Tech Blog
'MSA' 카테고리의 다른 글
| [MSA] JWT와 OAuth2로 인증 처리하는 방법 (2) | 2025.07.24 |
|---|---|
| [MSA] Kafka vs RabbitMQ: 메시지 기반 아키텍처 완전정복 (2) | 2025.07.23 |
| [MSA] Spring Cloud Config와 Vault로 설정 통합 관리 (0) | 2025.07.23 |
| [MSA] Circuit Breaker로 장애 격리 설계 (Hystrix, Resilience4j) (2) | 2025.07.23 |
| [MSA] Eureka와 Consul로 서비스 디스커버리 구현하기 (1) | 2025.07.23 |
| [MSA] 서비스 통신 방법 비교: Feign vs RESTTemplate vs WebClient (0) | 2025.07.23 |
| [MSA] 서비스 분리와 도메인 중심 설계(DDD)의 핵심 (1) | 2025.07.23 |
| [MSA] 마이크로서비스 아키텍처란 무엇인가? (1) | 2025.07.22 |