유튜브에서 “개발자 유미”님의 스프링 클라우드 MSA강의를 듣던 중 “게이트웨이 라우팅 설정” 파트에서 생긴 이슈입니다.
📍 배경
Spring Cloud Gateway를 통해 마이크로서비스로 라우팅하는 실습을 진행했다
구성은 다음과 같다
- Config 서버 : GitHub 저장소에 설정 파일 관리
- Config 클라이언트(마이크로서비스) : 2개의 스프링 부트 어플리케이션
- jisutudy-dev : 포트 8081
- ms2-dev : 포트 8082
- Spring Cloud Gateway : 포트 8080
Config 서버에 각 클라이언트 포트번호를 담기위한 properties 파일이다
각 마이크로서비스의 설정 파일에다가 포트 번호를 작성했다
각 마이크로서비스는 Config Server에서 부여받은 포트로 직접 접근 시 정상적으로 작동했지만 이번 실습을 통해서는 Spring Cloud Gateway을 통해 요청을 받아 알맞은 마이크로서비스로 라우팅하는 것이다.
위와 같이 Spring Cloud Gateway 어플리케이션 properties 설정을 했다
Path 기반 라우팅을 사용해서 요청 경로에 따라 적절한 마이크로서비스로 요청을 전달해준다
하지만 Spring Cloud Gateway (localhost:8080)를 통해 마이크로서비스의 경로로 접근했을 때 예상과 달리 웹페이지가 정상적으로 뜨지 않았다 404 에러가 났다
실습 강의대로 천천히 잘 따라갔는데 과연 어디서 문제가 난건지 열심히 검색했다가 스택오버플로우에서 해결책을 찾았다
(참고링크 : spring cloud gateway doesn't find the microservices)
📍 원인 및 해결 방법
문제의 원인은 의존성 설정에 있었다 🥲
Spring Cloud Gateway 프로젝트를 생성할 때 start.spring.io에서 의존성을 추가해야 한다
나는 이때 Spring Cloud Routing을 위해 Gateway 를 추가했었다
아래에 Explore 버튼을 눌러보면 의존성 주입을 확인할 수 있는데
implementation 'org.springframework.cloud:spring-cloud-starter-gateway-mvc'
spring-cloud-starter-gateway-mvc 가 주입되어 있었다
이렇게 하면 게이트웨이가 제대로 동작하지 못한다...
이 의존성은 비동기 라우팅을 제대로 지원하지 않기 때문이다
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
스택오버플로우를 보고 의존성주입을 위와 같이 변경하니 정상적으로 동작하였다
이 의존성은 Spring WebFlux 기반의 Gateway 구현체를 사용하도록 하여 비동기 라우팅 기능을 제대로 지원한다
📍 결과
Spring Cloud Gateway에서 각 마이크로서비스의 Path로 호출하였더니 정상적으로 웹페이지가 뜨는걸 확인할 수 있다.
📍 참고사항
사실 start.spring.io에서 Gateway를 검색하면 "Gateway" "Reactive Gateway" 2개가 나오는데
Reactive Gateway를 추가하면 발생하지 않을 수 있는 문제였다...!
포스팅을하면서 start.spring.io에서 Reactive Gateway를 의존성 추가해보니 spring-cloud-starter-gateway가 주입되는걸 확인할 수 있었다
'Spring' 카테고리의 다른 글
| Spring Cloud Gateway에서 라우팅 설정 방법 (0) | 2025.03.17 |
|---|---|
| Spring Cloud Gateway 동적 라우팅 추가시 Lambda 표현식 (0) | 2025.03.13 |
| Spring Cloud Config Client 설정 후 포트번호가 변경되지 않을 때 (0) | 2025.02.20 |
| 컨트롤러 메서드에서 매개변수 이름을 명시하지 않아서 발생한 IllegalArgumentException (0) | 2025.01.28 |
| 6. 의존관계 자동주입 (0) | 2025.01.28 |