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

그 다음, 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
그러다가 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
댓글
댓글 쓰기