글로벌 필터(Global Filter)는 Spring Cloud Gateway에서 제공하는 필터로, 모든 HTTP 요청과 응답에 대해 전역적으로 실행되는 필터입니다.
✅ 글로벌 필터란?
- Spring Cloud Gateway의 핵심 기능 중 하나입니다.
- 모든 요청이 라우팅되기 전에 전처리(Pre-processing) 작업을 수행하고,
응답이 반환되기 전에 후처리(Post-processing) 작업을 수행할 수 있습니다. - 특정 라우트에 상관없이 모든 요청에 대해 적용되기 때문에 전역 필터로 불립니다.
✅ 글로벌 필터의 특징
전역 적용
- 특정 라우트(Route)와 상관없이 모든 요청에 대해 필터를 적용합니다.
전처리와 후처리 가능
- 요청이 서버에 도달하기 전에 전처리 작업을 수행할 수 있습니다.
- 응답이 반환되기 직전에 후처리 작업을 수행할 수 있습니다.
비동기 방식
- Spring Cloud Gateway는 리액티브(Non-blocking) 기반이므로 글로벌 필터도 비동기 방식으로 동작합니다.
우선 순위 설정
Ordered
인터페이스를 구현하여 필터 실행 순서를 설정할 수 있습니다.
✅ 글로벌 필터 동작 흐름
Spring Cloud Gateway에서 요청이 처리되는 순서:
Global Filter:
- 모든 요청에 대해 전처리 작업이 실행됩니다.
Gateway Filter:
- 특정 라우트(Route)에 설정된 필터들이 실행됩니다.
Target Service:
- 요청이 실제 대상 서비스로 전달됩니다.
Global Filter:
- 응답이 반환되기 전에 후처리 작업이 실행됩니다.
✅ 글로벌 필터 구현 방법
글로벌 필터는 GlobalFilter와 Ordered 인터페이스를 구현하여 정의합니다.
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. 동작 설명
filter()
메서드ServerWebExchange
를 통해 요청 및 응답에 접근합니다.- 전처리 작업: 요청 헤더에
X-Correlation-ID
를 추가 - 후처리 작업: 응답 상태 코드를 로깅
getOrder()
메서드- 필터의 우선순위를 설정합니다.
- 낮은 숫자일수록 먼저 실행됩니다.
3. 로그 출력 결과
요청과 응답이 처리될 때 로그가 출력됩니다.
Global Filter: Request - /api/payment
Global Filter: Response - 200 OK
✅ 글로벌 필터의 주요 사용 사례
공통 로깅
- 모든 요청과 응답에 대한 로그 출력을 수행합니다.
보안 처리
- 요청 헤더에 JWT 토큰 검증 또는 API 키 확인을 수행합니다.
추적 ID 추가 (Correlation ID)
- 모든 요청에 Correlation ID를 추가하고, 서비스 간 추적을 가능하게 합니다.
공통 헤더 추가/수정
- 특정 헤더를 추가하거나 수정하는 작업을 수행합니다.
응답 데이터 수정
- 반환되는 응답에 공통적으로 추가 데이터를 삽입하거나 수정합니다.
✅ 정리
- 글로벌 필터는 Spring Cloud Gateway에서 모든 요청과 응답에 대해 전역적으로 적용되는 필터입니다.
- 전처리(Pre-processing)와 후처리(Post-processing)를 수행할 수 있습니다.
- 보안, 로깅, 헤더 설정, 트래픽 추적 등의 공통 작업을 처리하는 데 사용됩니다.
즉, 요청이 서블릿이나 라우터로 전달되기 전에 전역적으로 설정할 작업을 글로벌 필터에서 수행합니다.
'Microservices Architecture' 카테고리의 다른 글
AWS S3 인스턴스 생성 및 IAM 그리고 Access/Secrete Key 생성 (0) | 2024.12.24 |
---|---|
Correlation ID (0) | 2024.12.16 |
/actuator/gateway/refresh의 refresh (0) | 2024.12.16 |
리액티브(Reactive)와 논리액티브(Non-Reactive) (0) | 2024.12.16 |
Spring Cloud Gateway (4) | 2024.12.16 |