API Gateway가 필요한 이유
마이크로서비스 아키텍처에서 API Gateway는 클라이언트와 백엔드 서비스 사이의 단일 진입점 역할을 합니다. 인증, 속도 제한, 로깅, 라우팅, 로드 밸런싱 같은 공통 관심사를 중앙에서 관리하여 각 서비스의 복잡도를 줄여줍니다.
핵심 기능 비교
| 기능 | Kong | Traefik | AWS API Gateway |
|---|---|---|---|
| 배포 형태 | 셀프호스팅 / 클라우드 | 셀프호스팅 | 완전 관리형 |
| 설정 방식 | Admin API / DB | 파일 / Docker라벨 | 콘솔 / CloudFormation |
| 플러그인 생태계 | 매우 풍부 (100+) | 미들웨어 기반 | AWS 서비스 통합 |
| 프로토콜 | HTTP, gRPC, WebSocket | HTTP, TCP, UDP, gRPC | HTTP, WebSocket |
| 서비스 디스커버리 | DNS, Consul | Docker, K8s 네이티브 | VPC Link, NLB |
| 가격 | OSS 무료 / Enterprise 유료 | 무료 | 요청당 과금 |
Kong 설정 예제
Kong은 Nginx 기반으로 높은 처리량과 풍부한 플러그인 생태계를 제공합니다. 선언적 설정 파일로 관리할 수 있습니다.
# kong.yml - 선언적 설정
_format_version: "3.0"
services:
- name: user-service
url: http://user-svc:3000
routes:
- name: user-route
paths:
- /api/users
strip_path: true
plugins:
- name: rate-limiting
config:
minute: 100
policy: redis
redis_host: redis
- name: jwt
config:
claims_to_verify:
- exp
- name: correlation-id
config:
header_name: X-Request-ID
generator: uuid
Kong 플러그인 활용
# 커스텀 플러그인으로 요청 변환
plugins:
- name: request-transformer
config:
add:
headers:
- "X-Forwarded-Service:user-service"
remove:
headers:
- "X-Internal-Token"
- name: response-ratelimiting
config:
limits:
sms:
minute: 10
Traefik 설정 예제
Traefik은 Docker와 Kubernetes에 네이티브하게 통합되어 컨테이너 오케스트레이션 환경에서 자동 서비스 디스커버리를 지원합니다.
# docker-compose.yml
services:
traefik:
image: traefik:v3.0
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.le.acme.tlschallenge=true"
- "--certificatesresolvers.le.acme.email=admin@example.com"
ports:
- "80:80"
- "443:443"
user-service:
image: user-svc:latest
labels:
- "traefik.http.routers.users.rule=PathPrefix(`/api/users`)"
- "traefik.http.routers.users.tls.certresolver=le"
- "traefik.http.services.users.loadbalancer.server.port=3000"
- "traefik.http.middlewares.users-ratelimit.ratelimit.average=100"
- "traefik.http.middlewares.users-ratelimit.ratelimit.burst=50"
AWS API Gateway
# SAM template
Resources:
ApiGateway:
Type: AWS::Serverless::Api
Properties:
StageName: prod
Auth:
DefaultAuthorizer: CognitoAuthorizer
Authorizers:
CognitoAuthorizer:
UserPoolArn: !GetAtt UserPool.Arn
Cors:
AllowOrigin: "'https://example.com'"
AllowMethods: "'GET,POST,PUT,DELETE'"
MethodSettings:
- ThrottlingBurstLimit: 100
ThrottlingRateLimit: 50
선택 가이드
- Kong: 플러그인 생태계가 중요하고 멀티클라우드/온프레미스 환경이라면 최적
- Traefik: Docker/Kubernetes 네이티브 환경에서 자동 설정과 간편한 TLS가 필요할 때
- AWS API Gateway: AWS 올인 환경에서 서버리스 아키텍처와 Lambda를 결합할 때
어떤 솔루션을 선택하든 장애 전파를 막기 위한 Circuit Breaker, 관찰성을 위한 분산 추적(OpenTelemetry), 그리고 카나리 배포 지원 여부를 반드시 검토해야 합니다.
댓글 0