Kong Gateway 란?

Kong Gateway 는 현대의 마이크로서비스 아키텍처에서 API 관리를 쉽게 해주는 오픈소스 API Gateway 입니다. 이는 API 호출의 라우팅, 인증, 속도 제한, 로깅, 변환 등의 기능을 제공하여 API 관리를 단순화하고 성능을 최적화합니다.
해당 포스트에서는 Kong Gateway 의 주요 기능, 장점, 사용 사례 및 설치 방법에 대해 알아보겠습니다.

목차

1. Kong Gateway 소개
 1-1. Kong Gateway 란?
2. Kong Gateway 의 주요 기능
 2-1. 라우팅
 2-2. 인증 및 권한 부여
 2-3. Rate Limit
 2-4. Logging 및 Monitoring
 2-5. Load Balancing
3. Kong Gateway 의 장점
4. Kong Gateway 설치 및 설정
 4-1. Docker를 사용한 Kong Gateway 설치
 4-2. Kubernetes를 사용한 Kong Gateway 설치
 4-3. 클라우드 환경에서의 Kong Gateway 설치
 4-4. kong.conf 파일 설정
 4-5. Admin API를 통한 동적 설정
5. Kong Gateway 사용 사례
 5-1. 마이크로서비스 아키텍처에서의 활용
 5-2. API 보안 강화
 5-3. 성능 모니터링 및 최적화
6. 결론

1. Kong Gateway 소개

1-1. Kong Gateway란?

Kong Gateway는 Kong Inc.에서 개발한 오픈소스 API 관리 솔루션입니다. 이 게이트웨이는 현대의 마이크로서비스 아키텍처에서 API를 효과적으로 관리하고 최적화하는 데 중점을 둡니다. 기본적으로 Kong Gateway는 API 요청을 적절한 서비스로 라우팅하고, 보안 인증을 수행하며, 트래픽을 조절하고, 요청과 응답을 변환하는 등의 다양한 기능을 제공합니다.

Kong Gateway의 가장 큰 장점 중 하나는 높은 성능과 확장성입니다.
이는 수백만 건의 API 요청을 효율적으로 처리할 수 있는 능력을 갖추고 있어, 대규모 트래픽을 다루는 엔터프라이즈 환경에서도 유용하게 사용될 수 있습니다.
또한, 플러그인 시스템을 통해 필요에 따라 기능을 손쉽게 확장할 수 있어 유연한 API 관리를 가능하게 합니다.

Kong Gateway는 다양한 배포 환경을 지원합니다. 온프레미스 환경뿐만 아니라 클라우드 환경(예: AWS, GCP, Azure)에서도 쉽게 설치하고 사용할 수 있습니다.
이는 Cloud-Native 애플리케이션을 개발하는 팀에게 특히 유용하며, 마이크로서비스 간의 통신을 안전하고 효율적으로 관리할 수 있게 해줍니다.

결론적으로, Kong Gateway는 API 관리의 복잡성을 줄이고 성능을 최적화하는 데 필요한 모든 도구를 제공하는 강력한 솔루션입니다. 이를 통해 개발팀은 핵심 비즈니스 로직에 더욱 집중할 수 있으며, 안정적이고 효율적인 API 서비스를 제공할 수 있습니다.

2. Kong Gateway 의 주요 기능

2-1. 라우팅

Kong Gateway의 라우팅 기능은 API 요청을 적절한 서비스로 전달하는 역할을 합니다.
이는 클라이언트로부터 들어오는 다양한 요청을 특정 마이크로서비스로 정확히 전달하여, 분산된 서비스 간의 통신을 원활하게 만듭니다. Kong Gateway는 URL 경로, 요청 메서드, 헤더, 쿼리 매개변수 등을 기반으로 요청을 라우팅할 수 있어 매우 유연한 라우팅 정책을 수립할 수 있습니다.

예를 들어, /api/users 경로로 들어오는 모든 GET 요청을 user-service로 라우팅하고, /api/orders 경로로 들어오는 POST 요청을 order-service로 라우팅할 수 있습니다. 또한, 특정 헤더 값(예: X-Auth-Token)이 포함된 요청을 인증 서비스로 라우팅하거나, 특정 쿼리 매개변수(예: ?version=2)가 있는 요청을 새로운 버전의 서비스로 보낼 수도 있습니다.

