강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

백재원님의 프로필 이미지
백재원

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Spring Cloud Gateway - Logging Filter 적용 ➁

GlobalFilter, LoggingFilter가 동작하지 않습니다.

작성

·

19

·

수정됨

0

server:
  port: 8000

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

spring:
  application:
    name: apiGateway-service
  cloud:
    gateway:
      server:
        webflux:
          default-filters:
            - name: GlobalFilter
              args:
                baseMessage: Spring Cloud Gateway WebFlux Global Filter
                preLogger: true
                postLogger: true
          routes:
            - id: user-service
              uri: lb://USER-SERVICE
              predicates:
                - Path=/user-service/**
            - id: first-service
              uri: lb://MY-FIRST-SERVICE
              predicates:
                - Path=/first-service/**
              filters:
                - AddRequestHeader=f-request, 1st-request-header-by-yaml
                - AddResponseHeader=f-response, 1st-response-header-from-yaml
                - name: LoggingFilter
                  args:
                    baseMessage: Spring Cloud Gateway WebFlux Logging Filter
                    preLogger: true
                    postLogger: true


다음처럼 apigateway의 설정파일을 작성하였습니다. 하지만 두 필터가 모두 동작하지 않습니다. 필터 클래스 모두 강의와 동일하게 작성하였고, first-service와 apigateway-service 모두 유레카 서버에 잘 등록되며, api 게이트웨이 또한 동작을 정상적으로 합니다. 혹시 어느 부분에서 잘못되었는 지 알 수 있을까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.
백재원님, 먼저 설정 파일을 확인할 때, WebFlux 설정이 제대로 적용되고 있는지 확인하셔야 합니다. Spring Cloud Gateway는 WebFlux 기반에서 작동하므로 Spring WebFlux가 프로젝트에 포함되어 있어야 합니다. Spring WebFlux가 포함되지 않으면 GlobalFilter와 같은 WebFlux 관련 설정이 작동하지 않습니다. spring-boot-starter-webflux 의존성이 build.gradle이나 pom.xml에 추가되어 있는지 확인해 보세요.

또한, 설정 파일에서 default-filters 리스트가 server.webflux 하위에 위치하고 있는 부분이 잘못되었습니다. spring.cloud.gateway 하위로 변경하여 다음과 같이 수정해 보세요:

spring:
  cloud:
    gateway:
      default-filters:
        - name: GlobalFilter
          args:
            baseMessage: Spring Cloud Gateway WebFlux Global Filter
            preLogger: true
            postLogger: true
      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/user-service/**
        - id: first-service
          uri: lb://MY-FIRST-SERVICE
          predicates:
            - Path=/first-service/**
          filters:
            - AddRequestHeader=f-request, 1st-request-header-by-yaml
            - AddResponseHeader=f-response, 1st-response-header-from-yaml
            - name: LoggingFilter
              args:
                baseMessage: Spring Cloud Gateway WebFlux Logging Filter
                preLogger: true
                postLogger: true

마지막으로, 작성한 필터 클래스들이 Spring 애플리케이션 컨텍스트에 빈으로 등록되어 있는지도 확인하시길 바랍니다. 필터 클래스에 @Component 어노테이션이나 적절한 빈 등록 코드가 있는지 체크해 주세요. 추가적으로 Spring Boot Reference Documentation에 언급된 내용을 살펴보시면 도움이 될 수 있습니다.

백재원님의 프로필 이미지
백재원

작성한 질문수

질문하기