반응형
신규 프로젝트를 진행하며 스프링 클라우드를 사용하기 위해 학습한 내용입니다.
API Gateway (Spring cloud gateway)
Gateway Handler Mapping / Web Handler
- Gateway Handler Mapping
- 사전에 설정한 클라이언트의 URL과 내부적으로 라우팅 할 URL들을 매칭시키는 역할 (경로와 일치하는지 판단)
- 특정 predicates 로 요청이 오면 특정 uri 로 변환해주는 역할
- Gateway WebHandler
- 요청 경로에 따른 Filter Chain을 찾아 요청을 전송
Filters
- Filter는 AbstractGatewayFilterFactory 를 상속받아 구현하며 아래 필터들은 기본 제공이 아닌 구현해야하는 구현체
- Global Filter 를 제외하고 Filter들 간에 우선순위를 지정 가능
- OrderedGatewayFilter 를 생성하여 filter를 구현할 수 있으며 우선순위를 지정 가능
- 음수(-) 일 수록 HIGHEST, 양수(+) 일 수록 LOWEST
- 용도에 맞게 추가하거나 뺄 수 있다.
- Global Filter
- 요청의 처음과 응답의 끝에 적용되는 필터
- 모든 라우팅 경로에 적용되는 특징이 있음
- 모든 라우팅 경로에 적용이 되므로 인증과 관련된? 내용을 적용시킬 수 있음
- AutenticationFilter
- CustomFilter
- ex) 서비스 사용 여부에 따라서 요청 거부기능 등
- LoggingFilter
- 어느 서비스로 호출이 되었는지 추적 가능하도록 로깅하는 기능
- Global Filter
Rate Limiter
- Redis를 활용하여 사전에 정의한 Key 마다의 요청 건수 제한 가능
- 시간단위 최대 용량을 지정 가능
- Key는 KeyResolver를 구현하여 무엇을 Key로 사용할 지 지정 가능
- 현재 트래픽 양을 Response Header 에 추가하여 단순히 차단이 아니라 고객도 자체적으로 트래픽을 조절하도록 유도
Routing (Proxied) & Loadbalancing
- discovery server 에 등록된 서비스 이름으로 호출
- gateway 설정에 요청 URL과 내부적으로 라우팅 되는 서비스를 미리 지정 필요
- http://127.0.0.1:8080/path 으로 요청이 들어오면 gateway 에서 lb://service-name/path 로 라우팅
- lb://service-name → Discovery server 에 등록된 서비스이름을 명칭
- 이렇게 호출할 경우, service-name으로 등록된 인스턴스가 여러개일 경우 라운드 로빈 방식으로 로드밸런싱
Discovery Server
eureka server
- Naming Server 역할
- Spring Cloud 모듈들을 사용한 어플리케이션(인스턴스)들을 eureka server 에 service name 을 등록
- Microservice 간의 호출은 구체적인 IP, PORT를 사용하는것이 아니라 discovery server에 등록된 service name으로 호출
Config Server
Config server
- Config server 는 github와 같은 원격 저장소에 config 들을 저장을 하며 변경이 있을 때 혹은 주기적으로 각 Config client 들에게 설정정보를 전달
- config 저장소로 github 지원
Config client
- 클라이언트는 동적으로 설정정보를 받은 EndPoint를 만들어야 한다. (RestController)
버전 차이
Spring Boot 2.4.x버전부터 netflix 관련 모듈은 지원하지 않습니다.
Spring Boot 2.3.x 이하 | Spring Boot 2.4.x 이상 |
Hystrix | Resillience4j |
Hystrix Dashboard / Turbine | Micrometer + Monitoring System |
Ribbon | Spring Cloud Loadbalancer |
Zuul | Spring cloud Gateway |
Archaius | Spring boot external config + Spring Cloud Config |
https://spring.io/projects/spring-cloud#overview
https://spring.io/blog/2021/04/05/api-rate-limiting-with-spring-cloud-gateway
반응형
'- Spring' 카테고리의 다른 글
private method Test (0) | 2021.06.09 |
---|---|
[JPA] PhysicalNamingStrategy - Table, Column명 커스텀 (0) | 2020.11.01 |
[lombok] Constructor (0) | 2020.10.25 |
[ERROR] Error creating bean with name 'repositoryController' / At least one JPA metamodel must be present! (2) | 2020.10.16 |
[Spring Hateoas1.2] ModelAssembler, ModelProcessor (0) | 2020.09.02 |