MSA
Spring Cloud GateWay
혀눅짱
2023. 9. 4. 10:36
API Gateway는 서비스로 전달되는 모든 API 요청의 관문 역할을 한다. 내부 서버 시스템의 아키텍처를 내부로 숨기고 외부의 요청에 대한 적절한 응답을 한다. 즉, 클라이언트가 내부 구조를 알 필요없이 약속한 형태의 API의 통신하는 것이다.
spring cloud gateway 디펜던시를 추가한 프로젝트 생성 후 이 프로젝트 역시 유레카 서버에 등록한다.
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
그 후 cloud.gateway.routes 정보에 각각의 서비스의 id, uri정보와 추가적인 path, filter정보를 설정해줄 수 있다.
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: Spring Cloud Gateway Global Filter
preLogger: true
postLogger: true
routes:
# - id: user-service
# uri: lb://USER-SERVICE
# predicates:
# - Path=/user-service/**
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/login
- Method=POST
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/user-service/(?<segment>.*), /$\{segment}
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/users
- Method=POST
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/user-service/(?<segment>.*), /$\{segment}
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/**
- Method=GET
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/user-service/(?<segment>.*), /$\{segment}
- AuthorizationHeaderFilter
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user-service/actuator/**
- Method=GET,POST
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/user-service/(?<segment>.*), /$\{segment}
- id: catalog-service
uri: lb://CATALOG-SERVICE
predicates:
- Path=/catalog-service/**
- id: order-service
uri: lb://ORDER-SERVICE
predicates:
- Path=/order-service/**
- id: first-service
uri: lb://MY-FIRST-SERVICE
predicates:
- Path=/first-service/**
filters:
# - AddRequestHeader=first-request, first-request-header2
# - AddResponseHeader=first-response, first-response-header2
- CustomFilter
- id: second-service
uri: lb://MY-SECOND-SERVICE
predicates:
- Path=/second-service/**
filters:
# - AddRequestHeader=second-request, second-request-header2
# - AddResponseHeader=second-response, second-response-header2
- name: CustomFilter
- name: LoggingFilter
args:
baseMessage: HI THERE
preLogger: true
postLogger: true
uri 설정의 lb같은 경우 로드밸런싱을 뜻한다. 만약 user-service가 구동된 인스턴스가 2개이상이라면 게이트웨이를 통해 들어온 요청은 여러개의 인스턴스중에서 적절하게 분산되어 보내지게 된다.
gateway서버같은 경우 포트번호를 8000번으로 지정하였다. 이제 게이트웨이서버를 통해서 유저서비스를 호출하도록하는 테스르를 진행해본다.
게이트웨이를 통해 유저서비스의 로그인기능을 호출하였다. 그 결과 jwt 토큰이 정상적으로 생성되어 헤더값에 반환된것을 볼 수 있다.