본문 바로가기
Backend2025년 2월 12일6분 읽기

API Gateway 패턴 — Kong vs Traefik vs AWS API Gateway

YS
김영삼
조회 434

API Gateway가 필요한 이유

마이크로서비스 아키텍처에서 API Gateway는 클라이언트와 백엔드 서비스 사이의 단일 진입점 역할을 합니다. 인증, 속도 제한, 로깅, 라우팅, 로드 밸런싱 같은 공통 관심사를 중앙에서 관리하여 각 서비스의 복잡도를 줄여줍니다.

핵심 기능 비교

기능KongTraefikAWS API Gateway
배포 형태셀프호스팅 / 클라우드셀프호스팅완전 관리형
설정 방식Admin API / DB파일 / Docker라벨콘솔 / CloudFormation
플러그인 생태계매우 풍부 (100+)미들웨어 기반AWS 서비스 통합
프로토콜HTTP, gRPC, WebSocketHTTP, TCP, UDP, gRPCHTTP, WebSocket
서비스 디스커버리DNS, ConsulDocker, 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

아직 댓글이 없습니다.
Ctrl+Enter로 등록