KrakenD

KrakenD는 고성능 API 게이트웨이로, 2016년에 오픈 소스 프로젝트로 시작되었으며 현재는 KrakenD 회사에서 개발 및 유지보수하고 있다. Go 언어로 작성되었으며, 마이크로서비스 아키텍처에서 백엔드 API들을 통합하고 최적화하기 위해 설계되었다.

KrakenD는 “무상태(stateless)” 설계 철학을 가지고 있으며, 이는 서버 간에 공유해야 할 상태가 없다는 것을 의미한다. 이러한 접근 방식은 수평적 확장성과 신뢰성을 향상시키는 데 도움이 된다. KrakenD는 주로 API 통합 및 컴포지션에 중점을 두고 있으며, 이는 다른 API 게이트웨이와 구별되는 주요 특징이다.

제품 라인업은 다음과 같다:

KrakenD의 핵심 가치는 다음과 같다:

KrakenD 아키텍처

KrakenD는 “게이트웨이 패턴"을 구현하여 클라이언트와 다수의 백엔드 서비스 사이에서 중개자 역할을 한다.

핵심 구성 요소

KrakenD의 아키텍처는 다음과 같은 주요 구성 요소로 이루어져 있다:

요청 처리 흐름

KrakenD에서 API 요청이 처리되는 과정은 다음과 같다:

  1. 라우터: 클라이언트 요청을 적절한 엔드포인트로 라우팅한다.
  2. 요청 파이프: 인증, 속도 제한 등 요청 관련 미들웨어가 실행된다.
  3. 백엔드 요청: 엔드포인트와 연결된 백엔드 서비스로 요청이 전달된다.
  4. 응답 집계: 여러 백엔드에서 응답을 수집하고 필요시 병합한다.
  5. 응답 조작: 필터링, 변환 등을 통해 응답 데이터를 가공한다.
  6. 응답 파이프: 압축, CORS 등 응답 관련 미들웨어가 실행된다.
  7. 클라이언트 응답: 최종 응답이 클라이언트에게 전송된다.
1
클라이언트 → [라우터] → [요청 파이프] → [N개 백엔드 호출] → [응답 집계 및 조작] → [응답 파이프] → 클라이언트

무상태 설계의 이점

KrakenD의 무상태 설계는 다음과 같은 이점을 제공한다:

KrakenD의 핵심 기능

API 통합 및 집계

KrakenD의 가장 강력한 기능 중 하나는 여러 백엔드 API를 단일 엔드포인트로 통합하는 능력이다:

데이터 조작 및 필터링

KrakenD는 백엔드 응답 데이터를 다양한 방식으로 조작할 수 있다:

보안 기능

KrakenD는 API 보안을 위한 다양한 기능을 제공한다:

속도 제한 및 트래픽 관리

KrakenD는 API 사용량을 제어하기 위한 다양한 기능을 제공한다:

캐싱

KrakenD는 응답 캐싱을 통해 성능을 최적화할 수 있다:

KrakenD 설치 및 구성

설치 방법

KrakenD는 다양한 방식으로 설치할 수 있다:

Docker를 이용한 설치:

1
docker run -p 8080:8080 -v $PWD:/etc/krakend/ devopsfaith/krakend run --config /etc/krakend/krakend.json

바이너리 설치:

1
2
3
4
5
# 최신 버전 다운로드 (Linux 64bit 예시)
wget https://repo.krakend.io/bin/krakend_latest_amd64.tar.gz
tar -zxf krakend_latest_amd64.tar.gz
cd krakend/
./krakend run -c krakend.json

Kubernetes Helm 차트:

1
2
helm repo add krakend https://charts.krakend.io/
helm install krakend krakend/krakend

구성 파일 작성

KrakenD의 구성은 JSON 또는 YAML 파일을 통해 이루어진다.

기본 구성 파일은 다음과 같은 구조를 가진다:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
  "version": 3,
  "timeout": "3000ms",
  "cache_ttl": "300s",
  "output_encoding": "json",
  "name": "My API Gateway",
  "port": 8080,
  "endpoints": [
    {
      "endpoint": "/api/v1/users",
      "method": "GET",
      "output_encoding": "json",
      "concurrent_calls": 1,
      "backend": [
        {
          "url_pattern": "/users",
          "encoding": "json",
          "sd": "static",
          "method": "GET",
          "host": ["http://user-service:8000"],
          "disable_host_sanitize": false
        }
      ]
    }
  ],
  "extra_config": {
    "telemetry/logging": {
      "level": "DEBUG",
      "prefix": "[KRAKEND]",
      "syslog": false,
      "stdout": true
    }
  }
}

환경별 구성 관리

KrakenD는 동일한 구성 파일을 여러 환경에서 재사용할 수 있는 방법을 제공한다:

KrakenD 고급 기능

미들웨어 및 플러그인

KrakenD는 기능을 확장하기 위한 다양한 미들웨어와 플러그인을 지원한다:

서비스 디스커버리

