API Filter

duckbill413·2024년 7월 30일
0

Spring Cloud

목록 보기
2/10
post-thumbnail

Spring Cloud Gateway 의 필터는 요청(Request)와 응답(Response)을 처리하는 과정에서 다양한 작업을 수행할 수 있게 해주는 구성 요소.

필터는 전처리와 후처리 작업을 통해 API Gateway의 기능을 확장하고 맞춤형 동작을 할 수 있도록 돕는다.

Cloud Filter 를 이용한 Routing 실습

기존에 작성한 application.yml의 라우팅 부분을 주석 처리하고 Filter class인 FilterConfig.class를 이용하여 라우팅해 보겠습니다.

  1. 기존의 application.yml Routing 부분 주석 처리

    spring:
      application:
        name: api-gateway-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/**
    • first-service, second-service로 라우팅 하는 부분을 주석 처리
  2. FilterConfig.class를 이용하여 라우팅 설정

    @Configuration
    public class FilterConfig {
        @Bean
        public RouteLocator routeLocator(RouteLocatorBuilder routeLocatorBuilder) {
            return routeLocatorBuilder.routes()
                    .route(predicateSpec -> predicateSpec.path("/first-service/**")
                            .filters(gatewayFilterSpec -> gatewayFilterSpec
                                    .addRequestHeader("first-request", "first-request-header")
                                    .addResponseHeader("first-response", "first-response-header"))
                            .uri("http://localhost:8081"))
                    .route(predicateSpec -> predicateSpec.path("/second-service/**")
                            .filters(gatewayFilterSpec -> gatewayFilterSpec
                                    .addRequestHeader("second-request", "second-request-header")
                                    .addResponseHeader("second-response", "second-response-header"))
                            .uri("http://localhost:8082"))
                    .build();
        }
    }
    • 추가적으로 Request, Response header에 filter를 추가
      • Request, Response가 Filter를 거쳐갈 때 위와 같은 Header가 추가된다.
  3. Service Project에 API를 추가하여 RoutingHeader 가 적절하게 추가 되었는지 확인

    1. API 추가 (***ServiceController)

      @GetMapping("/message")
      public String message(@RequestHeader("first-request") String header) {
          log.info(header);
          return "Hello World in First Service";
      }
      • @RequestHeader를 추가하여 Header를 전달 받고 Log로 출력
  4. Filter 수행 확인

    http://localhost:8000/first-service/message 로 요청을 보내어 확인해 보자

    • First Service Project에서 Request Header 로그 확인

      INFO w.d.firstservice.FirstServiceController  : first-request-header

      Request Header에 추가한 Header 를 확인해 볼 수 있다.

    • Web에서 Response Header 확인

      요청에 대한 응답에는 Response Header를 확인

      • First-Response Header를 확인할 수 있다.

Before

  1. 다음 실습을 위하여 이전에 application.yml의 주석 처리한 부분 원복
  2. FilterConfig@Configuration, @Bean을 주석처리하여 Spring의 Bean 등록 X 처리

Application.yml 을 이용한 Filter 추가

application.yml에 Filter 정보를 추가하여 Header를 추가할 수 있다.

server:
  port: 8000

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8761/eureka

spring:
  application:
    name: api-gateway-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/**
          filters:
            - AddRequestHeader=second-request, second-request-header2
            - AddResponseHeader=second-response, second-response-header2
  • filtersRequest Header, Response Header를 추가
  • 결과를 테스트해 보면 이전과 동일하게 Filter가 적용된 것을 확인할 수 있다.
profile
같이 공부합시다~

0개의 댓글