TECH/Spring

Spring Cloud Gateway의 RouteDefinitionRepository

최윧 2022. 6. 7. 13:28

Spring Cloud Gateway(이하 S.C.G라고 호칭)에서는 두 종류의 RouteDefintionRepository 구현체를 제공한다.

  1. InMemoryRouteDefinitionRepository
    • 하나의 게이트웨이 인스턴스 내에서만 존재한다. 따라서, 여러 게이트웨이 인스턴스에 걸쳐 라우트를 공유하기에 적합하지 않다.
  2. RedisRouteDefinitionRepository
    • S.C.G 인스턴스 클러스트에 걸쳐 라우트를 공유하기 위해서 RedisRouteDefinitionRepository 를 사용할 수 있다.
    • 이를 위해서는 spring.cloud.gateway.redis-route-definition-repository.enabled 를 true로 설정해야 한다.
    • RedisRateLimiter 필터 팩토리와 마찬가지로 pring-boot-starter-data-redis-reactive Spring Boot starter가 필요하다.

S.C.G 코드를 통해 이 두가지 구현체가 실제로 어떻게 등록되는지 살펴보자.

(아래 코드는 v3.1.2이다.)

 

GatewayAutoConfiguration

  • RouteDefinitionRepository.class 타입의 빈이 없을 경우 InMemoryRouteDefinitionRepository빈을 생성한다.

GatewayRedisAutoConfiguration

  • AutoConfigureBefore 를 통해 GatewayAutoConfiguration 이전에 실행된다.
  • spring.cloud.gateway.redis-route-definition-repository.enabled 가 true인 경우 RedisRouteDefinitionRepository 빈이 생성된다.
    • 즉, spring.cloud.gateway.redis-route-definition-repository.enabled 을 true로 설정한 경우 GatewayAutoConfiguration 에 정의된 InMemoryRouteDefinitionRepository 대신 RedisRouteDefinitionRepository 빈을 생성한다.

[참고] 클래스 다이어그램

  • 이름에서 알 수 있듯이 InMemoryRouteDefinitionRepositoryRedisRouteDefinitionRepository 모두 RouteDefinitionRepository의 구현체이다.