{
"paths": ["/api/users"],
"methods": ["GET"],
"upstream_url": "http://user-service:8000"
}
{
"paths": ["/api/orders"],
"methods": ["POST"],
"upstream_url": "http://order-service:8000"
}

또한, Kong Gateway 는 로드 밸런싱을 통해 여러 서비스 인스턴스 간의 트래픽을 효율적으로 분산시킬 수 있습니다. 예를 들어, user-service가 여러 인스턴스로 구성되어 있을 때, Kong Gateway는 라운드 로빈 방식으로 트래픽을 분산시켜 각 인스턴스에 고르게 부하가 걸리도록 합니다. 이렇게 하면 서비스의 가용성이 높아지고 특정 인스턴스에 과도한 부하가 걸리는 것을 방지할 수 있습니다.

Kong Gateway의 라우팅 기능은 API 관리의 기본적인 요소로, 다양한 조건과 규칙을 설정하여 API 요청을 효율적으로 처리하고 분산된 서비스 간의 통신을 최적화하는 데 중요한 역할을 합니다.
이를 통해 API 서비스의 안정성과 성능을 크게 향상시킬 수 있습니다.

2-2. 인증 및 권한 부여

Kong Gateway의 인증 및 권한 부여 기능은 API 호출의 보안을 강화하는 중요한 역할을 합니다.
이 기능을 통해 클라이언트가 API에 접근하기 전에 인증 절차를 거치도록 하고, 적절한 권한을 가진 사용자만 특정 API에 접근할 수 있도록 제어합니다. Kong Gateway는 다양한 인증 방법을 지원하여 다양한 보안 요구 사항을 충족할 수 있습니다.

  • OAuth2: OAuth2는 Kong Gateway에서 널리 사용되는 인증 프로토콜 중 하나입니다. OAuth2를 사용하면 클라이언트 애플리케이션이 리소스 소유자의 자원에 접근하기 위해 액세스 토큰을 발급받을 수 있습니다.
    이 과정에서 리소스 소유자는 자신의 자격 증명을 클라이언트 애플리케이션과 공유하지 않고도 권한을 부여할 수 있습니다. Kong Gateway는 OAuth2 플러그인을 통해 클라이언트 인증, 토큰 발급 및 검증을 처리합니다.
  • JWT (JSON Web Token): JWT는 가볍고 독립적인 인증 토큰을 사용하여 API 요청을 검증하는 방식입니다. JWT 토큰은 클라이언트와 서버 간에 안전하게 정보를 전달하기 위해 사용되며, 클라이언트는 JWT 토큰을 헤더에 포함하여 API 요청을 보냅니다. Kong Gateway는 JWT 플러그인을 통해 이러한 토큰을 검증하고, 유효한 토큰을 가진 요청만을 처리합니다.
    이는 서버의 상태를 유지하지 않기 때문에 확장성과 성능 측면에서 매우 유리합니다.
  • 기본 인증: 기본 인증은 가장 간단한 형태의 HTTP 인증 방식으로, 클라이언트는 사용자 이름과 비밀번호를 Base64 인코딩하여 서버에 전달합니다. Kong Gateway는 기본 인증 플러그인을 통해 이러한 자격 증명을 검증하고, 유효한 자격 증명을 가진 요청만을 허용합니다.
    이 방식은 간단하지만, 사용자 이름과 비밀번호가 노출될 위험이 있기 때문에 HTTPS와 함께 사용해야 합니다.

Kong Gateway의 인증 및 권한 부여 기능을 통해 다양한 보안 요구 사항을 충족할 수 있습니다. OAuth2, JWT, 기본 인증과 같은 다양한 방법을 지원함으로써, API 보안을 강화하고 적절한 사용자에게만 접근 권한을 부여할 수 있습니다.
이를 통해 API의 무단 접근을 방지하고, 보다 안전한 API 서비스를 제공할 수 있습니다.

2-3. Rate Limit

Kong Gateway의 Rate Limit 기능은 API 요청의 빈도를 제어하여 서비스의 안정성과 성능을 유지하는 데 중요한 역할을 합니다. Rate Limit을 통해 특정 시간 내에 허용되는 요청 수를 제한함으로써, 과도한 트래픽이 API 서버에 과부하를 주는 것을 방지할 수 있습니다.
이 기능은 API 남용을 방지하고, 자원을 공정하게 분배하며, 서비스의 품질을 유지하는 데 유용합니다.

