-
Spring Cloud Gateway의 RouteDefinitionRepositoryTECH/Spring 2022. 6. 7. 13:28
Spring Cloud Gateway(이하 S.C.G라고 호칭)에서는 두 종류의 RouteDefintionRepository 구현체를 제공한다.
- InMemoryRouteDefinitionRepository
- 하나의 게이트웨이 인스턴스 내에서만 존재한다. 따라서, 여러 게이트웨이 인스턴스에 걸쳐 라우트를 공유하기에 적합하지 않다.
- 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 빈을 생성한다.
[참고] 클래스 다이어그램
- 이름에서 알 수 있듯이 InMemoryRouteDefinitionRepository 와 RedisRouteDefinitionRepository 모두 RouteDefinitionRepository의 구현체이다.
'TECH > Spring' 카테고리의 다른 글
Spring Data R2DBC + Jasync 사용시 AbstractMethodError가 발생하는 경우 (0) 2022.10.31 Spring Boot 애플리케이션의 Health Endpoint 상태가 Eureka에 영향을 끼칠까? (0) 2022.10.14 Spring Data R2DBC - R2DBC란? (0) 2022.06.16 logback-spring.xml과 application.yml의 로그 설정 중 어떤 것이 우선 순위가 더 높을까 (0) 2022.02.21 Spring Boot war 파일 생성하기 (0) 2021.09.11 - InMemoryRouteDefinitionRepository