[주의] 개인 공부를 위해 쓴 글이기 때문에 주관적인 내용은 물론, 쓰여진 정보가 틀린 것일 수도 있습니다!
피드백 부탁드립니다. (- -)(_ _) 꾸벅
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 설정정보를 동적으로 변경하기 위한 요소
세가지 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'
회사 프로젝트에서 토사구팽 당하여 더 이상 공부하지 않는 글 입니다..
'클라우드' 카테고리의 다른 글
[Docker] 2. 도커 설치 및 명령어 정리 (0) | 2021.04.29 |
---|---|
[클라우드 융합] 용어 및 내용 요약 (0) | 2021.03.24 |
[Docker] 1. Docker란 무엇인가? (1) | 2021.01.03 |