Spring cloud zuul proxy - API gateway

요즘 MSA(Micro Service Architecture) 에 빠져서 이것 저것 건드려 보고 있다.
그러다가 zuul proxy라는 걸 알게되어서 끄적끄적 대다가 만져봤는데,
재미있어서 오랜만에~ 블로깅하려고 한다.

원래 그동안 한 건 많은데 뭔가 정리하기 너무 귀찮은데
이건 방금 해서 아 이참에 다시 블로깅 시작해야지 하는 맘에 올린다.


간단하게, zuul 이 뭐하는 놈인가 봤더니,
일단 proxy가 뭐냐?

대략 위키나 구글링 해보면,
서버와 클라이언트 사이에서 중계기 역할을 한다고 한다.
proxy 서버의 역할은 캐싱 및 라우팅 역할이 제일 큰 것 같다.

클라이언트로 부터 요청이 들어왔을 때 수많은 서비스들 중에
어디 서비스로 찔러줄건지 교통정리 해주거나(?)

여러 번 요청 들어온 거는 캐싱해놨다가 뭐 빠르게 응답을 주는 등 리소스 관리에도 도움을 줄 수 있는 것 같다.
짧고 짧은 나의 생각에서 정리해 보았다.

그래서 zuul이 뭔가 했더니 대략 위에 것들을 쉽게(?) 해줄 수 있도록 해주는데
넷플릭스에서 만들었다고 했나? 암튼 많이들 쓰는 것 같다.
더 공부 해야 겠다.



지금 부터는 대략 끄적여 본 것을 나열 해봐야겠다.
먼저 spring boot Maven 프로젝트 2개를 만든다.

하나는 zuul proxy server 로 port 는  8080

나머지 하나는 레알 찐탱 간단하게 REST API(?)라고
하기에 민망한 서버로 port 는 8081 로 만든다.

먼저 proxy server에서 Maven에 디펜던시 추가


그 다음에는, application.yml 에다가 라우팅 설정을 해준다.
/foos/** 에 매칭되는 path는 전부 http://localhost:8081/foos 로 라우팅 해주겠다는 설정이다.


그리고 @EnableZuulProxy 붙여주고

마지막으로 ZuulFilter를 상속받아 컴포넌트를 만들어 준다.
type 설정해주고, order는 filter 1개 밖에 없어서 중요하진 않지만 0으로 맨먼저~
shouldFilter는 필터 사용 여부이고
run에서 context에서 request 가져와서 header에 임의로 내가 만든 key, value를 넣어줬다.

이제 존나 간단한 proxy server가 만들어졌다.



자 다음은 더 존나 간단한 REST API 서버를 만들겠다.
여긴 뭐 그냥  Maven에는 web

먼저 Foo라는 DTO를 만들자.



그 다음, FooController
@RestController로 만들었고, @GetMapping으로 /foos/{id} @PathVariable 을 이용하여
Foo 객체를 랜덤하게 만들어서 jackson을 통해서 json으로 serialize 해준다.
그리고 여기서 중요한게 request에서 header에 아까 proxy server에서 넣어준
ndgndg91 이 있으면 response에 동일하게 넣어준다.


마지막으로 application.properties 에서 port를 8081로 설정해준다.
.yml 파일로 리팩터하기 귀찮아서 놔뒀다.


그럼 서버 두대를 다 돌리고~
아래처럼, http://localhost:8080/foos/4 로 쏘면
http://localhost:8081/foos/4 로 라우팅 해준다. 그리고
response header에도 ndgndg91 : TestNamDongGil 이 찍힌걸 확인 할 수 있다.


추가적으로 로그 찍힌거 확인하기


참고
https://www.baeldung.com/spring-rest-with-zuul-proxy
https://cloud.spring.io/spring-cloud-netflix/multi/multi__router_and_filter_zuul.html


내 git repository
https://github.com/ndgndg91/MSA_zuul_security_jwt

댓글

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째