Kong Gateway는 다양한 Rate Limit 전략을 지원합니다. 예를 들어, 특정 클라이언트가 일정 시간 동안 보낼 수 있는 최대 요청 수를 설정할 수 있습니다.
이 설정은 분당, 시간당, 일일 단위로 정의할 수 있으며, 클라이언트 IP, 사용자, API 키 등의 기준에 따라 세분화할 수 있습니다.

예를 들어, 분당 100개의 요청만 허용하도록 설정하면, 특정 클라이언트가 1분 동안 100개 이상의 요청을 보내려고 할 때 추가 요청은 자동으로 거부됩니다.
이러한 제한은 DoS(Denial of Service) 공격과 같은 악의적인 트래픽으로부터 API를 보호하는 데 효과적입니다.

2-4. Logging 및 Monitoring

Kong Gateway의 로깅 및 모니터링 기능은 API 호출에 대한 상세한 정보를 수집하고 분석하여, 서비스의 성능과 상태를 지속적으로 파악할 수 있게 해줍니다.
이 기능을 통해 개발자는 API의 사용 현황을 실시간으로 모니터링하고, 잠재적인 문제를 신속하게 감지하고 해결할 수 있습니다.

예를 들어, Prometheus를 사용하여 Kong Gateway의 메트릭을 수집하고, Grafana를 통해 대시보드를 구성하면, API의 성능을 한눈에 확인할 수 있습니다.
이를 통해 특정 시간대에 트래픽이 급증하는지, 특정 API 엔드포인트에서 에러가 발생하는지 등을 신속하게 파악할 수 있습니다.

로깅 및 모니터링 기능은 API 운영에 있어 매우 중요한 요소입니다. Kong Gateway는 이를 통해 개발자와 운영팀이 API의 상태를 지속적으로 파악하고, 성능을 최적화하며, 문제가 발생했을 때 신속하게 대응할 수 있도록 지원합니다. 결과적으로, 안정적이고 고성능의 API 서비스를 제공하는 데 큰 도움이 됩니다.

2-5. Load Balancing

Kong Gateway의 로드 밸런싱 기능은 여러 서비스 인스턴스 간에 트래픽을 효율적으로 분산시켜 서비스의 가용성과 성능을 유지하는 데 중요한 역할을 합니다.
로드 밸런싱을 통해 특정 인스턴스에 과부하가 걸리는 것을 방지하고, 모든 인스턴스에 고르게 트래픽을 분배함으로써 시스템의 안정성을 높일 수 있습니다.

Kong Gateway는 다양한 로드 밸런싱 전략을 지원합니다.
대표적인 전략으로는 라운드 로빈(Round Robin), 최소 연결(Least Connections), 해시 기반(Hash-based) 로드 밸런싱 등이 있습니다.

  • 라운드 로빈: 요청을 순차적으로 각 인스턴스에 분배하는 방식입니다. 이 방식은 가장 간단하며, 모든 인스턴스가 균등하게 트래픽을 처리하도록 보장합니다.
  • 최소 연결: 현재 연결 수가 가장 적은 인스턴스에 요청을 보내는 방식입니다. 이 방식은 인스턴스 간의 부하를 동적으로 분배하여, 특정 인스턴스에 과도한 트래픽이 몰리는 것을 방지합니다.
  • 해시 기반: 특정 요청 속성(예: 클라이언트 IP, 요청 경로 등)을 기반으로 해시 값을 계산하여 인스턴스를 선택하는 방식입니다. 이 방식은 같은 클라이언트가 항상 같은 인스턴스로 라우팅되도록 하여, 세션 지속성(Session Persistence)을 보장할 수 있습니다.

3. Kong Gateway 의 장점

