Microservices Architecture / / 2024. 12. 16. 14:10

글로벌 필터(Global Filter)

글로벌 필터(Global Filter)Spring Cloud Gateway에서 제공하는 필터로, 모든 HTTP 요청응답에 대해 전역적으로 실행되는 필터입니다.


글로벌 필터란?

  • Spring Cloud Gateway의 핵심 기능 중 하나입니다.
  • 모든 요청이 라우팅되기 전에 전처리(Pre-processing) 작업을 수행하고,
    응답이 반환되기 전에 후처리(Post-processing) 작업을 수행할 수 있습니다.
  • 특정 라우트에 상관없이 모든 요청에 대해 적용되기 때문에 전역 필터로 불립니다.

글로벌 필터의 특징

  1. 전역 적용

    • 특정 라우트(Route)와 상관없이 모든 요청에 대해 필터를 적용합니다.
  2. 전처리와 후처리 가능

    • 요청이 서버에 도달하기 전에 전처리 작업을 수행할 수 있습니다.
    • 응답이 반환되기 직전에 후처리 작업을 수행할 수 있습니다.
  3. 비동기 방식

    • Spring Cloud Gateway는 리액티브(Non-blocking) 기반이므로 글로벌 필터도 비동기 방식으로 동작합니다.
  4. 우선 순위 설정

    • Ordered 인터페이스를 구현하여 필터 실행 순서를 설정할 수 있습니다.

글로벌 필터 동작 흐름

Spring Cloud Gateway에서 요청이 처리되는 순서:

  1. Global Filter:

    • 모든 요청에 대해 전처리 작업이 실행됩니다.
  2. Gateway Filter:

    • 특정 라우트(Route)에 설정된 필터들이 실행됩니다.
  3. Target Service:

    • 요청이 실제 대상 서비스로 전달됩니다.
  4. Global Filter:

    • 응답이 반환되기 전에 후처리 작업이 실행됩니다.

글로벌 필터 구현 방법

글로벌 필터는 GlobalFilterOrdered 인터페이스를 구현하여 정의합니다.


1. 글로벌 필터 예제 코드

package com.example.gateway.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
public class CustomGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 요청 전처리 (Pre-processing)
        System.out.println("Global Filter: Request - " + exchange.getRequest().getPath());

        // 헤더에 Correlation ID 추가
        exchange.getRequest()
                .mutate()
                .header("X-Correlation-ID", "12345")
                .build();

        // 체인을 통해 다음 필터로 요청 전달
        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
            // 응답 후처리 (Post-processing)
            System.out.println("Global Filter: Response - " + exchange.getResponse().getStatusCode());
        }));
    }

    @Override
    public int getOrder() {
        return -1; // 낮은 숫자일수록 우선 순위가 높음
    }
}

2. 동작 설명

  1. filter() 메서드

    • ServerWebExchange를 통해 요청 및 응답에 접근합니다.
    • 전처리 작업: 요청 헤더에 X-Correlation-ID를 추가
    • 후처리 작업: 응답 상태 코드를 로깅
  2. getOrder() 메서드

    • 필터의 우선순위를 설정합니다.
    • 낮은 숫자일수록 먼저 실행됩니다.

3. 로그 출력 결과

요청과 응답이 처리될 때 로그가 출력됩니다.

Global Filter: Request - /api/payment
Global Filter: Response - 200 OK

글로벌 필터의 주요 사용 사례

  1. 공통 로깅

    • 모든 요청과 응답에 대한 로그 출력을 수행합니다.
  2. 보안 처리

    • 요청 헤더에 JWT 토큰 검증 또는 API 키 확인을 수행합니다.
  3. 추적 ID 추가 (Correlation ID)

    • 모든 요청에 Correlation ID를 추가하고, 서비스 간 추적을 가능하게 합니다.
  4. 공통 헤더 추가/수정

    • 특정 헤더를 추가하거나 수정하는 작업을 수행합니다.
  5. 응답 데이터 수정

    • 반환되는 응답에 공통적으로 추가 데이터를 삽입하거나 수정합니다.

정리

  • 글로벌 필터는 Spring Cloud Gateway에서 모든 요청과 응답에 대해 전역적으로 적용되는 필터입니다.
  • 전처리(Pre-processing)와 후처리(Post-processing)를 수행할 수 있습니다.
  • 보안, 로깅, 헤더 설정, 트래픽 추적 등의 공통 작업을 처리하는 데 사용됩니다.

즉, 요청이 서블릿이나 라우터로 전달되기 전에 전역적으로 설정할 작업을 글로벌 필터에서 수행합니다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유