ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring cloud gateway - 3. 경로를 이용하여 Route하기
    Spring Cloud/Spring Cloud GateWay 2023. 12. 13. 14:57
    728x90

    각 서비스 별로 서버가 분리되어있는 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

    댓글

Designed by Tistory.