API Gateway
마이크로서비스를 관리,운영하기 위한 플랫폼 패턴. 해당 패턴에 필요한 기능들 제공하는 서버.
개별 서비스 앞 단에서 모든 서비스들의 엔드포인트를 단일화 해주며, 몇몇 필수 기능 제공.
제공 기능
- 인증 과 인가 :
- 인증(Authentication) : 사용자의 신원을 검증.
- 인가(Authorization) : 사용자에게 요청을 실행할 수 있는 권한 부여.
- 인증, 인가는 필수적으로 제공되어야한다.
- 인증,인가 서비스 제공 위해, 자체 기능 구현 or 외부 서비스 연계 가능.
-
API 라우팅 : API 요청 식별해서 적절한 서비스로 전달.
-
QoS (Quality of Service) : 안정적인 서비스 제공 및 네트워크 품질 관리 위하여 사용자, 클라이언트, API 단위로 접속 제어.
-
로깅 및 네트워킹 : API 요청 대한 로깅 지원 및 모니터링 기능
-
입력 유효성 검사 : API 요청이 적절한 형식과 필수 데이터를 포함하는지 식별 및 관리 기능 제공
로깅(Logging), 모니터링(Monitoring)
로깅 : API Gateway 거친 요청,응답 정보를 기록하는 것.
모니터링 : API Gateway를 통해 들어오는 트래픽, 성능, 실패율, 응답 속도 등을 실시간으로 추적하고 시각화하는 기능.
API Gateway 장점과 단점
장점 :
- 클라이언트가 직접 서비스 호출 안하고, 단순히 gateway와 통신함으로서 클라이언트 코드 단순화.
단점 :
- 개발, 배포 및 관리해야할 지점 증가
- gateway에 라우팅 설정 미뤄질 시, 병목 현상 발생 가능성 존재.
Spring Cloud Gateway (SCG)
Spring에서 제공하는 오픈 소스 기반 서비스
SCG 이전에 Zuul 있었으나, 패치 중단됨에 따라 SCG로 이전.
차이점 :
- 기반 웹 서버 : Zull - Tomcat, SCG - Netty
- 동기 비동기 : Zuul - 동기, SCG - 비동기
- 웹 프레임워크 : Zuul - WEB MVC, SCG - WebFlux
SCG 장점과 단점
장점 :
- 오픈소스 기반 -> 초기 라이선스 투자 비용 없음
- WebFlux 기반의 Non-Blocking 방식 사용으로, 빠른 응답 속도 가능. I/O작업 많은 프로젝트에서 유리.
- Spring에서 제공하는 다양한 서비스 조합하여 사용 가능
- 라우팅을 간단한 yaml 파일로 완성 가능.
단점 :
- 다양한 기본 서비스 제공하나, 적절한 기능 선택 어려움
- 라우팅 대상 서버 많아지면 관리 어려울 수 있음.
- 추가적 오버헤드 갖게 되어, 간단한 요청의 경우에 비효율.
SCG 아키텍처
Route
- 고유 ID, 목적지 URI, Predicate, Filter로 구성.
- Predicate + Filter의 묶음.
Predicate
- 받은 요청이 주어진 조건 만족하는지 식별함.
- 식별 후 Filter Chain으로 요청 전달.
- 만약 조건 만족 못하면, HTTP 404 Not Found 응답.
카테고리별 조건들
시간 : Before, After, Between
URI : Path, Query
요청 : Cookie, Header, Method, Weight
네트워크 : Host, RemoteAddr
Filter Chain
- 요청,응답에 대한 전후처리 담당.
- 각각 하나의 서비스를 제공하는 Filter를 등록하고, 이어져서 연쇄적으로 Filter 실행.
- 백엔드 서비스에 요청 처리 시점 기준으로 요청 전(Pre Filter), 요청 후(Post Filter) 구분.
- 이 중 Proxy Filter는 프록시 요청 처리될 때 수행됨.
SCG 동작 과정
- client가 SCG 서버로 요청
- Handler Mapping에서 요청이 매핑 판단 & 라우팅 경로 결정.
- 해당 라우팅 대응되는 Web Handler 실행됨. 이는 Filter Chain 실행시켜 요청 전송, 응답 생성 작업 수행토록 함.
- 필터 완료 후 서비스로 요청 보내짐.
- 서비스가 응답 생성 후 다시 역순으로 돌아가, 클라이언트에게 응답 전달됨.
참고 :
https://s-core.co.kr/insight/view/spring-cloud-gateway-%EA%B8%B0%EB%B0%98%EC%9D%98-api-%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4-%EA%B5%AC%EC%B6%95/