Spring Cloud/Spring Cloud GateWay
Spring cloud gateway - 4. filter를 통해 Path 수정하기
Ssemi-Column
2023. 12. 13. 15:44
728x90
저번 글에서 클라이언트가 MSA환경의 모든 서버의 주소를 알고 있어야하는 이슈를 해결하기 위해 gateway의 주소에 서버이름의 path를 붙여 보내면 gateway가 알아서 route를 하도록 했었다.
그런데, gateway의 조건문 때문에 서버도 똑같이 자기 서버이름의 path를 계속해서 써야하고, 그것을 생각 안하기 위해서 yml에 context-path를 붙여 사용했다.
그렇게 되면 API 경로가 /users/api/v1/users 로 users가 중복되어, 내눈엔 이상해보였다.
그래서 이번에는 서버는 자기 자신의 이름을 붙일 필요가 없고, 클라이언트는 붙이되 gateway에서 해당 경로조건을 인식하고 조건 path를 떼어 보내도록 작성하려고 한다.
코드
- Spring cloud gateway 공식문서를 보면 Filter Factory가 있다. 이 중에서 RewritePath로 Path를 수정하는 방법을 사용하려고 한다.
- 정규식으로 되어 있고, 반점(,) 을 통해 "이랬는데~ 요래됐씀당~" 식으로 쓰는 것 같다.
- /red/ 뒤에 붙은 segment 에서 /red/를 제외한 segment만 적어서 /red/라는 path를 지우는 것 같다.
- 저 정규식으로 좀 더 알면 좋겠지만, 내가 원하는 정도는 딱 저정도이고, 공식문서에도 추가적인 정규식 내용은 안보인다.
- 기존에 작성했던 route에 filters 부분을 추가했다.
- 나는 users 관련 path를 받을 것이기 때문에 red 대신 해당 path를 적었다.
- 실제 users 서버에서도 context-path를 사용하지 않을 것이기 때문에 uri에 붙어있던 /users도 제거했다
- 클라이언트에서 요청한 주소 그대로 gateway에서 보내줘서 그것을 맞추기 위해 context-path를 사용하여 /users/를 default prefix로 사용했으나, 이젠 필요없어서 지웠다
코드 실행
- route-user server를 직접호출 하였다.
- context-path가 없기 때문에 /users/api/v1/users 에서 /api/v1/users 로 주소가 바꼈다.
- spring cloud gateway 를 통한 호출.
- 클라이언트에서 users 서버의 주소는 모르고 보내고 싶을때 gateway에 /users 를 붙여 보내면 gateway가 조건식으로 걸어서 보낸다
이젠 gateway가 잘 수정해서 보내준다.
실제 서버가 MSA로 각각 띄워지면 localhost 대신 각 서버 ip를 가지고 있기 때문에 port도 서버가 겹치지 않는 이상 전부 8080으로 띄울 수 있고, 클라이언트는 각 서버의 ip, port를 전부 기억할 필요 없이 gateway에 요청하면 gateway가 알아서 해준다.
728x90
반응형
LIST