KrakenD는 다양한 서비스 디스커버리 메커니즘을 지원한다:

모니터링 및 로깅

KrakenD는 모니터링을 위한 다양한 도구를 제공한다:

클라우드 네이티브 배포

KrakenD는 클라우드 네이티브 환경에 적합한 다양한 기능을 제공한다:

실제 사용 사례 및 모범 사례

마이크로서비스 통합

사례 연구: 전자 상거래 플랫폼

구성 예시:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
  "endpoints": [
    {
      "endpoint": "/products/{id}",
      "backend": [
        {
          "url_pattern": "/products/{id}",
          "host": ["http://product-service:8000"]
        },
        {
          "url_pattern": "/prices/{id}",
          "host": ["http://price-service:8000"],
          "group": "price"
        },
        {
          "url_pattern": "/inventory/{id}",
          "host": ["http://inventory-service:8000"],
          "group": "inventory"
        },
        {
          "url_pattern": "/reviews?product_id={id}",
          "host": ["http://review-service:8000"],
          "group": "reviews"
        }
      ]
    }
  ]
}

모바일 API 최적화

사례 연구: 모바일 애플리케이션

구성 예시:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "endpoints": [
    {
      "endpoint": "/mobile/feed",
      "output_encoding": "json",
      "backend": [
        {
          "url_pattern": "/feed",
          "host": ["http://content-service"],
          "whitelist": ["id", "title", "summary", "thumbnail_url"],
          "blacklist": ["created_at", "updated_at", "metadata"],
          "extra_config": {
            "modifier/martian": {
              "header.Modifier": {
                "scope": ["request", "response"],
                "name": "Content-Type",
                "value": "application/json"
              }
            }
          }
        }
      ],
      "extra_config": {
        "manipulation/jmespath": {
          "content": "{id: id, title: title, preview: summary[0:100], image: thumbnail_url}"
        }
      }
    }
  ]
}

레거시 시스템 통합

사례 연구: 금융 서비스 회사

구성 예시:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
  "endpoints": [
    {
      "endpoint": "/api/v1/accounts/{id}",
      "backend": [
        {
          "url_pattern": "/legacy/getAccount.php?acc_id={id}",
          "host": ["http://legacy-system"],
          "encoding": "xml",
          "extra_config": {
            "modifier/martian": {
              "body.Modifier": {
                "scope": ["request"],
                "contentType": "application/x-www-form-urlencoded",
                "body": "format=xml&version=1.0"
              }
            }
          }
        }
      ],
      "extra_config": {
        "modifier/cel": {
          "account_number": "response.body.account.number",
          "balance": "parseFloat(response.body.account.balance)",
          "account_name": "response.body.account.name",
          "last_transaction": "response.body.account.last_transaction"
        }
      }
    }
  ]
}

최적화 모범 사례

KrakenD 성능을 최적화하기 위한 권장 사항:

KrakenD 운영 및 유지 관리

  1. 모니터링 전략
    효과적인 KrakenD 모니터링을 위한 핵심 지표와 전략:
    핵심 성능 지표:

    • 요청 볼륨: 초당 요청 수
    • 지연 시간: 응답 시간 분포
    • 오류율: 상태 코드별 오류 비율
    • 캐시 효율성: 캐시 적중률
    • 리소스 사용량: CPU, 메모리, 네트워크 사용량
      Prometheus 통합 예시:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    {
      "extra_config": {
        "telemetry/metrics": {
          "collection_time": "30s",
          "listen_address": ":8090",
          "prometheus_endpoint": "/metrics"
        }
      }
    }
    

    대시보드 구성:

    • 상태 개요: 모든 엔드포인트 상태
    • 백엔드 성능: 각 백엔드 서비스 응답 시간 및 오류율
    • 리소스 사용: CPU, 메모리, 네트워크 사용량
    • 알림: 주요 임계값 초과 시 알림
  2. 로깅 및 문제 해결
    KrakenD 문제 해결을 위한 로깅 전략:
    구조화된 로깅 설정: JSON 형식의 로그를 사용하여 분석을 용이하게 한다.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    {
      "extra_config": {
        "telemetry/logging": {
          "level": "INFO",
          "prefix": "[KRAKEND]",
          "syslog": false,
          "stdout": true,
          "format": "json"
        }
      }
    }
    

    디버깅 모드: 문제 해결 시 디버그 로깅을 활성화한다.

    1
    
    krakend run -d -c krakend.json
    

    로그 집계: ELK 스택(Elasticsearch, Logstash, Kibana) 또는 유사한 도구를 사용하여 로그를 집계하고 분석한다.
    일반적인 문제 해결 방법:

    • 백엔드 연결 문제: 네트워크, 방화벽, 인증서 확인
    • 구성 오류: 구성 파일 유효성 검증
    • 메모리 문제: 리소스 한계 및 메모리 누수 확인
    • 성능 저하: 병목 현상 식별 및 최적화

배포 전략

KrakenD를 안전하게 배포하기 위한 전략:


용어 정리

용어설명

참고 및 출처