0. 이 글을 작성하는 이유
회사에서 API Gateway에 Spring Cloud Netflix Zuul이 적용되어 있는데 이게 뭐 하는 놈인지 간단하게 알고 가기 위함(추후 더 자세히 작성되는 글이 올라올 수도..)
1. Spring Cloud와 Spring Cloud Zuul
우선 Spring Cloud는 MSA를 구축할 때 도움이 되는 여러 기능들을 제공한다.
Spring Cloud의 프로젝트 안에 다양한 프로젝트들이 존재하는데 그중 Spring Cloud Netflix가 존재한다.
Spring Cloud Netflix에는 Zuul이 포함되어 있다.
정확히는 Spring Cloud Zuul이 아닌 Netflix Zuul이고 이를 Spring Cloud에서 활용한 기술이 활용한 기술이 Spring Cloud Netflix이고 그 안에서 Zuul을 사용하고 있어 Spring Cloud Netflix Zuul이다.
그렇다면 Zuul의 역할은 무엇이고 어떻게 동작하는가?
2. Zuul
최초 API의 진입점이 되어 LB, routing, monitoring, security등을 해준다.
zuul-netflix의 component들에 대해는 아래와 같이 존재한다.
Ribbon : RR방식의 LB기능을 제공한다.
Eureka : 서비스 정보를 Registry에 등록하여 관리할 수 있도록 하는 기능
Archaius : 여러 config 저장소로부터 동적 property를 관리하는 기능
Servo : 모니터링
Hystrix : Circuit Breaker
Astyanax : Deprecated되었습니다
zuul에서 제공하는 routes옵션에 대해 간단히 예제를 적어보겠습니다.
zuul:
routes:
address:
url: "http://host.myaddress.internal:1800"
delivery:
url: "http://host.myaddress.internal:1900"
routes 옵션을 통해 특정 path에 대한 url처리를 돕습니다.
format : serviceURI/service_id/~~~~~
e.g. http:127.0.0.2/address/123442
위 format에서 service_id를 보고 어디로 던져줄지 결정합니다.
위 예제에서는 address를 service_id로 하여 어디로 던져줄지 결정합니다.
여기서 sensitiveHeaders라는 옵션을 걸 수 있습니다.
쿠키, 세션등의 데이터를 그대로 downstream(routing 당하는 서비스)으로 넘겨줄지 선택할 수 있는 옵션으로
뒤에 값을 비워두면 모든 데이터를 그대로 전달합니다.
zuul:
routes:
address:
url: "http://host.myaddress.internal:1800"
sensitiveHeaders:
delivery:
url: "http://host.myaddress.internal:1900"
sensitiveHeaders:
그리고 쿼리 문자열에 대한 옵션이 있습니다.
force-original-query-string-encoding: true
쿼리 문자열 원본 그대로 가져올지 정하는 옵션으로 true로 설정 시 쿼리를 downstream으로 전달하면서 바뀜 없이 그대로 전달합니다.
3. 마치며
점점 적응하면서 API Gateway와 spring-cloud 등에 대해 더 자세히 적어보도록 하겠습니다.
ref
https://techblog.woowahan.com/2523/
https://netflixtechblog.com/announcing-zuul-edge-service-in-the-cloud-ab3af5be08ee
https://hmj2088.medium.com/zuul-proxy-b32d39f1e738
'JAVA > spring' 카테고리의 다른 글
Spring API Gateway 간단한 예제 (0) | 2023.12.10 |
---|---|
[Test] h2대신 postgresql을 DB로 대체해본.ssul (1) | 2023.11.04 |
Spring Security - CSRF를 disable?(간단, 요약) (0) | 2023.08.11 |
테스트 진행하기(Entity 기본과 약간의 Repository를 곁들인) (0) | 2023.08.05 |
Spring + discord webhook 연동하기 (2) | 2023.07.13 |