Maas 개발을 위해 이것저것 알아봐 달라는 말씀을 하셔서 찾다가 발견한 Kong 🦍
Kong이란?
마이크로서비스 아키텍처(MSA)가 표준이 되면서 시스템이 여러 개의 서버로 나눠졌고, 모든 서버가 인증이나 로깅 같은 공통 로직을 중복해서 처리해야 하는 문제가 발생했습니다. Kong은 이러한 문제를 해결하기 위해 모든 트래픽의 대문 역할을 해주는 API Gateway 솔루션 중 하나입니다.
결과적으로 Kong은 클라이언트와 백엔드 서비스 사이에 위치하여, 비즈니스 로직과 공통 관심사(인증, 인가, 로깅 등)를 완벽하게 분리하고 백엔드 서버의 부담을 획기적으로 줄여줍니다.
Kong의 장점
- 검증된 압도적 성능 (NGINX 기반): Kong은 고성능 웹 서버인 NGINX를 기반으로 동작합니다. 대규모 트래픽이 몰려도 아주 빠르고 안정적으로 요청을 라우팅합니다.
- 가볍고 빠른 확장성 (Lua 스크립트): C++이나 Java처럼 무거운 언어가 아닌, 가볍고 빠른 Lua 스크립트를 사용하여 커스텀 로직을 실행합니다. 시스템 리소스 소모가 매우 적습니다.
- 강력한 플러그인 생태계 (가장 큰 장점): 개발자가 인증(JWT, OAuth), 트래픽 제어(Rate Limiting), 보안(CORS), 모니터링 연동을 바닥부터 개발할 필요가 없습니다. 설정 파일 몇 줄만으로 수많은 공식 플러그인을 레고 블록처럼 조립해서 바로 사용할 수 있습니다.
MaaS 프로젝트에서의 Kong 실무 적용 예시
API 인증 (Key-Auth)
가장 빠르고 단순한 Config 기반 하드코딩 방식의 설정 예시입니다.
[Kong Key-Auth 플러그인 설정]
# 1. 서비스 및 라우팅 설정
services:
- name: ai-model-service
url: http://fastapi-server:8000
routes:
- name: chat-route
paths: ["/v1/chat"]
# 2. Key-Auth 플러그인 활성화
plugins:
- name: key-auth
config:
key_names: ["x-api-key"]
hide_credentials: true # 보안을 위해 백엔드 전달 시 키 숨김
# 3. 인증받은 사용자(Consumer) 등록
consumers:
- username: yulim_dev
keyauth_credentials:
- key: "my-secret-api-key-777"
트래픽 제어 (Rate Limiting)
특정 모델 서버에 요청이 몰려 서버가 다운되는 것을 방지하기 위해 초당 호출 횟수를 제한합니다.
[KongPlugin 리소스 예시 (K8s)]
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
name: rate-limit-5
plugin: rate-limiting
config:
second: 5
policy: local
솔루션 상세 비교: Kong vs Istio vs Envoy Gateway
| 비교 항목 | Kong Gateway (Nginx 기반) | Istio & Envoy (Service Mesh) | Envoy Gateway (Standard) |
| 핵심 구조 | 중앙 집중형 게이트웨이 배치 | 파드마다 Envoy 배치 (Sidecar) | 컨트롤러 기반 Envoy 자동 생성 |
| 최대 장점 | 빠른 기능 개발, 쉬운 유지 보수 | 세밀한 보안 및 서비스 간 통제 | K&s 표준(Gateway API) 준수 |
| 설정 편의성 | 매우 높음 (어노테이션 방식) | 낮음 (복잡한 전용 CRD 학습 필요) | 중간 (신규 표준 학습 필요) |
| 자원 소모 | 매우 적음 | 높음 (Sidecar 오버헤드 존재) | 중간 |
| 추천 상황 | 외부 API 공개 및 관리 중심 | 복잡한 내부 MSA 보안 통제 | 표준 기반 차세대 구축 |
'CODING STUDY > NETWORK' 카테고리의 다른 글
| [NETWORK] SOAP vs REST 통신 방식 정리 (0) | 2026.03.31 |
|---|---|
| [NETWORK] Spring Integration 기본 개념과 메시지 처리 흐름 (0) | 2025.12.26 |
| [프로토콜] MQTT 송신 흐름 (InFlow) (0) | 2025.12.25 |
| [프로토콜] MQTT 송신 흐름 (OutFlow) (0) | 2025.12.23 |
| [프로토콜] MQTT에 대한 개념과 이해 (0) | 2025.12.22 |