클라우드

[Spring Cloud Gateway] 스프링 클라우드 게이트웨이란?

윤창이 2022. 11. 16. 14:25
728x90

[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다!

피드백 부탁드립니다. (- -)(_ _) 꾸벅

 


1. API Gateway

백엔드 시스템 및 서비스에 대한 액세스를 제어하는 방법.

Reverse Proxy 처럼 클라이언트 앞 단에 위치하며 모든 서버로의 요청을 단일지점을 거쳐서 처리하도록 한다.

이를 통해 공통된 로직 처리나 인증 및 인가, 라우팅 등을 할 수 있다.

 

API Gateway의 역할들

  • API 라우팅
  • 인증 및 권한 부여
  • 속도 제한
  • 부하 분산 (로드밸런싱)
  • 로깅 (모니터링)
  • 오케스트레이션
  • 메디에이션 (Mediation)

 

 


2. Spring Cloud Gateway (SCG)

Spring Cloud Gateway(SCG)란 MSA 환경에서 사용하는 API Gateway중 하나로 Spring5, Spring Boot2, Project Reactor로 구축된Spring 환경의 API Gateway다. Spring Cloud Gateway는 API 라우팅 및 보안, 모니터링/메트릭 등의 기능을 간단하고 효과적인 방법으로 제공한다. 

 

오픈소스 G/W 비교

  Kong Zuul API Gateway Spring Cloud Gateway
Database 지원 Postgres, Cassandra MySQL, Cassnadra, Elastic Search 제약 없음
구현기술 Nginx, Lua Java Java
Redhat7 지원 지원 지원
쿠버네티스 활용 가능 활용 가능 활용 가능
인증 및 보안
(Oauth2.0, jwt) 
활용 가능 활용 가능 활용 가능
로드 밸런싱 지원 지원 지원
모니터링 및 로깅 지원 지원 지원
플러그인 O (다양한 플러그인 지원) X (필요한 기능마다 구현) O (다양한 플러그인 지원)
개발자 포털(UI) O X O
시사점 장점
- 설치, 환경 구성이 용이
- Nginx 기반으로 성능 우수
- Admin UI 지원

단점
- 커스텀 플러그인의 래퍼런스, 안정된 라이브러리 수가 적음
- 생태계가 작음
장점
- 많은 서비스에서 검증됨
- Ver 2: None-Blocking IO (성능우수)

단점
- Ver 1: Blocking IO
- 공식적인 기능 추가 중단
장점
- Spring Cloud 생태계 (최신 Trend 적용)
- OOTB에서 이미 많은 Predicate, Filter를 지원
- None-Blocking IO(성능우수)

단점
- Java 환경이 아닌 경우 지원 라이브러리 확인 필요

 

주된 Gateway 시스템 구성

구성은 크게 GATEWAY, EUREKA, FALLBACK-SERVER, ADMIN, DB, CONFIG-SERVER, GIT로 구성 되어있다.

  • Gateway - 실제 라우팅이나 모니터링을 담당하는 게이트웨이
  • Eureka - 서비스의 IP와 Port가 유기적으로 변화하는 MSA 특성상 Service Discovery를 하기 위한 서버
  • FallBack Server - 실패한 요청에 대한 대체 응답을 주기 위한 서버
  • Config Server - Gateway 설정정보를 동적으로 변경하기 위한 요소

 

 

 

Spring Cloud Gateway

2.1.0.RELEASE This project provides an API Gateway built on top of the Spring Ecosystem, including: Spring 5, Spring Boot 2 and Project Reactor. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting con

cloud.spring.io

 

세가지 Glossary (용어집)

  • Route
    고유ID, 목적지 URI, Predicate, Filter로 구성된 구성요소.
    GATEWAY로 요청된 URI의 조건이 참일 경우, 매핑된 해당 경로로 매칭을 시켜준다.

  • Predicate
    주어진 요청이 주어진 조건을 충족하는지 테스트하는 구성요소
    각 요청 경로에 대해 충족하게 되는 경우 하나 이상의 조건자를 정의할 수 있다.
    만약 Predicate에 매칭되지 않는다면 HTTP 404 not found를 응답한다.

  • Filter
    GATEWAY 기준으로 들어오는 요청 및 나가는 응답에 대하여 수정을 가능하게 해주는 구성요소

Predicate나 Filter들 각각의 Factor들은 상기 띄어둔 공식 웹 사이트에서 확인 가능하다

 

 

How it works?

 

Client는 스프링 클라우드 게이트웨이(이하 SCG)에 요청 ▶ Gateway Handler Mapping에서 요청이 경로와 일치하다고 판단 ▶ Gateway Web Handler는 관련된 Filter 체인을 거쳐 요청을 보냄 ▶ 모든 사전 필터 logic이 실행된 다음 프록시 요청이 이루어짐 ▶ 프록시 요청이 이루어진 후 사후 필터 logic이 실행

 

 

SPRING CLOUD GATEWAY의 설정들은 Java DSL로 정의를 하거나 application.yml 파일과 같은 설정 파일에서 정의를 하는 2가지 방식이 있다. 위 yml 파일을 작성 후 build.gradle 또는 pom.xml에 아래의 의존성을 주입하면 SCG 구현이 끝난다.

implementation 'org.springframework.cloud:spring-cloud-starter-gateway'

 

회사 프로젝트에서 토사구팽 당하여 더 이상 공부하지 않는 글 입니다..

728x90