Kong Gateway는 API 관리 및 마이크로서비스 아키텍처에서 강력한 솔루션을 제공하며, 여러 가지 장점을 가지고 있습니다.
이러한 장점은 Kong Gateway를 많은 개발자와 기업이 선택하는 주요 이유입니다.

  • 확장성: Kong Gateway는 높은 확장성을 자랑합니다. 플러그인 시스템을 통해 기본 기능을 확장할 수 있으며, 사용자 정의 플러그인을 작성하여 고유한 요구 사항을 충족할 수 있습니다.
  • 성능: Kong Gateway는 고성능을 제공하여 대규모 트래픽을 효율적으로 처리할 수 있습니다. 이는 NGINX 기반의 강력한 프록시 엔진을 사용하기 때문입니다.
  • 유연성: Kong Gateway는 다양한 배포 환경에서 유연하게 사용할 수 있습니다. 온프레미스, 클라우드(예: AWS, GCP, Azure), 하이브리드 환경 등 어디에서나 쉽게 배포할 수 있습니다. Docker, Kubernetes와 같은 컨테이너 오케스트레이션 도구와의 통합도 원활하여, 현대적인 클라우드 네이티브 애플리케이션 환경에 적합합니다. 또한, RESTful Admin API를 통해 관리와 설정이 매우 편리합니다.

4. Kong Gateway 설치 및 설정

4-1. Docker를 사용한 Kong Gateway 설치

Kong Gateway를 설치하는 가장 간단한 방법 중 하나는 Docker를 사용하는 것입니다. Docker를 통해 Kong Gateway를 설치하면, 몇 가지 명령어만으로 빠르게 실행 환경을 구축할 수 있습니다.
기본적으로 다음 명령어를 사용하여 Kong Gateway를 Docker 컨테이너로 실행할 수 있습니다.

docker run -d --name kong \
  -e "KONG_DATABASE=off" \
  -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
  -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
  -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
  -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
  -p 8000:8000 \
  -p 8443:8443 \
  -p 8001:8001 \
  -p 8444:8444 \
  kong

이 명령어는 Kong Gateway를 독립 실행형 모드로 실행하며, 필요한 포트를 노출하고 로그를 설정합니다.

4-2. Kubernetes를 사용한 Kong Gateway 설치

Kong Gateway는 Kubernetes 환경에서도 쉽게 배포할 수 있습니다. Kubernetes는 컨테이너 오케스트레이션을 제공하여, Kong Gateway의 확장성과 관리성을 향상시킵니다. Helm 차트를 사용하면 간단하게 Kong Gateway를 Kubernetes 클러스터에 배포할 수 있습니다.

helm repo add kong https://charts.konghq.com
helm repo update
helm install kong/kong --generate-name --set ingressController.installCRDs=false

이 명령어는 Helm을 사용하여 Kong Gateway를 설치하고, Kubernetes 클러스터 내에서 실행되도록 설정합니다.

4-3. 클라우드 환경에서의 Kong Gateway 설치

Kong Gateway는 AWS, GCP, Azure 등 다양한 클라우드 환경에서도 설치할 수 있습니다.
각 클라우드 제공업체는 Kong Gateway를 쉽게 배포할 수 있는 템플릿과 도구를 제공합니다.
예를 들어, AWS에서는 AWS Marketplace를 통해 Kong Gateway를 쉽게 배포할 수 있습니다.
또한, Terraform과 같은 IaC(Infrastructure as Code) 도구를 사용하여 자동화된 배포를 설정할 수도 있습니다.

4-4. kong.conf 파일 설정

Kong Gateway의 동작을 제어하는 주요 설정은 kong.conf 파일을 통해 이루어집니다. 이 파일에서는 데이터베이스 연결 정보, 네트워크 설정, 로그 설정 등 다양한 옵션을 구성할 수 있습니다. 예를 들어, 데이터베이스 연결 설정을 다음과 같이 할 수 있습니다.

database = postgres
pg_host = 127.0.0.1
pg_port = 5432
pg_user = kong
pg_password = kong
pg_database = kong

이 외에도 플러그인 설정, 클러스터 설정 등 다양한 옵션을 kong.conf 파일에서 관리할 수 있습니다.

4-5. Admin API를 통한 동적 설정

Kong Gateway는 Admin API를 통해 동적으로 설정을 변경할 수 있습니다. Admin API는 RESTful API로, HTTP 요청을 통해 Kong의 설정을 관리하고, 플러그인을 추가하거나 제거하며, 서비스와 라우트를 설정할 수 있습니다. 예를 들어, 새로운 servicesroutes를 추가하려면 다음과 같은 요청을 보낼 수 있습니다.

