본문 바로가기

- Spring

Spring Cloud API Gateway

반응형

신규 프로젝트를 진행하며 스프링 클라우드를 사용하기 위해 학습한 내용입니다.

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
      • 어느 서비스로 호출이 되었는지 추적 가능하도록 로깅하는 기능

 

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
반응형