[스프링] 스프링 클라우드 게이트웨이와 요청 및 응답 변환

오늘은 스프링 클라우드 게이트웨이를 사용하여 요청응답 변환하는 방법에 대해 알아보겠습니다.

스프링 클라우드 게이트웨이란 무엇인가요?

스프링 클라우드 게이트웨이스프링 프레임워크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")

마치며

오늘은 스프링 클라우드 게이트웨이를 사용하여 요청응답 변환하는 방법에 대해 알아보았습니다. 게이트웨이를 이용하면 클라이언트 요청과 백엔드 응답을 유연하게 변환할 수 있어서, 다양한 기능을 추가할 수 있습니다.

더 많은 정보는 공식문서에서 확인할 수 있습니다.

감사합니다!