Backend & Spring (스프링)

API 게이트웨이와 Spring Cloud Zuul Filter

jw92 2022. 10. 13. 16:01

1. API Gateway

API Gateway란 마이크로서비스 아키텍처(Microservice Architecture, MSA)에서 여러 클라이언트 요청을 적절한 서비스로 프록시하거나 라우팅하기 위한 서비스이다.

MSA 개념이 대중화된 지금 API Gateway의 중요성도 더 커지고 있다.

MSA에서는 도메인별로 하나 이상의 서비스와 그에 따른 서버가 존재하기 때문에 이 서비스를 사용하는 클라이언트 입장에서는 다수의 end point가 생기게 되며, 관리하기가 힘들다.

그래서 MSA 환경에서 서비스에 대한 도메인을 하나로 통합할 수 있는 API Gateway가 필요하다.

 

API Gateway는 일반적으로 아래 역할을 수행한다.

트래픽 관리, CORS 지원, 권한 부여 및 액세스 제어, 제한, 모니터링 및 API 버전 관리 등

 

처음 API Gateway를 봤을 때, GoF의 Facade 패턴과 거의 똑같아 보였다 (Sl4j로 대표되는)

하지만 Facade는 외부 클라이언트에게 복잡한 내부를 단순하게 제공하는 것이고,

Gateway는 내부의 service들에게 외부의 자원을 간단하게 보여준다는 것이다.

 

즉,

Facade는 외부 시스템이 우리 시스템에 접근할 때 더 simple한 interface를 제공하고,

Gateway는 내부 시스템이 외부 시스템과 commnunication 하는 것을 더 편리하게 해준다는 점이다. (그게 외부 시스템 입장에서 더 복잡해질 수도 있다는 것!)

그렇다해도 어떤 면에서는 Gateway가 Facade의 일종이라고 볼 수도 있을 것 같다.

 

2. Zuul Filter - https://github.com/Netflix/zuul

API Gateway 가 가져야 할 여러 기능 중 Router와 Filter에 특화된 기능을 제공해준다.

 

Zuul의 Routing:

Routing is an integral part of a microservice architecture. For example, / may be mapped to your web application, /api/users is mapped to the user service and /api/shop is mapped to the shop service. Zuul is a JVM-based router and server-side load balancer from Netflix.

 

  • Authentication
  • Insights
  • Stress Testing
  • Canary Testing
  • Dynamic Routing
  • Service Migration
  • Load Shedding
  • Security
  • Static Response handling
  • Active/Active traffic management