Spring Cloud로 개발하는 MSA/API Gateway Service

Spring Cloud Gateway - Filter 적용

webmaster 2022. 5. 3. 16:09
728x90

프로세스

전체 과정

  • client -> SpringCloudGateway -> MicroService로 전달된다.
  • SpringCloudGateWay 같은 경우 Predicate를 통해 분기 처리를 하고, 사전, 사후 필터 중 어떤 것을 동작시킬지 선택한다.
  • 필터의 경우 .yml파일과 같은 Property 파일로 작성해도 되지만 Java Code로 작성할 수도 있다.
  • 동작 과정
    • 요청 -> SpringCloudGateWay -> Predicate -> PreFilter -> Service -> PostFilter
  • SpringCloudGateway에서 Header를 추가할 수도 있다.

JAVA Code를 사용한 Route 등록

Java 코드를 통해 Predicate을 Route를 등록해 줄 수 있다.

JavaConfig로 Yml의 Route 설정 대체

  • route를 람다 형식으로 등록할 수 있다.
    • path : 어떠한 요청이 오게 되면을 정의 -> /first-service/** 
    • filter : 어떤 동작을 할지 -> 현재는 RequestHeader, ResponseHeader을 값을 추가해 주었다.
    • uri : 어디로 이동할지 정의 -> http://localhost:8081

FirstService RequestHeader를 받는 메서드 추가(RequestHeader를 잘 받는지 확인하는 Test)

GateWay에서 추가된 헤더를 확인할 수 있다.

  • @RequestHeader를 통해 Route에서 전달한 header가 잘 전달되었는지 log로 확인

SecondService RequestHeader를 받는 메서드 추가(RequestHeader를 잘 받는지 확인하는 Test)

GateWay에서 추가된 헤더를 확인할 수 있다.

  • @RequestHeader 를 통해 Route에서 전달한 header가 잘 전달되었는지 log로 확인

Yml 파일을 통해 Filter를 추가하기

server:
  port: 8000

eureka:
  client:
    register-with-eureka: false
    fetch-registry: 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/**
          filters:
            - AddRequestHeader= first-request, first-request-header2
            - AddResponseHeader= first-response, first-response-header2
        - id: second-service
          uri: http://localhost:8082/
          predicates:
            - Path=/second-service/** #해당 정보 모두가 URI 뒤에 붇게 된다. http://localhost:8082/second-service/**
          filters:
            - AddRequestHeader= second-request, second-request-header2
            - AddResponseHeader= second-response, second-response-header2
  • 추가할 Filter를 filters에 추가해 주면 된다.
    • AddRequestHeader를 통해 Request에 Header를 추가해주거나 AddReponseHeader를 통해 Responsedp header를 추가해 줄 수 있다.
  • JAVACode에서 했던 동작을 똑같이 YML을 통해서도 동작시킬 수 있다.
  • PostMan을 통해 확인 

PostMan을 통해 ResponseHeader, RequestHeader에 값이 잘 전달되는지 확인한다.

728x90