앞서 기본 라우팅 동작으로 실행까지 해봤는데, Spring Cloud Gateway를 사용하여 커스텀 라우팅을 설정하는 방법과 기본 라우팅 동작을 비활성화하는 방법을 알아보겠습니다.
커스텀 라우팅 설정:
RouteLocator
빈을 정의하여 특정 경로에 대한 커스텀 라우팅을 설정합니다./easybank/accounts/**
와 같은 경로를 사용하여 클라이언트가 더 직관적으로 API를 호출할 수 있게 합니다.rewrite path filter
)를 사용하여 요청 경로를 적절히 변환하여 실제 마이크로서비스로 전달합니다.기본 동작 비활성화:
application.yml
파일에서 spring.cloud.gateway.discovery.locator.enabled
값을 false
로 설정하여 이를 비활성화할 수 있습니다.Java 기반 설정의 이점:
application.yml
파일을 사용한 설정에는 제한이 있을 수 있어, 보다 복잡한 요구사항을 처리하는 데에는 Java 설정이 더 적합합니다.@Bean
public RouteLocator easybankRouteConfig(RouteLocatorBuilder builder) {
return builder.routes()
.route(p -> p.path("/easybank/accounts/**")
.filters(f -> f.rewritePath("/easybank/accounts(?<segment>/.*)", "$\\{segment}"))
.uri("lb://ACCOUNTS"))
.route(p -> p.path("/easybank/loans/**")
.filters(f -> f.rewritePath("/easybank/loans(?<segment>/.*)", "$\\{segment}"))
.uri("lb://LOANS"))
.route(p -> p.path("/easybank/cards/**")
.filters(f -> f.rewritePath("/easybank/cards(?<segment>/.*)", "$\\{segment}"))
.uri("lb://CARDS"))
.build();
}
이 코드는 클라이언트가 easybank
를 포함한 경로를 통해 API를 호출할 때, 해당 요청을 각 마이크로서비스로 라우팅하도록 설정합니다.
이제 클라이언트가 /easybank/accounts
, /easybank/loans
, /easybank/cards
와 같은 경로로 요청을 보낼 수 있으며, Spring Cloud Gateway는 이를 적절한 마이크로서비스로 전달합니다. 또한, 기본적인 라우팅 동작을 비활성화하여 불필요한 경로 혼동을 줄이고, 보다 일관된 API 접근 방식을 제공할 수 있습니다.
easybank/accounts/**
와 같은 경로가 들어오면, 해당 경로를 재작성한 후, 실제 마이크로서비스로 전달합니다.AddResponseHeader
필터를 사용하여 응답에 X-Response-Time
헤더를 추가하여 응답이 생성된 시간을 클라이언트에게 전달할 수 있습니다.Spring Cloud Gateway 공식 문서 참조:
AddResponseHeader
와 같은 사전 정의된 필터는 공식 문서에서 확인할 수 있으며, 이러한 필터를 활용하여 비즈니스 요구사항을 충족할 수 있습니다.사용자 정의 필터 필요성:
@Bean
public RouteLocator easybankRouteConfig(RouteLocatorBuilder builder) {
return builder.routes()
.route(p -> p.path("/easybank/accounts/**")
.filters(f -> f
.rewritePath("/easybank/accounts(?<segment>/.*)", "$\\{segment}")
.addResponseHeader("X-Response-Time", LocalDateTime.now().toString()))
.uri("lb://ACCOUNTS"))
.route(p -> p.path("/easybank/loans/**")
.filters(f -> f
.rewritePath("/easybank/loans(?<segment>/.*)", "$\\{segment}")
.addResponseHeader("X-Response-Time", LocalDateTime.now().toString()))
.uri("lb://LOANS"))
.route(p -> p.path("/easybank/cards/**")
.filters(f -> f
.rewritePath("/easybank/cards(?<segment>/.*)", "$\\{segment}")
.addResponseHeader("X-Response-Time", LocalDateTime.now().toString()))
.uri("lb://CARDS"))
.build();
}
이 코드에서는 각 라우트에 대해 AddResponseHeader
필터를 추가하여 응답에 현재 시간(X-Response-Time
)을 포함하도록 설정했습니다.
이제 Spring Cloud Gateway에서 다양한 필터를 사용하여 요청과 응답을 처리할 수 있습니다. 또한, Spring Cloud Gateway에서 제공하는 사전 정의된 필터를 활용해 대부분의 비즈니스 요구사항을 충족할 수 있습니다. 하지만 특정 요구사항이 존재할 경우, 사용자 정의 필터를 만들어 구현할 수 있습니다.
다음 강의에서는 사용자 정의 필터를 구현하는 방법에 대해 자세히 알아보겠습니다. 감사합니다!