작성
·
32
0
RouteLocator gatewayRoutes(RouteLocatorBuilder builder)
이 메소드를 만들기 위해
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
이걸로 수정했을 했는데 이후 저 메소드를 주석 처리하고 applicatio.yml을로 설정을 대체 했을 때는 동작을 안하고
implementation 'org.springframework.cloud:spring-cloud-starter-gateway-mvc'
mvc로 다시 변경해줘야 올바르게 동작하는데
무슨 차이가 있을까요?
답변 2
0
안녕하세요 , 이도원입니다.
올려주신 내용으로 테스트를 재현해 보니 문제가 발생되지 않는 것 같습니다. 강의에서도 설명 드렸던 것처럼 RouteLocator 작업이나, application.yml 파일로의 작업이나 같은 동작으로 해야 하는데, RouteLocator에서 application.yml로 돌아 왔다고 해서 동작을 안하거나 하지는 않습니다. 오히려 spring-cloud-starter-gateway-mvc를 이용하게 되면, WebFlux대신 Servlet을사용하는 방식으로 작동하게 된 것이고, RouteLocator는 application.yml 파일으로만(또는 Bean 생성), 필터 역시 AbstractGatewayFailterFactory 대신 Filter나 HandlerInterceptor 등을 이용해야 합니다. spring-cloud-starter-gateway-mvc로 변경 시, Filter 부분은 어떻게 수정하셨는지를 확인해 보시면 좋을 것 같습니다.
혹시, IDE에서 변경된 dependecy 등을 캐시 문제로 인식 못한 경우도 있을 수 있으니, IDE의 캐시를 삭제하고 실행해 보시면 좋을 것 같습니다.
추가 질문사항 있으시면 다시 글 남겨 주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
ybs1121님, Spring Cloud Gateway에서 RouteLocator
를 설정할 때 발생하는 문제에 대해 말씀해 주셨군요. 주석 처리 후 application.yml
로 구성했을 때 동작하지 않는 문제는 주로 두 가지 다른 라이브러리 사용에 기인할 수 있습니다.
Spring Cloud Gateway vs Spring Cloud Gateway MVC:
spring-cloud-starter-gateway
: 이 경우 Netty 서버를 사용하여 비동기적으로 동작합니다. application.yml
에서 정의한 비동기식 설정이 자연스럽게 작동할 수 있습니다.spring-cloud-starter-gateway-mvc
: 이는 전통적인 Spring MVC 방식으로 동작하며, Tomcat 서버를 사용합니다. application.yml
에서 설정한 라우팅이 이 경우 제대로 반영되지 않을 수 있습니다. 이는 주로 구성을 올바르게 반영하도록 설정 파일이 맞추어져 있는지, 그리고 Tomcat 서버에서의 동작과 관련이 있습니다.구성 차이:
spring-cloud-starter-gateway
의 경우 Reactor 기반이며, 비동기적 운영을 기본으로 합니다. application.yml
에서의 설정은 바로 반영됩니다.spring-cloud-starter-gateway-mvc
는 예전에 사용되던 Netty 기반이 아닌 기존의 MVC 패턴을 사용하므로 설정 파일의 일부가 반영되지 않을 수 있습니다. 이 경우 server.port
등의 설정도 다르게 관리해야 할 수 있습니다.위 내용이 도움될지 모르겠지만 관련된 글을 참고로 드립니다:
해당 링크에서 유사한 토픽이 논의되고 있으며, 자세한 예시와 원인을 확인하실 수 있습니다. 마이크로서비스 구성 시 Spring Cloud Gateway의 설정과 작동 방식에 따라 올바른 라이브러리를 선택하시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.