-
스프링 클라우드 게이트웨이(SCG)스프링/스프링 클라우드 MSA 2024. 8. 5. 15:38
Spring Cloud Gateway
스프링 클라우드 MSA 환경에서 가장 앞단에 존재하며 클라이언트로부터 요청을 받고 적절하게 서버에 보내준다.
가장 앞단에서 항상 무중지 상태로 모든 요청을 받기에 잘 신경써야 한다.
스프링 부트 어플리케이션, Eureka Server, Config와 같은 서비스는 블로킹 기반으로 톰캣 엔진을 통한 로직을 수행했지만, Gateway는 비즈니스 로직을 처리하기 보다는 단순하게 거쳐가는 라우팅 역할을 하기 때문에 논 블로킹 방식으로 구성되며 WebFlux와 Netty를 사용한다.
WebFlux는 기존 스프링 부트에서 사용하는 JPA와 같은 블로킹 방식의 의존성을 모두 사용하지 못한다.
필수 의존성 - Spring Cloud Routing의 Gateway
dependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux' implementation 'org.springframework.cloud:spring-cloud-starter-gateway' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'io.projectreactor:reactor-test' // WebFlux 테스트에 필요 }
gradle의 의존성은 다음과 같다.
SCG의 라우팅 방법
- application.properties 설정
- application.yml 설정
- Config 클래스 설정
client를 MS1, MS2로 각각 8081 포트, 8082 포트로 설정한 다음에 8081/ms1/first, 8082/ms2/second 경로를 설정해두었다. 이제 8081, 8082 포트가 아니라 8080 포트로 접근해도 알아서 라우팅해주는 gateway를 만들 것이다.
1. SCG - application.properties
server.port=8080 # 라우팅은 index로 0번부터 지정 spring.cloud.gateway.routes[0].id=ms1 # 이름 spring.cloud.gateway.routes[0].predicates[0].name=Path # Path 방식 spring.cloud.gateway.routes[0].predicates[0].args.pattern=/ms1/** # 경로 spring.cloud.gateway.routes[0].uri=http://localhost:8081 # 해당하는 포트 spring.cloud.gateway.routes[1].id=ms2 spring.cloud.gateway.routes[1].predicates[0].name=Path spring.cloud.gateway.routes[1].predicates[0].args.pattern=/ms2/** spring.cloud.gateway.routes[1].uri=http://localhost:8082
SCG의 application.properties의 port를 8080으로 지정하고, 아래에 spring.cloud.gateway.routes를 이용해서 하나는 8081 포트로, 하나는 8082 포트로 PATH를 진행한다.
8080 포트는 gateway로서의 설정만 했음에도, 8080/ms1/first, 8080/ms2/second로 요청을 보내면 404 Not Found가 아니라 응답을 한다. 이로 인해 8081 포트와 8082 포트로 라우팅을 한다는 것을 확인할 수 있다.
2. SCG - application.yml
server: port: 8080 spring: cloud: gateway: routes: - id: ms1 uri: http://localhost:8081 predicates: - Path=/ms1/** - id: ms2 uri: http://localhost:8082 predicates: - Path=/ms2/**
application.yml은 다음과 같이 설정하면 된다.
3. Config 클래스 설정
우선 application.properties나 application.yml 파일에서 포트 번호를 제외하고 나머지는 삭제한다.
@Configuration public class CustomRoute { @Bean public RouteLocator ms1Route(RouteLocatorBuilder builder) { return builder.routes() .route("ms1", r -> r.path("/ms1/**") .uri("http://localhost:8081")) .route("ms2", r -> r.path("/ms2/**") .uri("http://localhost:8082")) .build(); } }
그리고 @Configuration 어노테이션을 통해서 라우팅을 빈으로 등록해주면 위와 같이 라우팅이 동작한다.
'스프링 > 스프링 클라우드 MSA' 카테고리의 다른 글
SCG 라우팅 추가와 삭제 (0) 2024.08.05 SCG - Eureka 연동 및 로드밸런싱 (0) 2024.08.05 Eureka Client 등록 설정 (0) 2024.08.05 Eureka 서버 구축 (0) 2024.08.05 Config 클라이언트 구축 (0) 2024.08.04