• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Filter우선순위 질문

23.07.21 01:36 작성 조회수 293

0

안녕하세요! MSA강의 섹션2 Logging Filter관련 부분 듣다가 필터 우선순위와 관련된 궁금증이 생겨서 질문 남깁니다!

        GatewayFilter filter = new OrderedGatewayFilter((exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();
            ServerHttpResponse response = exchange.getResponse();

            log.info("Logging Filter base message: {}",config.getBaseMessage());

            if(config.isPreLogger()){
                log.info("Logging Filter Start: request uri -> {}",request.getURI());
            }

            //Custom Post Filter
            return chain.filter(exchange).then(Mono.fromRunnable(()->{

                if(config.isPostLogger()){
                    log.info("Logging Filter End: response Code -> {}",response.getStatusCode());
                }
            }));
        }, Ordered.HIGHEST_PRECEDENCE);
        return filter;

위와 같은 방식으로 OrderedGatewayFilter를 사용해 filter를 생성했는데 이때 두번째 인자로 Ordered.HIGHEST_PRECEDENCE를 사용할 때와 Ordered.LOWEST_PRECEDENCE를 사용할 때 등장하는 filter 우선순위와 관련된 궁금증이 생겼습니다.

HIGHEST를 사용할때는 우선순위가 높은 필터가 먼저 나와서 강의에서도 그렇고 코드 실행결과

LoggingFIlter -> GlobalFilter -> CustomFilter의 순서로 Filter 가 등장했는데 그렇다면, 반대로 우선순위가 낮은 경우인 LOWEST를 사용할 때는

CustomFilter -> GlobalFilter -> LoggingFIlter의 순서로 filter가 등장해야한다고 생각하는데 결과가 그렇지 않아서 우선순위에 어떠한 개념이 있는지, 제가 어떤 개념을 놓치고 있는지 의문이 들어 질문글 남깁니다!

 

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.23

안녕하세요, 인프런 AI 인턴이에요.

OrderedGatewayFilter는 GatewayFilter 인터페이스의 하위 인터페이스인 Ordered 인터페이스를 구현한 클래스입니다. Ordered 인터페이스는 필터의 우선순위를 결정하는 방법을 정의하고 있습니다.

Ordered.HIGHEST_PRECEDENCE와 Ordered.LOWEST_PRECEDENCE는 Ordered 인터페이스에서 정의된 우선순위 상수입니다. Ordered.HIGHEST_PRECEDENCE는 가장 높은 우선순위를 갖고 있으며, Ordered.LOWEST_PRECEDENCE는 가장 낮은 우선순위를 가지고 있습니다.

따라서, Ordered.HIGHEST_PRECEDENCE를 사용하는 필터는 다른 필터보다 먼저 실행됩니다. 반면, Ordered.LOWEST_PRECEDENCE를 사용하는 필터는 다른 필터보다 나중에 실행됩니다.

강의에서 보신 것처럼 HIGHEST를 사용하는 경우 LoggingFilter가 가장 먼저 실행되고, GlobalFilter, CustomFilter 순서로 실행됩니다.

즉, 필터 우선순위는 Ordered 인터페이스에서 정의된 상수에 따라 결정되며, 낮은 값일수록 우선순위가 높습니다.

그럼 다른 질문이 있으신가요?