MSA에서 서비스 간 통신을 효울적으로 관리하는 역할. Netty를 이용한 비동기 서버가 작동한다는 특징
기능 | 설명 |
---|---|
라우팅 (Routing) | 요청을 특정 경로로 전달하여 서비스 간의 통신을 관리 |
필터링 (Filtering) | 요청과 응답에 대한 사전 및 사후 처리를 수행하여 보안, 로깅, 감사 및 변환 등 다양한 작업을 처리 |
보안 (Security) | Spring Security와의 통합을 통해 인증 및 권한 부여 |
리소스 절약 (Resource Saving) | 비동기 및 논블로킹 특성을 활용하여 시스템 리소스를 효율적으로 활용 |
회로 차단 (Circuit Breaking) | 넷플릭스의 Hystrix와 통합되어 서비스 장애 시 회로 차단을 수행하여 전체 시스템의 안정성 유지 |
- API-GATEWAY-SERVICE : Spring Cloud Gateway 역할, port = 8000
- MY-FIRST-SERVICE: test 용 서비스1. 인스턴스 2개, random port
- MY-SECOND-SERVICE: test 용 서비스1. 인스턴스 2개, random port
이 때 아래와 같이 8000번 즉 gateway에 요청 시, 유레카에 등록된 서비스의 이름(ex MY-SECOND-SERVICE) 으로 찾아서 해당 서비스에 요청을 보낼 수 있다. 이 때 특정 서비스의 인스턴스가 여러개라면 로드 밸런싱을 통해 번갈아가며 요청을 보내 부하를 분산할 수 있다. 또한 필터 적용을 통해 로깅 등의 작업 처리가 가능
Get 요청 예시
http://localhost:8000/second-service/check
server:
port: 8000
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8761/eureka # 유레카 서버에 api gateway 등록
spring:
application:
name: api-gateway-service
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway Global Filter
preLogger: true
postLogger: true
routes:
- id: first-service
uri: lb://MY-FIRST-SERVICE # 유레카에 등록된 서비스 이름으로 라우팅.
#lb = 로드 밸런서 (해당 서비스에 등록된 인스턴스가 여러개라면 여러개의 인스턴스에 요청을 분산)
predicates:
- Path=/first-service/** # 라우팅 path
filters:
- CustomFilter
- id: second-service
uri: lb://MY-SECOND-SERVICE
predicates:
- Path=/second-service/**
filters:
- name: CustomFilter
- name: LoggingFilter
args:
baseMessage: Hi, There.
preLogger: true
postLogger: true
오오 게이트웨이에 돌입하셨군요!