[스프링] 스프링 클라우드 게이트웨이와 요청 및 응답 변환
오늘은 스프링 클라우드 게이트웨이를 사용하여 요청과 응답 변환하는 방법에 대해 알아보겠습니다.
스프링 클라우드 게이트웨이란 무엇인가요?
스프링 클라우드 게이트웨이는 스프링 프레임워크의 Spring Webflux를 기반으로 한 API 게이트웨이입니다. 게이트웨이는 클라이언트 요청을 받아 백엔드 서비스에 라우팅하거나 변환하는 역할을 담당합니다.
요청 변환하기
클라이언트가 요청한 내용을 변환하려면 GatewayFilter를 사용합니다. GatewayFilter를 이용하면 요청 헤더, 바디, URI 등을 변경할 수 있습니다.
예를 들어, 클라이언트가 보낸 요청의 헤더에 X-Request-ID
를 추가하고 싶다면 다음과 같이 GatewayFilter를 정의합니다.
public class AddRequestHeaderFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest().mutate()
.header("X-Request-ID", UUID.randomUUID().toString())
.build();
return chain.filter(exchange.mutate().request(request).build());
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
응답 변환하기
게이트웨이를 통해 들어온 백엔드 서비스의 응답을 변환하려면 GatewayFilter 대신 WebClient를 사용합니다. WebClient를 활용하여 응답을 수정하거나 추가할 수 있습니다.
예를 들어, 백엔드 응답 바디에 추가적인 데이터를 넣고 클라이언트에게 전달하고 싶다면 다음과 같이 WebClient를 사용합니다.
webClient.get()
.uri("http://backend-service/")
.retrieve()
.bodyToMono(String.class)
.map(body -> body + " extra data")
마치며
오늘은 스프링 클라우드 게이트웨이를 사용하여 요청과 응답 변환하는 방법에 대해 알아보았습니다. 게이트웨이를 이용하면 클라이언트 요청과 백엔드 응답을 유연하게 변환할 수 있어서, 다양한 기능을 추가할 수 있습니다.
더 많은 정보는 공식문서에서 확인할 수 있습니다.
감사합니다!