-
Spring cloud gateway - 3. 경로를 이용하여 Route하기Spring Cloud/Spring Cloud GateWay 2023. 12. 13. 14:57728x90
각 서비스 별로 서버가 분리되어있는 MSA환경에서 클라이언트가 각 서버로 요청을 하려면 모든 서비스의 주소를 알고 있어야 한다.
이 것을 해결하기 위해 gateway로 해당 서비스의 이름을 넣는 Path를 보내고, gateway에서 해당 Path를 조건식으로 갖는 설정에 맞춰 그곳으로 API를 보내는 방식을 사용한다.
코드
spring cloud gateway doc. - 공식문서를 보면 Path Route Predicate Factory가 있다.
- yml에 위 같이 내용을 적으면 Route를 시켜주는 것 같다.
- id : 해당 라우트 식별자
- url : 조건이 맞으면 요청 할 주소
- predicates: 조건식이고 위 내용은 'Path가 /red/{segment} 또는 /blue/{segment} 가 포함되어 있으면' 이 조건 식 인 것 같다. segment는 따로 GatewayFilter Factories 를 통해 만든다? 사용한다?같은데 나중에 찾아봐야겠다
application.yml - 저번에 작성한 Spring Cloud Gateway 모듈의 yml에 Route정보를 작성하였다.
- 식별아이디는 users_route라고 적었다.
- 해당 uri는 다른 모듈로 8080 포트로 띄울 서버주소이다.
- 조건은 gateway에서 /users/로 시작되는 요청들은 해당 주소로 보내려고 한다.
spring initializer - 아무것도 없는 그냥 Web Server 하나를 만들었고, 위에 맞추기 위해 이름을 user로 넣었다.
application.yml / UsersApiController - 기본이 8080포트이긴 하지만, 한 번 더 적었다.
- gateway에 아직 filter 설정이 없어 /users도 같이 붙어서 간다. 이부분을 Controller에서는 생각하지 않기 위해 Context-path로 지정해 놓았다.
- Controller는 아무 동작 없이 "테스트 성공!" 이라는 값만 return 하도록 하였다.
코드 실행
route_users - 직접호출 하였을 때 잘 뜬다.
- context-path 때문에 포트 뒤에 /users가 붙는다.
spring cloud gateway - Spring cloud gateway도 잘뜬다.
- gateway의 포트는 http 기본 포트 80이기 때문에 따로 포트 작성을 하지 않아도 된다.
그런데 클라이언트가 편하게 하기 위해 gateway를 사용하여 api path에 /users 와 같은 서비스 서버 이름을 입력하는데, 서버가 그것을 맞추기위해 같이 Context-path로 /users를 적어야한다.
다음번에는 filter를 사용하여 클라이언트에서 /users 를 전달받고, 실제 해당 서버로 보낼 때에는 /users를 떼고 보내도록 해야겠다.
728x90반응형LIST'Spring Cloud > Spring Cloud GateWay' 카테고리의 다른 글
Spring cloud gateway - 5. Eureka를 통해 서버 연결하기 (0) 2023.12.14 Spring cloud gateway - 4. filter를 통해 Path 수정하기 (0) 2023.12.13 Spring cloud gateway - 2. Spring cloud gateway 프로젝트 만들기 (0) 2023.12.11 Spring Cloud Gateway - 1. Spring Cloud Gateway란 (0) 2023.12.11