[TIL] Zuul vs Spring Clould gateway

jp·2023년 2월 6일
1

TIL

목록 보기
2/4

🐱‍💻API Gateway

API Gateway는 클라이언트 앞단에 위치하며 들어온 요청을 가지고 라우팅, 로깅, 로드밸런싱 등 다양한 역할을 할 수 있는 미들웨어이다. 클라이언트 서버와 백엔드 서버의 출입문이라고 할 수 있음. 프록시 서버같은 역할을 함.

🐱‍🏍Spring Cloud

Spring Boot를 기반으로 MSA 구축에 특화된 라이브러리들의 집합이며 Spring Cloud Netflix에는 Eureka, Ribbon, Zuul등 많은 넷플릭스 OSS가 통합되어 있다.

🐱‍🏍Zuul

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.

Zuul1 filter
Http Requst가 들어오면 원 서버로 들어가기 전에 api gateway인 zuul을 먼저 거치고 들어간다. zuul이 제공하는 기능은 대표적으로 filter 기능이 있는데 크게 4가지로 나뉜다.
zuul 1은 SpringBoot 2.4이상에서는 지원하지 않는다.

이하 설명은 Zuul 1.x 기준으로 작성됨

pre filter
원 서버로 가기 전 요청을 미리 받는 필터로 이 단계에서 인증 후 원 서버 요청을 선택한다. 로깅, 디버깅도 이 단계에서 진행된다.
routing filter
선택 한 요청을 원 서버로 라우팅하는 단계이다. 이 HTTP request는 HttpClient 또는 Netflix Ribbon(클라이언트에 탑재하는 로드밸런서)으로 생성, 보내진다.
post filter
요청이 원 서버로 라우팅 되어 보내진 이후에 실행된다. 응답에 HTTP 헤더를 추가하거나, 응답속도, 상태코드등 응답에 대한 statistics and metrics를 수집한다.
error filter
에러 발생시 실행된다.

하지만 Zuul 2.x으로 업그레이드가 되면서 아키텍쳐가 변경되었다.

Zuul2
inbound filter = pre filter
outbound filter = post filter
endpoint filter는 정적 리소스를 응답하는데 사용한다.
달라진 점은 Netty Server를 통해 요청, 응답을 관리한다는 것과 2는 비동기를 지원한다는 것이다.

🐱‍🏍Spring Cloud Gateway(SCG)

MSA에서 API Gateway를 쉽게 만들기 위한 라이브러리이다. 현재 스프링에서는 zuul대신 scg를 권고하고 있다. 성능, 호환성 등등... 제일 중요한 것은 2018년 spring cloud netflix가 maintenance 모드가 되어 개발, 패치가 중단되었다. 그래서 zuul1을 사용하던 사용자에게 spring cloud gateway를 추천한 것이다(공식추천)

어쨌든 scg는 spring5에서 새롭게 추가된 WebFlux로 만들어졌기 때문에 비동기를 지원한다.

scg 동작방식

요청이 들어오면, gateway handler mapping 단계에서 route를 어디로 보낼것인지 정하고 gateway web handler로 요청을 넘김. 여기서는 요청이 필터를 거치는데 pre(요청전), post(요청후)를 거친다.

🐱‍💻Zuul vs SCG 차이점

ZuulSpring Cloud Gateway
동작방식Blocking(동기)Non-Blocking(비동기)
동작원리Filter onlyPredicates+Filters
사용서버TomcatNetty

zuul1

zuul2

scg

그림출처

References

profile
응애 개발자지망생이 알고리즘에 고통받는 중

1개의 댓글

comment-user-thumbnail
2023년 6월 20일

zuul2. 는 netty에 비동기 방식인데 그럼 scg와의 구조적인 차이말고 각각의 장단점이 뭐가 있는건가요??

답글 달기