티스토리 뷰
마이크로서비스 아키텍처(MSA) 를 운영하며 API 관리할 때, Kong Gateway 는 확장성과 성능을 겸비한 API 게이트웨이로, 인증, 라우팅, 모니터링을 손쉽게 처리할 수 있습니다. 이 글에서는 Kong Gateway 의 주요 특징과 설정 방법을 간단히 소개합니다.
주요 특징
- API 라우팅 및 관리: 다양한 서비스로의 요청 라우팅, 로드 밸런싱, 인증/인가 등 API 관리를 통합적으로 제공합니다.
- 확장성과 플러그인 시스템: 플러그인을 통해 인증(JWT, OAuth2), 요청 제한, 로깅 등 기능을 쉽게 확장할 수 있습니다.
- 다양한 배포 옵션: Kubernetes, Docker, VM 등 다양한 환경에 배포 가능하며, MSA와 클라우드 네이티브 아키텍처에 최적화되어 있습니다.
설치 방법
Docker 와 Docker Compose 가 설치되어 있어야 합니다.
1. Kong 이미지 다운로드
docker pull kong:latest
- cmd 또는 터미널을 열고 Kong 이미지를 다운로드합니다.
2. docker-compose 작성
1. 인증요청 :
- 방식 : Rest
- URL : /auth/login
- ip/port : 127.0.0.1/31000
2. 사용자조회 :
- 방식 : GraphQL
- URL : /api/query
- ip/port : 127.0.0.1/32000
3. 알림전송 :
- 방식 : Rest
- URL : /noti/send
- ip/port : 127.0.0.1/33000
- 위와 같이 3개의 백엔드 서비스를 준비합니다.
- docker build 명령어를 통해 이미지를 준비합니다.
- docker build -t my-api-auth .
- docker build -t my-api-core .
- docker build -t my-api-noti .
project-root/
├── docker-compose.yml # 필수 Docker Compose 파일
└── postgres/ # PostgreSQL 데이터 저장소
└── data/ # 데이터 볼륨
- 위와 같이 폴더를 만들고 docker-compose.yml 파일을 작성합니다.
version: "3.8"
services:
kong-database:
image: postgres:13
container_name: kong-database
environment:
POSTGRES_USER: kong
POSTGRES_PASSWORD: kong
POSTGRES_DB: kong
volumes:
- ./postgres/data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- my-network
kong:
image: kong:latest
container_name: kong
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_PROXY_LISTEN: 0.0.0.0:8000
ports:
- "8000:8000" # Proxy API
- "8001:8001" # Admin API
depends_on:
- kong-database
networks:
- my-network
my-api-auth:
image: my-api-auth
container_name: my-api-auth-container
environment:
SPRING_PROFILES_ACTIVE: dev
ports:
- "31000:31000"
networks:
- my-network
my-api-core:
image: my-api-core
container_name: my-api-core-container
environment:
SPRING_PROFILES_ACTIVE: dev
ports:
- "32000:32000"
networks:
- my-network
my-api-noti:
image: my-api-noti
container_name: my-api-noti-container
environment:
SPRING_PROFILES_ACTIVE: dev
ports:
- "33000:33000"
networks:
- my-network
networks:
my-network:
driver: bridge
- 데이터베이스 설정 : PostgreSQL 컨테이너를 실행하여 Kong의 설정을 저장, 환경 변수로 DB 사용자, 비밀번호, 데이터베이스 이름 설정
- Kong 설정 : 데이터베이스 연결(KONG_DATABASE, KONG_PG_HOST), Admin API 활성화(KONG_ADMIN_LISTEN: 0.0.0.0:8001)
- 필수 포트 노출 : 8000: Proxy API (클라이언트 요청 처리), 8001: Admin API (Kong 관리)
3. 설치 및 실행
3.1. Docker Compose 실행
docker-compose up -d
- 프로젝트로 이동하여, Docker Compose 를 실행합니다.
3.2. Kong 초기화
docker-compose run --rm kong kong migrations bootstrap
- kong 초기화를 합니다.
3.3. 실행
- 이후 컨테이너를 각각 실행한 후, http://localhost:8001/ 을 접속하여 정상동작 하는지 확인합니다.
3.4. Kong 서비스 추가
curl -i -X POST http://localhost:8001/services --data name=auth-service --data url=http://my-api-auth-container:31000
curl -i -X POST http://localhost:8001/services --data name=core-service --data url=http://my-api-core-container:32000
curl -i -X POST http://localhost:8001/services --data name=noti-service --data url=http://my-api-noti-container:33000
- 서비스 등록 후, curl http://localhost:8001/services 로 서비스 확인 가능합니다.
3.5. Kong 라우트 추가
curl -i -X POST http://localhost:8001/services/auth-service/routes --data name=auth-route --data paths[]=/ --data headers.X-Service-Type=auth --data strip_path=false
curl -i -X POST http://localhost:8001/services/core-service/routes --data name=core-route --data paths[]=/ --data headers.X-Service-Type=core --data strip_path=false
curl -i -X POST http://localhost:8001/services/noti-service/routes --data name=noti-route --data paths[]=/ --data headers.X-Service-Type=noti --data strip_path=false
- Header "X-Service-Type" 값을 통해 라우팅 합니다.
3.6. 요청
헤더 : X-Service-Type: auth
URL : http://localhost:8000/auth/login
- 헤더값에 [auth/core/noti] 를 작성하고 URL 을 호출
감사합니다.
'도구 및 환경 > 아키텍처' 카테고리의 다른 글
[프로그래밍] 컴파일러 vs 인터프리터 차이점과 실행 방식 비교 (2) | 2025.02.18 |
---|
최근에 올라온 글
- Total
- Today
- Yesterday