MSA에서 API Gateway가 왜 필요한지를 routing과 인증·보안·관측·탄력성 같은 횡단 관심사의 중앙화로 설명하고, client별 business 조합을 맡는 API Gateway Pattern(frontend server)과의 책임 경계를 명확히 구분한다. 배달의민족의 실제 Spring Cloud Gateway 구성으로 마무리한다.
핵심 포인트- Zuul·AWS API Gateway·Kong·Spring Cloud Gateway를 비교해 공통 역할을 추출 — API Gateway는 요청을 알맞은 service로 routing하고 여러 service가 반복 구현할 인증·보안·monitoring·resilience를 한곳에서 처리하는 계층
- 마이배민처럼 회원·쿠폰·포인트·결제를 조합하는 문제는 client 요구에 맞춘 API를 주는 frontend server(API Gateway Pattern)가 해결하며, domain 분할 자체가 아니라 Conway 법칙으로 frontend server가 늘고 공통 policy를 공유하는 service 수가 커져 변경 비용이 선형 증가할 때 중앙 Gateway가 필요 — Gateway로 frontend server를 대체하면 business가 공통 layer에 섞이는 문제가 재발
- 배민은 단일 실패점을 피해 영향도별 다중 server group에 service를 배치하고 동일 codebase 공유로 DNS 전환·event 전용 group 분리를 가능케 했으며, Spring Cloud Gateway를 database 설정·filter chain으로 확장해 JWT 검증 결과를 passport로 전달하고 host·token·IP routing, abuse 차단, rate limiting·circuit breaker·retry를 요청별 적용
왜 읽나MSA에서 Gateway와 BFF의 책임을 헷갈리기 쉬운 개발자에게 개념적 경계와 대규모 운영 구성을 함께 짚어주는 정리.