[Spring Cloud] Spring Cloud Gateway

Donghyun Kim·2022년 8월 4일
0
post-thumbnail
post-custom-banner

Spring Cloud Gateway

Spring Cloud Gateway는 Spring WebFlux 위에서 API Gateway를 구축하기 위한 라이브러리이다.

Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.

Spring Cloud Gateway (SCG)는 간편하면서도 효과적인 API 라우팅 방법을 제공하고, 보안 모니터링, 메트릭, 복원력 문제를 해결하는 것을 목표로 한다.

Spring Cloud Gateway 배경 지식

API Gateway

  • API Gateway란?

  • Spring Cloud Gateway는 API Gateway를 구현하기 위한
    Spring에서 지원하는 기술

Service Discovery

  • Service Discovery란?

  • MSA로 구성된 서로 다른 서비스의 정보를 저장하고 관리하기 위한
    서비스 패턴을 뜻한다.

Service Registry

  • MS에서 각각의 서비스가 자신의 위치(IP) 정보를 특정 서버에 등록(Registry)하는 작업을 뜻한다.

Netflix Eureka

  • Netflix Eureka란?

  • Netflix OSS(Open Source Software)에서 client-side discovery 패턴을 제공하는데 여기서 Netflix Eureka가 Service Registry 역할을 하는 OOS이다. 유레카는 서비스 인스턴스를 등록하거나 사용가능한 인스턴스를 조회하는 API를 제공한다.

  • 쉽게 말하면 Service Discovery 패턴을 구현하기 위한 Service Registry의 구현체

  • Spring Cloud에서 이와같은 Netflix Eureka 오픈소스 소프트웨어를
    보다 쉽게 적용시켜 구현할 수 있게 Spring Cloud Eureka 모듈을 제공한다.

Spring Cloud Gateway Flow

Eureka Flow

Spring Cloud Eureka 모듈로 Service Discovery 패턴을 구현해 각각의 MSA 서비스들의 Health Checking 및 위치 정보 등록/관리만 가능한 상태이다.

API Gateway Flow

Spring Cloud Eureka로 각 MSA 서비스들을 관리하고
Spring Cloud Gateway를 통해 클라이언트의 요청을 받아 각각의 MSA 서비스를 로드밸런싱 해준다.

위와 같은 형태가 구성되면 Spring Cloud Gateway의 최종적인 구현 형태가 된다.

Spring Cloud Gateway 핵심 역할

Route

목적지의 URI와 Predicates라는 조건들의 목록 그리고 필터들을 이용하여 어떤 곳으로 Routing 할 것인지를 명시하는 역할을 한다.

우리는 Routes 에 대한 속성과 정보를 입력하여 Spring Cloud가 어떤 방식으로 동작하라고 지시할 수 있게 된다.

Predicate

쉽게 조건이라고 생각하면 된다.

아래에서 우리는 Predicates 를 작성할 것인데, 다음과 같이 작성한다.

predicated: -Path=/user/**

그럼 user 라는 모든 경로를 지정한 것이다.

Filter

들어오는 요청과 응답, Request, Response을 특정 필터를 타게 함으로 우리가 원하는 방식으로 요청을 보내거나 헤더를 조작할 수 있고, 해당 필터를 이용해서 로그 파일을 작성하게 할 수 도 있다.

Spring Cloud Gateway 구조

  1. Client 는 Spring Cloud Gateway 에 요청을 보낸다.

  2. Gateway Handler Mapping 에서 해당 요청에 대한 Route와 Predicates가 일치한다고 판단하면 해당 요청은 Gateway Web handler로 보내진다.

  3. handler 에서 Filter Chain 을 이용해서 사전 필터 혹은 사후 필터로 나누어 동작한다.

  4. 필터링이 된 후 실제 마이크로서비스에게 전달된다.

내부 들여다보기

Spring Cloud Gateway는 크게 3가지의 파트가 존재한다.

Gateway Handler Mapping

Gateway 가 CLient로 부터 어떤 요청이 왔는지 확인하고 Mapping 하는 작업을 수행한다.

Predicate

Handler Mapping 시에 필요한 Uri 정보나, Path 정보를 확인하는 주체가 된다.

Filter

Handler Mapping이 된 후 들어온 요청에 대한 필터 작업을 수행할 수 있다.
2개의 필터로 크게 나뉘며 사전(Pre Filter)와 사후(Post Filter)로 나눌 수 있다.

  • Pre Filter
    특정 작업이 일어나기 전에 지정

  • Post Filter
    특정 작업이 끝난 후에 지정

이런 필터에 대한 정보는 yml 설정 파일에도 정의할 수 있고 java code 에서 정의할 수도 있다

참고 및 출처

profile
"Hello World"
post-custom-banner

0개의 댓글