T_era

api gateway yml 설정 본문

Programing/Spring

api gateway yml 설정

블스뜸 2025. 6. 16. 15:06

WebFlux 기반의 Gateway 설정들을 상황별 사용법:

  1. 기본 라우팅 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           routes:
             - id: user-service
               uri: lb://USER-SERVICE
               predicates:
                 - Path=/user-service/**
               filters:
                 - StripPrefix=1
  • 사용 상황:
    • 리액티브 스트림 기반의 비동기 라우팅이 필요할 때
    • 높은 동시성 처리가 필요할 때
    • 논블로킹 I/O가 필요할 때
  1. 서비스 디스커버리 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           discovery:
             locator:
               enabled: true
               lower-case-service-id: true
  • 사용 상황:
    • Eureka와 같은 서비스 디스커버리와 비동기 통합이 필요할 때
    • 동적 서비스 라우팅이 필요할 때
  1. CORS 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           cors:
             configurations:
               '[/**]':
                 allowedOrigins: "https://example.com"
                 allowedMethods: "*"
                 allowedHeaders: "*"
                 allowCredentials: true
  • 사용 상황:
    • 리액티브 웹 애플리케이션과의 통신이 필요할 때
    • 비동기 CORS 처리가 필요할 때
  1. Rate Limiting 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           routes:
             - id: user-service
               uri: lb://USER-SERVICE
               filters:
                 - name: RequestRateLimiter
                   args:
                     redis-rate-limiter.replenishRate: 10
                     redis-rate-limiter.burstCapacity: 20
  • 사용 상황:
    • 비동기 방식의 요청 제한이 필요할 때
    • 리액티브 스트림 기반의 속도 제한이 필요할 때
  1. Circuit Breaker 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           routes:
             - id: user-service
               uri: lb://USER-SERVICE
               filters:
                 - name: CircuitBreaker
                   args:
                     name: userServiceCircuitBreaker
                     fallbackUri: forward:/fallback
  • 사용 상황:
    • 리액티브 서킷브레이커가 필요할 때
    • 비동기 장애 처리가 필요할 때
  1. Rewrite Path 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           routes:
             - id: user-service
               uri: lb://USER-SERVICE
               filters:
                 - RewritePath=/api/users/(?<segment>.*), /users/$\{segment}
  • 사용 상황:
    • 비동기 URL 변환이 필요할 때
    • 리액티브 스트림 기반의 경로 재작성이 필요할 때
  1. Add Request Header 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           routes:
             - id: user-service
               uri: lb://USER-SERVICE
               filters:
                 - AddRequestHeader=X-Source, Gateway
  • 사용 상황:
    • 비동기 요청 헤더 처리가 필요할 때
    • 리액티브 스트림 기반의 헤더 추가가 필요할 때
  1. Response Header 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           routes:
             - id: user-service
               uri: lb://USER-SERVICE
               filters:
                 - AddResponseHeader=X-Response-Time, 100ms
  • 사용 상황:
    • 비동기 응답 헤더 처리가 필요할 때
    • 리액티브 스트림 기반의 응답 수정이 필요할 때
  1. Retry 설정:
    spring:
    cloud:
     gateway:
       server:
         webflux:
           routes:
             - id: user-service
               uri: lb://USER-SERVICE
               filters:
                 - name: Retry
                   args:
                     retries: 3
                     statuses: BAD_GATEWAY,SERVICE_UNAVAILABLE
  • 사용 상황:
    • 비동기 재시도 로직이 필요할 때
    • 리액티브 스트림 기반의 재시도가 필요할 때
  1. Timeout 설정:
    spring:
    cloud:
    gateway:
      server:
        webflux:
          routes:
            - id: user-service
              uri: lb://USER-SERVICE
              filters:
                - name: Hystrix
                  args:
                    name: userServiceHystrix
                    fallbackUri: forward:/fallback
  • 사용 상황:
    • 비동기 타임아웃 처리가 필요할 때
    • 리액티브 스트림 기반의 타임아웃이 필요할 때
  1. WebSocket 설정:
    spring:
    cloud:
    gateway:
      server:
        webflux:
          routes:
            - id: websocket-service
              uri: ws://websocket-service
              predicates:
                - Path=/ws/**
  • 사용 상황:
    • WebSocket 통신이 필요할 때
    • 실시간 양방향 통신이 필요할 때
  1. SSE(Server-Sent Events) 설정:
    spring:
    cloud:
    gateway:
      server:
        webflux:
          routes:
            - id: sse-service
              uri: lb://SSE-SERVICE
              predicates:
                - Path=/sse/**
  • 사용 상황:
    • 서버 푸시 이벤트가 필요할 때
    • 실시간 단방향 스트리밍이 필요할 때

WebFlux 기반 설정의 주요 장점:

  1. 비동기 처리: 논블로킹 I/O로 높은 성능
  2. 리액티브 스트림: 백프레셔 지원으로 리소스 관리 최적화
  3. 확장성: 적은 수의 스레드로 많은 요청 처리
  4. 실시간 처리: WebSocket, SSE 등 실시간 통신 지원
  5. 리소스 효율성: 메모리 사용량 최적화

이러한 설정들은 마이크로서비스 아키텍처에서 특히 유용하며, 높은 동시성과 실시간 처리가 필요한 경우에 적합하다.