curl -i -X POST http://localhost:8001/services/ \
  --data "name=example-service" \
  --data "url=http://example.com"

curl -i -X POST http://localhost:8001/services/example-service/routes \
  --data "paths[]=/example"

이러한 Admin API를 사용하면 Kong Gateway의 설정을 프로그래밍 방식으로 관리하고 자동화할 수 있어, 운영 효율성을 크게 향상시킬 수 있습니다.

Kong Gateway의 설치 및 설정 방법은 다양한 환경에 맞춰 제공되므로, 사용자는 자신의 환경에 가장 적합한 방법을 선택하여 쉽게 Kong Gateway를 설치하고 구성할 수 있습니다.
이를 통해 안정적이고 효율적인 API 관리가 가능합니다.

5. Kong Gateway 사용 사례

5-1. 마이크로서비스 아키텍처에서의 활용

Kong Gateway는 마이크로서비스 아키텍처에서 매우 유용하게 활용될 수 있습니다. 마이크로서비스 아키텍처에서는 여러 개의 독립적인 서비스들이 서로 통신하며 하나의 애플리케이션을 구성합니다.
Kong Gateway는 이러한 서비스 간의 API 호출을 중앙에서 관리하고 조정함으로써, 각 서비스가 서로 원활하게 통신할 수 있도록 도와줍니다.

예를 들어, 다양한 서비스에 대한 요청을 적절한 서비스로 라우팅하고, 로드 밸런싱을 통해 각 서비스 인스턴스에 고르게 트래픽을 분산시켜 시스템의 안정성을 높일 수 있습니다.
또한, 공통적인 보안 정책을 적용하고, 서비스 간의 인증 및 권한 부여를 중앙에서 관리함으로써 보안성을 강화할 수 있습니다.

5-2. API 보안 강화

Kong Gateway는 API 보안을 강화하는 데에도 중요한 역할을 합니다. 다양한 인증 및 권한 부여 방법을 지원하여, API에 접근하는 클라이언트의 신원을 확인하고 권한을 검증할 수 있습니다.
예를 들어, OAuth2를 통해 액세스 토큰을 발급하고 검증하거나, JWT를 사용하여 토큰 기반 인증을 구현할 수 있습니다. 또한, 기본 인증을 통해 간단한 사용자 이름과 비밀번호 검증을 수행할 수 있습니다.
이러한 보안 기능들은 API의 무단 접근을 방지하고, 민감한 데이터에 대한 보호를 강화합니다.
더불어, Kong Gateway는 속도 제한(rate limiting) 기능을 제공하여, 특정 시간 내에 허용되는 요청 수를 제한함으로써 DoS(Denial of Service) 공격을 예방할 수 있습니다.

5-3. 성능 모니터링 및 최적화

Kong Gateway는 성능 모니터링 및 최적화 기능을 통해 API의 효율적인 운영을 지원합니다.
Kong Gateway는 모든 API 요청과 응답에 대한 로그를 기록하고, 메트릭 데이터를 수집하여 API의 성능을 실시간으로 모니터링할 수 있습니다.
예를 들어, Prometheus와 Grafana 같은 도구와 통합하여 API 요청 수, 응답 시간, 에러율 등을 시각화하고 분석할 수 있습니다.
이를 통해 트래픽 패턴을 파악하고, 성능 병목 지점을 식별하며, 필요에 따라 리소스를 조정할 수 있습니다.
또한, 로드 밸런싱 기능을 통해 트래픽을 효율적으로 분산시켜, 특정 인스턴스에 과도한 부하가 걸리지 않도록 하고, 전체 시스템의 성능을 최적화할 수 있습니다.

6. 결론

Kong Gateway는 API 관리의 복잡성을 줄이고, 성능과 보안을 최적화하며, 다양한 환경에 유연하게 적응할 수 있는 강력한 솔루션입니다.
이를 통해 개발팀은 핵심 비즈니스 로직에 집중할 수 있으며, 기업은 안정적이고 효율적인 API 서비스를 제공할 수 있습니다.

Kong Gateway에 대한 다양한 정보를 확인하고 싶으신가요? NGINX STORE 블로그의 Kong 카테고리 항목을 참고하세요.

아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required