T_era
api gateway yml 설정 본문
WebFlux 기반의 Gateway 설정들을 상황별 사용법:
- 기본 라우팅 설정:
spring: cloud: gateway: server: webflux: routes: - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/** filters: - StripPrefix=1
- 사용 상황:
- 리액티브 스트림 기반의 비동기 라우팅이 필요할 때
- 높은 동시성 처리가 필요할 때
- 논블로킹 I/O가 필요할 때
- 서비스 디스커버리 설정:
spring: cloud: gateway: server: webflux: discovery: locator: enabled: true lower-case-service-id: true
- 사용 상황:
- Eureka와 같은 서비스 디스커버리와 비동기 통합이 필요할 때
- 동적 서비스 라우팅이 필요할 때
- CORS 설정:
spring: cloud: gateway: server: webflux: cors: configurations: '[/**]': allowedOrigins: "https://example.com" allowedMethods: "*" allowedHeaders: "*" allowCredentials: true
- 사용 상황:
- 리액티브 웹 애플리케이션과의 통신이 필요할 때
- 비동기 CORS 처리가 필요할 때
- 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
- 사용 상황:
- 비동기 방식의 요청 제한이 필요할 때
- 리액티브 스트림 기반의 속도 제한이 필요할 때
- Circuit Breaker 설정:
spring: cloud: gateway: server: webflux: routes: - id: user-service uri: lb://USER-SERVICE filters: - name: CircuitBreaker args: name: userServiceCircuitBreaker fallbackUri: forward:/fallback
- 사용 상황:
- 리액티브 서킷브레이커가 필요할 때
- 비동기 장애 처리가 필요할 때
- Rewrite Path 설정:
spring: cloud: gateway: server: webflux: routes: - id: user-service uri: lb://USER-SERVICE filters: - RewritePath=/api/users/(?<segment>.*), /users/$\{segment}
- 사용 상황:
- 비동기 URL 변환이 필요할 때
- 리액티브 스트림 기반의 경로 재작성이 필요할 때
- Add Request Header 설정:
spring: cloud: gateway: server: webflux: routes: - id: user-service uri: lb://USER-SERVICE filters: - AddRequestHeader=X-Source, Gateway
- 사용 상황:
- 비동기 요청 헤더 처리가 필요할 때
- 리액티브 스트림 기반의 헤더 추가가 필요할 때
- Response Header 설정:
spring: cloud: gateway: server: webflux: routes: - id: user-service uri: lb://USER-SERVICE filters: - AddResponseHeader=X-Response-Time, 100ms
- 사용 상황:
- 비동기 응답 헤더 처리가 필요할 때
- 리액티브 스트림 기반의 응답 수정이 필요할 때
- 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
- 사용 상황:
- 비동기 재시도 로직이 필요할 때
- 리액티브 스트림 기반의 재시도가 필요할 때
- Timeout 설정:
spring: cloud: gateway: server: webflux: routes: - id: user-service uri: lb://USER-SERVICE filters: - name: Hystrix args: name: userServiceHystrix fallbackUri: forward:/fallback
- 사용 상황:
- 비동기 타임아웃 처리가 필요할 때
- 리액티브 스트림 기반의 타임아웃이 필요할 때
- WebSocket 설정:
spring: cloud: gateway: server: webflux: routes: - id: websocket-service uri: ws://websocket-service predicates: - Path=/ws/**
- 사용 상황:
- WebSocket 통신이 필요할 때
- 실시간 양방향 통신이 필요할 때
- SSE(Server-Sent Events) 설정:
spring: cloud: gateway: server: webflux: routes: - id: sse-service uri: lb://SSE-SERVICE predicates: - Path=/sse/**
- 사용 상황:
- 서버 푸시 이벤트가 필요할 때
- 실시간 단방향 스트리밍이 필요할 때
WebFlux 기반 설정의 주요 장점:
- 비동기 처리: 논블로킹 I/O로 높은 성능
- 리액티브 스트림: 백프레셔 지원으로 리소스 관리 최적화
- 확장성: 적은 수의 스레드로 많은 요청 처리
- 실시간 처리: WebSocket, SSE 등 실시간 통신 지원
- 리소스 효율성: 메모리 사용량 최적화
이러한 설정들은 마이크로서비스 아키텍처에서 특히 유용하며, 높은 동시성과 실시간 처리가 필요한 경우에 적합하다.
'Programing > Spring' 카테고리의 다른 글
| AOP로 로깅을 할 때 동적으로 값을 조율할 땐 어떤 방법을 사용할까 (1) | 2025.06.22 |
|---|---|
| WebFlux와 일반 route의 차이 (0) | 2025.06.16 |
| API Gateway 구현하기 (0) | 2025.06.16 |
| 나는 QueryDSL을 사용하는데 JPQL도 사용해야할까? (1) | 2025.06.11 |
| Bean Scope의 특징과 사용처 (0) | 2025.06.11 |