Spring Reactive 생태계 위에 Spring Cloud 팀이 구현한 API Gateway 이다.
그렇다면 API Gateway 에 대해 잠시 알아보자.
이제 Spring Cloud Gateway 특징을 알아보자
위와 같은 특징들이 있는데, 우선 기본적인 동작방식과 특징 먼저 알아보자.
Route: Gateway의 기본 블록이라고 보면 된다.
목적지 URI 와 predicate, filter 를 정의하는 곳이다.
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- Cookie=mycookie,mycookievalue
Predicate : 일종의 조건문이며, client의 요청이 설정한 조건과 일치하는지 확인하는 곳이다.
무조건 1개 이상 설정해야 한다.
예를 들어 Path:/api/**
이와 같이 설정했다면,
client 요청이 api/route/1
이런 형식으로 들어와야 해당 조건이 일치하게 된다.
위 예시는 Path
라는 조건을 활용한 것이고, Path 외에도 다양한 조건이 있다.
(Cookie, After, Before, Between, Header 등등)
https://cloud.spring.io/spring-cloud-gateway/reference/html/#gateway-request-predicates-factories
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- After=2017-01-20T17:42:47.789-07:00[America/Denver]
Filter: 요청 또는 응답을 다음단계로 보내기 전에 수정할 수 있는 곳이다.
Spring Cloud Gateway는 요청 또는 응답을 수정하기 위한 많은 내장 GatewayFilter Factory 포함되어 있다. 그리고 내장 외에 custom filter 를 정의하여 사용할 수도 있다.
(AddReqeustHeader, CircuitBreaker, PrefixPath, redis-rate-limiter 등등)
https://cloud.spring.io/spring-cloud-gateway/reference/html/#gatewayfilter-factories
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
filters:
- AddRequestHeader=X-Request-red, blue
route, predicate, filter 를 yml
파일로 위와 같이 작성할 수 있지만, java dsl
을 통해서 java
파일로 구성할 수도 있다.
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("r1", r -> r.host("**.baeldung.com")
.and()
.path("/baeldung")
.uri("http://baeldung.com"))
.route(r -> r.host("**.baeldung.com")
.and()
.path("/myOtherRouting")
.filters(f -> f.prefixPath("/myPrefix"))
.uri("http://othersite.com")
.id("myOtherID"))
.build();
}
https://medium.com/@niral22/spring-cloud-gateway-tutorial-5311ddd59816
https://cloud.spring.io/spring-cloud-gateway/reference/html/
https://www.baeldung.com/spring-cloud-gateway