기타
Apache APISIX 로 API Gateway(Spring Cloud Gateway) 대체
ipxy
2025. 3. 31. 15:23
728x90
✅ APISIX로 Java Spring Boot API Gateway 대체
항목 | Spring Cloud Gateway | Apache APISIX |
💡 목적 | Java 기반 API Gateway | 고성능 Nginx 기반 API Gateway |
🔄 라우팅 | Java 코드/설정으로 제어 | CRD(YAML) 또는 Admin API로 제어 |
🚀 성능 | Java 서버 기반 → 높은 리소스 사용 | Nginx 기반 → 매우 가볍고 빠름 |
🔒 인증/보안 | JWT, OAuth2 지원 (Spring Security 필요) | JWT, OAuth2, IP 필터 등 내장 플러그인 |
📊 모니터링 | Actuator 기반 | Prometheus, Grafana 연동 플러그인 |
🧱 확장성 | Java 코드 커스터마이징 | Lua 플러그인 또는 WebAssembly |
☸️ 쿠버네티스 친화도 | 일부 구성 필요 | Helm Chart + CRD 기반 완벽 지원 |
🧑💻 유지보수 | Java 코드 관리 필요 | 설정 위주 관리, Hot Reload 가능 |
🎯 왜 APISIX를 API Gateway로 사용하는 것이 유리한가요?
🔹 1. 라우팅 관리가 간단 (코드 없이 YAML/REST API로 설정)
예시:
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: user-api
spec:
http:
- name: route-user
match:
paths:
- /users/*
backends:
- serviceName: user-service
servicePort: 8080
🔹 2. 플러그인 기반 보안 & 인증 내장
- JWT 인증 (jwt-auth)
- Key 인증 (key-auth)
- IP 제한 (ip-restriction)
- Rate Limiting (limit-req, limit-count)
- CORS 처리, Header 추가 등
→ Java 코드 없이 모든 걸 플러그인으로 해결 가능.
🔹 3. 고성능, 저비용
- Spring Cloud Gateway는 JVM 위에서 돌아가기 때문에 CPU, 메모리 사용량이 상대적으로 높음
- APISIX는 Nginx + Lua + OpenResty 기반으로 매우 가볍고 빠름
- MSA 구조에서 게이트웨이 수백 TPS 이상일 경우, APISIX가 훨씬 유리함
🔹 4. 쿠버네티스 환경에 최적화
- Helm 차트로 설치 가능
- CRD (ApisixRoute, ApisixUpstream, ApisixPluginConfig 등) 제공
- Istio 없이도 게이트웨이 역할 가능
- 서비스 디스커버리, TLS, Ingress 기능 포함
🔹 5. Spring Boot와의 역할 분리 가능
구성 요소 | 역할 |
Spring Boot | 실제 비즈니스 로직 API |
APISIX | API Gateway, 인증, 라우팅, 필터링, 보안 |
Kafka | 비동기 메시지 처리 |
Elasticsearch, Prometheus | 로깅 및 모니터링 |
🏗️ 마이그레이션 전략
단계 | 설명 |
1단계 | 기존 Spring Boot Gateway의 라우팅 목록 추출 |
2단계 | ApisixRoute 리소스로 변환 |
3단계 | 인증/보안 Spring 필터 → APISIX 플러그인으로 전환 |
4단계 | Helm 차트로 배포, 기존 Gateway 트래픽을 점진적으로 전환 |
5단계 | 기존 Gateway 종료 후 유지보수 통합 |
✅ 결론
Spring Cloud Gateway가 꼭 필요한 복잡한 조건이 아니라면,
APISIX가 더 빠르고, 확장성 있고, 쿠버네티스 친화적이며, 운영 편의성도 우수합니다.
📦 원하시면 제공 가능
- ✅ Spring Cloud Gateway → APISIX 라우팅 변환 예시
- ✅ Helm 기반 APISIX 설치 템플릿
- ✅ 실전 API Gateway 아키텍처 설계도
- ✅ 인증/로그/모니터링 플러그인 구성
Apache APISIX의 ApisixRoute YAML 형식
🧩 예제 시나리오
🔸 Spring Cloud Gateway 설정 (Java + YAML 방식)
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://user-service:8080
predicates:
- Path=/users/**
filters:
- AddRequestHeader=X-Request-Foo, Bar
- StripPrefix=1
- RequestRateLimiter=1 req/sec
✅ APISIX 라우팅으로 변환 예시
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: user-service-route
namespace: default
spec:
http:
- name: user-service
match:
paths:
- /users/*
plugins:
- name: proxy-rewrite
enable: true
config:
regex_uri: ["/users/(.*)", "/$1"]
- name: request-id
enable: true
- name: limit-req
enable: true
config:
rate: 1 # 초당 1건
burst: 0
key: remote_addr
- name: proxy-cache
enable: false
- name: response-rewrite
enable: false
- name: cors
enable: false
- name: request-transformer
enable: true
config:
add:
headers:
X-Request-Foo: Bar
backends:
- serviceName: user-service
servicePort: 8080
📌 주요 변환 포인트 요약
Spring Gateway 기능 | APISIX 플러그인 |
Path=/users/** | paths: ["/users/*"] |
StripPrefix=1 | proxy-rewrite with regex_uri |
AddRequestHeader=X-Request-Foo | request-transformer |
RateLimiter=1 req/sec | limit-req |
필터 체이닝 | 플러그인 배열 순서로 처리됨 |
📦 기타 자주 쓰이는 Spring Gateway 기능 → APISIX 변환
Spring 기능 | APISIX 대응 |
CORS 처리 | cors 플러그인 |
JWT 인증 | jwt-auth 플러그인 |
Header 수정 | request-transformer, response-rewrite |
IP 제한 | ip-restriction 플러그인 |
HTTPS 리디렉션 | redirect 또는 TLS 설정 |
글로벌 필터 | ApisixPluginConfig 또는 GlobalRules 리소스 사용 |
728x90