[스프링] 스프링 클라우드 게이트웨이의 캐싱 기능

스프링 클라우드 게이트웨이는 클라이언트 요청을 받아 백엔드 마이크로서비스로 전달하는 데 사용됩니다. 이번 포스트에서는 스프링 클라우드 게이트웨이의 캐싱 기능에 대해 다뤄보겠습니다.

게이트웨이에서의 캐싱

클라이언트 요청에 대한 응답을 캐싱하면 백엔드로의 요청 횟수를 줄일 수 있으며, 응답 시간을 단축시킬 수 있습니다. 스프링 클라우드 게이트웨이는 다양한 방식으로 캐싱을 구현할 수 있도록 지원하고 있습니다.

캐시 관리자 정의

먼저, 캐싱을 구성하기 위해 캐시 관리자를 정의해야 합니다. 아래는 Redis를 사용하는 경우의 예시 코드입니다.

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    return RedisCacheManager.builder(connectionFactory)
        .cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(60)))
        .build();
}

라우팅 정의

다음으로, 게이트웨이에서 캐싱을 적용할 경로를 정의해야 합니다.

spring:
  cloud:
    gateway:
      routes:
        - id: caching_route
          uri: http://example.com
          predicates:
            - Path=/api/**
          filters:
            - name: RequestCache
              args:
                - name: cacheManager
                  ref: cacheManager

캐싱 필터 추가

마지막으로, 캐싱을 적용할 필터를 추가해야 합니다.

public class CachingRouteFilter implements GatewayFilter {

    private final ReactiveRedisCacheManager cacheManager;

    public CachingRouteFilter(ReactiveRedisCacheManager cacheManager) {
        this.cacheManager = cacheManager;
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 캐싱 로직 구현
        return chain.filter(exchange);
    }
}

결론

스프링 클라우드 게이트웨이의 캐싱 기능을 이용하면 더 나은 성능과 사용자 경험을 제공할 수 있습니다. 캐싱을 적용함으로써 시스템 전반적인 성능 향상에 기여할 수 있으므로, 적극적으로 활용해보시기를 권장합니다.

참고 문헌: 공식 스프링 클라우드 게이트웨이 문서