SPRING CLOUD GATEWAY란?
Netty를 사용
Spring Cloud Gateway는 Tomcat이 아닌 Netty를 사용합니다.
API GATEWAY는 모든 요청이 통과하는 곳이기 때문에 성능적인 측면이 매우 중요하며
기존의 1THREAD / 1REQUEST 방식인 SPRING MVC를 사용할 경우 성능적인 이슈가 발생할 수 있습니다.
Netty는 비동기 WAS이고 1THREAD / MANY REQUESTS 방식이기 때문에 기존 방식보다 더 많은 요청을 처리할 수 있습니다.
동작방식
클라이언트는 Spring Cloud Gateway로 요청을 합니다.
Gateway Handler Mapping이 Route의 조건에 일치하는 요청이라고 판단하면, 해당 요청을 로 보내줍니다.
Gateway Web Handler는 요청과 관련된 Filter들을 통해 요청을 보냅니다.
Filter는 요청의 기능에 따라 proxy 요청이 보내지기 전/후로 로직을 실행합니다.
Route? Predicates? Filters?
Spring Cloud Gateway에는 크게 3가지 구성요소가 존재합니다.
Route란?
고유ID, 목적지 URI, Predicate, Filter로 구성된 구성요소.
GATEWAY로 요청된 URI의 조건이 참일 경우, 매핑된 해당 경로로 매칭을 시켜줍니다.
Predicate란?
주어진 요청이 주어진 조건을 충족하는지 테스트하는 구성요소
각 요청 경로에 대해 충족하게 되는 경우 하나 이상의 조건자를 정의할 수 있습니다.
만약 Predicate에 매칭되지 않는다면 HTTP 404 not found를 응답합니다.
Filter란?
GATEWAY 기준으로 들어오는 요청 및 나가는 응답에 대하여 수정을 가능하게 해주는 구성요소
사실 Predicate와 Filter에는 꽤 많은 설정들이 존재합니다.
자세한 정보들은 공식 레퍼런스에서 확인 하실 수 있습니다.
https://cloud.spring.io/spring-cloud-gateway/reference/html/
Netty 8000 포트로 접속하고 cloud gateway에 의해 localhost:8000/first-service/로 들어가게되면
8081포트의 firstservice api를 호출할 수 있다.
server:
port: 8000
eureka:
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
'MSA' 카테고리의 다른 글
Msa 로드밸런싱 동기화 문제 해결방안 (0) | 2023.06.19 |
---|---|
Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice (1) | 2023.05.28 |
Spring Cloud 로 개발하는 마이크로서비스 UserService 1-2 (0) | 2023.05.26 |
Spring Cloud 로 개발하는 마이크로서비스 UserService 1-1 (0) | 2023.05.24 |