1. API Gateway (or API Management)

API Gateway는 API Management의 일부 기능이라고 할 수 있다.

API Management 제품이 갖는 특성은 다음과 같다.

  • Gateway 기능 : 앞단에서 API를 받아주는 역할이다. (Request & Response) 캐시에 대한 역할도 수행하며 인증/인가, 보안 등도 지원한다.
  • Publish 기능 : API 정의, 생성, 문서, 테스트, 배포 등
  • 개발자 포털 : API 사용자를 위한 문서 제공, 샘플 코드, 키 제공 등
  • 모니터링 : 전체 요청 수, 리소스 사용 수준, 데이터 양 등

2. Zuul ?

MSA(MicroService Architecture)에서 Zuul은 API Gateway 또는 API Service, Edge Service 로 정의된다. Zuul은 예상하지 못한 다양한 형태 그리고 많은 요청에 따른 트래픽에 대해 신속하게 대응하기 위해 개발되었다. 그리고 Zuul은 groovy 언어로 작성된 다양한 형태의 Filter를 실행하는데, Filter에 기능을 정의하고 이슈 발생 시 적절한 Filter를 추가함으로써 이슈에 대비할 수 있도록 한다. 이렇게 Filter를 추가함으로써 자신만의 API Gateway를 만들 수 있다.

Java를 잘 다룰 줄 안다면, Zuul로 세세한 부분까지 커스터마이즈해서 사용하기 용이하다. Zuul 2.0에서는 Netty 기반의 Non-blocking을 지원한다. 


3. Netflix에서의 Zuul?

: JVM-based router and Server-side load balancer

Zuul is the front door for all requests from devices and web sites to the backend of the Netflix streaming application. As an edge service application, Zuul is built to enable dynamic routing, monitoring, resiliency and security. It also has the ability to route requests to multiple Amazon Auto Scaling Groups as appropriate.  - From Netflix wiki
  • 동적 라우팅, 모니터링, 회복 탄력성, 보안 기능을 지원 (Filters를 통한 구현)
  • 필요에 따라 여러 개의 Amazon Auto Scaling Groups로 요청을 라우팅 (Ribbon을 통한 구현)

4. Netflix Filter의 기능

  •  Authentication and Security : 클라이언트 요청시, 각 리소스에 대한 인증 요구 사항을 식별하고 이를 만족시키지 않는 요청은 거부
  •  Insights and Monitoring : 의미있는 데이터 및 통계 제공
  •  Dynamic Routing : 필요에 따라 요청을 다른 클러스터로 동적으로 라우팅
  •  Stress Testing : 성능 측정을 위해 점차적으로 클러스터 트래픽을 증가
  •  Load Shedding : 각 유형의 요청에 대해 용량을 할당하고, 초과하는 요청은 제한
  •  Static Response handling : 클러스터에서 오는 응답을 대신하여 API Gateway에서 응답 처리

 


5. 버전 별 Filter

5.1. Zuul

  • Pre filter : 라우팅 전 실행, 로깅 및 인증 등 처리
  • Routing filter : 요청에 대한 라우팅 처리
  • Post filter : 라우팅 후 실행, 사용자 정의 헤더 추가/제거
  • Error filter : 에러 발생 시 핸들링

5.2. Zuul 2.0

  • Netter handlers : 네트워크 프로토콜, 웹서버, 커넥션 관리, 프락시 작업
  • Inbound filter : 요청을 프락시 하기 전 처리, 인증/라우팅/Request 변경 등
  • Endpoint filter : 정적 응답 반환, 요청을 백엔드 서비스로 프락시
  • Outbound filter : 응답이 반환된 후 실행, gzip, 사용자 정의 헤더 추가/제거 

6. Zuul을 도입한 아키텍처 예시

  • API Gateway (Zuul) : 외부와 Reqeust/Response ▶ 단일 엔드포인트, 서킷 브레이킹, 로드 밸런싱, 인증/인가
  • Service Registry (Eureka) : 개별 Spring Boot 서비스와 Zuul 사이
  • Queue (Kafka, Zookeeper) : 개별 DB들과 연결 

7. 기타 오픈 소스 API 제품

Zuul과 같은 오픈 소스 계열의 API 제품 들이다.

  • Kong : 메인이 되는 Kong, 분석/디버그를 위한 갈릴레오, 개발자 포털을 위한 젤라토, 마켓 플레이스 등으로 구성
  • Tyk : 경량형 API 관리 솔루션
  • API Umbrella : API 노출에 중점을 둔 솔루션