ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Boot 시리즈 33편 – Spring Cloud Gateway: API 게이트웨이 설계와 트래픽 라우팅 전략
    기술과 산업/언어 및 프레임워크 2025. 5. 20. 12:46
    728x90

    Spring Cloud Gateway를 활용한 API Gateway 설계와 트래픽 라우팅 전략을 정리합니다. 마이크로서비스 구조에서 게이트웨이의 역할, 필터 구성, 라우팅, 인증 및 보안 적용까지 실무 기준으로 설명합니다.

     

    마이크로서비스 구조에서 사용자 요청이 각 서비스를 직접 호출하도록 설계하면
    서비스의 수가 늘어날수록 복잡도와 보안 리스크가 증가합니다.
    이 문제를 해결하는 핵심 요소가 바로 API Gateway입니다.

    Spring Cloud Gateway는 Netflix Zuul의 뒤를 이어,
    Spring 생태계에서 가장 널리 사용되는 비동기 논블로킹 기반의 API Gateway 프레임워크입니다.


    1. Spring Cloud Gateway란?

    항목 설명

    목적 사용자 요청을 여러 내부 서비스로 라우팅하고, 공통 정책을 게이트웨이에서 처리
    아키텍처 기반 Netty 기반 WebFlux (비동기 Reactive)
    특징 라우팅, 필터링, 인증, 로깅, Load Balancing까지 통합 처리 가능
    실무 활용 마이크로서비스 트래픽 관리, 모놀리식 분리, 인증 통합, 블루그린 배포 등

    2. 의존성 및 설정

    1) Gradle 의존성 추가

    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    

    Spring Cloud BOM 적용 필요

    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:2023.0.0"
        }
    }
    

    2) application.yml 예시

    spring:
      cloud:
        gateway:
          routes:
            - id: user-service
              uri: http://localhost:8081
              predicates:
                - Path=/api/users/**
              filters:
                - AddRequestHeader=X-Gateway, SpringCloud
    

    이 설정은 /api/users/** 경로로 들어온 요청을 http://localhost:8081로 프록시합니다.


    3. 라우팅 구성 요소

    구성요소 설명

    routes 게이트웨이가 프록시할 대상 경로 정의
    predicates 요청 조건 필터 (예: 경로, 시간, 메소드 등)
    filters 요청/응답 변경 또는 기능 추가 (예: 인증, 헤더 추가, 로깅 등)
    uri 실제로 트래픽을 전달할 대상 서비스 주소

    4. 주요 Predicate 및 Filter 사용 예시

    Path 기반

    - Path=/api/products/**
    

    Method 기반

    - Method=GET
    

    Header 기반

    - Header=X-User-Role, admin
    

    필터 예시: 응답 헤더 추가

    filters:
      - AddResponseHeader=X-Processed-By, Gateway
    

    필터 예시: 요청 로그 출력

    @Component
    public class LoggingFilter implements GlobalFilter {
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            log.info("Request: {}", exchange.getRequest().getURI());
            return chain.filter(exchange);
        }
    }
    

    5. 인증/보안 처리 전략

    API Gateway는 인증과 인가를 통합하는 위치로도 이상적입니다.

    1) JWT 인증 처리 필터 예시

    @Component
    public class JwtAuthFilter implements GlobalFilter {
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            String token = extractToken(exchange.getRequest());
            if (!isValid(token)) {
                exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
                return exchange.getResponse().setComplete();
            }
            return chain.filter(exchange);
        }
    }
    

    이런 구조를 통해 각 서비스는 인증 로직 없이도 JWT 기반 보호를 받을 수 있습니다.


    6. 로드밸런싱 및 마이크로서비스 연동

    Spring Cloud Gateway는 Spring Cloud LoadBalancer, Eureka 등과 통합되어
    uri: lb://서비스명 형태로 내부 서비스 호출이 가능합니다.

    uri: lb://order-service
    

    → Eureka를 통해 order-service의 인스턴스를 찾아 트래픽을 분산시킴


    7. 장애 대응 및 Circuit Breaker 적용

    Spring Cloud Gateway는 Resilience4j 기반의 Circuit Breaker도 연동 가능합니다.

    filters:
      - name: CircuitBreaker
        args:
          name: fallbackCmd
          fallbackUri: forward:/fallback
    

    마무리 요약

    항목 요약

    게이트웨이 역할 트래픽 라우팅, 공통 인증, 보안, 로깅, 필터 처리
    핵심 구성 routes, predicates, filters, uri
    인증 통합 GlobalFilter 기반 JWT 처리 구조
    마이크로서비스 연동 Eureka + LoadBalancer 연동 가능
    장애 대응 Circuit Breaker, fallback URI 처리 가능

    다음 편 예고

    Spring Boot 시리즈 34편: Eureka와 서비스 디스커버리 구조 – 마이크로서비스 환경에서의 자동 인스턴스 탐색 전략

    728x90
Designed by Tistory.