Microservice Architecture에서는 여러 개의 독립적인 Service가 실행됩니다.
예:
User Service
Order Service
Payment Service
Product Service
Notification Service
하지만 사용자가 각각의 Service에 직접 접근하면 관리가 어려워집니다.
기존 구조:
사용자
↓
User Service
사용자
↓
Order Service
사용자
↓
Payment Service
문제:
- 여러 Endpoint 관리 필요
- 인증 처리 중복
- 보안 관리 어려움
- Traffic 제어 복잡
이 문제를 해결하기 위해 사용하는 것이 API Gateway입니다.
기본 구조:
사용자
↓
API Gateway
↓
----------------
User Service
Order Service
Payment Service
----------------
API Gateway는 모든 외부 요청의 단일 진입점 역할을 합니다.
이번 글에서는 Docker Compose 기반 API Gateway 구조부터 Routing, 인증 처리, Rate Limit, Load Balancer 연동, Production 운영 구조까지 알아보겠습니다.
API Gateway란 무엇인가?
API Gateway는 Client와 Backend Service 사이에서 요청을 관리하는 중간 계층입니다.
기존 구조:
Client
↓
각각의 Service
API Gateway 적용:
Client
↓
API Gateway
↓
Backend Services
역할:
- 요청 Routing
- 인증
- 권한 관리
- Rate Limit
- Logging
- Monitoring
Microservice에서 API Gateway가 필요한 이유
Service가 증가하면 Endpoint가 많아집니다.
예:
/user/login
/order/create
/payment/pay
/product/list
문제:
사용자가 모든 주소를 알아야 함
API Gateway:
/api/user
/api/order
/api/payment
하나의 Gateway에서 관리합니다.
Docker Compose API Gateway 구조
기본 구조:
User
↓
Nginx / Kong / Traefik
↓
------------------
User Service
Order Service
Payment Service
------------------
Docker Compose에서는 Gateway Container를 별도로 구성합니다.
Docker Compose API Gateway Service 구성
예:
services:
gateway:
image: nginx:latest
ports:
- "80:80"
user-service:
image: user-api
order-service:
image: order-api
구조:
External Request
↓
Gateway
↓
Internal Service
Docker Compose Routing 구성
API Gateway는 URL 기준으로 요청을 전달합니다.
예:
요청:
/api/users
Routing:
/api/users
↓
User Service
요청:
/api/orders
Routing:
/api/orders
↓
Order Service
Nginx API Gateway 설정
nginx.conf:
server {
listen 80;
location /users {
proxy_pass http://user-service:3000;
}
location /orders {
proxy_pass http://order-service:3000;
}
}
동작:
Client
↓
Nginx
↓
해당 Service
Docker Compose API Gateway와 Service Discovery
Gateway는 Service 위치를 직접 관리하면 안 됩니다.
잘못된 방식:
192.168.1.10:3000
문제:
- Container 변경
- IP 변경
- Scaling 어려움
권장:
user-service:3000
Docker Network DNS가 자동 연결합니다.
Docker Compose API Gateway 인증 처리
인증을 각 Service에서 처리하면 중복 코드가 증가합니다.
기존:
User Service
↓
인증 코드
Order Service
↓
인증 코드
Gateway 적용:
Client
↓
API Gateway 인증
↓
Backend Service
장점:
- 중앙 인증 관리
- 보안 강화
- 개발 단순화
JWT 인증 구조
일반적인 방식:
사용자 로그인
↓
JWT Token 발급
↓
API Gateway 검증
↓
Service 전달
구조:
Client
↓
Token
↓
Gateway
↓
Service
Docker Compose API Gateway Rate Limit
API Gateway는 요청 제한 기능을 제공합니다.
문제:
악성 요청 증가
↓
Service 과부하
Rate Limit:
사용자 요청 제한
↓
서비스 보호
예:
IP당 초당 100 요청 제한
Docker Compose API Gateway Load Balancer 연결
Gateway 앞에 Load Balancer를 구성할 수 있습니다.
구조:
User
↓
Load Balancer
↓
API Gateway
↓
Microservice
대규모 환경:
Cloud Load Balancer
↓
Gateway Cluster
Docker Compose API Gateway와 Canary 배포
Gateway는 Traffic 제어에도 활용됩니다.
예:
/api/order
↓
Version 1 90%
Version 2 10%
구조:
Client
↓
Gateway
↓
Old Service
New Service
Docker Compose API Gateway Logging
모든 요청이 Gateway를 통과하기 때문에 중앙 Log 수집이 가능합니다.
수집:
- 요청 URL
- 응답 코드
- Response Time
- Client 정보
구조:
Client
↓
Gateway Log
↓
Monitoring System
Docker Compose API Gateway 보안 구조
권장 구조:
Internet
↓
API Gateway
↓
Private Network
↓
Microservice
보안 효과:
- 내부 Service 보호
- Port 노출 최소화
- 접근 제어
Docker Compose API Gateway 장애 대응
Gateway 장애는 전체 서비스에 영향을 줍니다.
따라서:
Gateway 1
Gateway 2
Gateway 3
Cluster 구성 필요
구조:
User
↓
Gateway Cluster
↓
Service
Docker Compose API Gateway 운영 구조
Production:
User
↓
CDN
↓
Load Balancer
↓
API Gateway Cluster
↓
Microservice
↓
Database
↓
Monitoring
API Gateway 종류
대표적인 Gateway:
Nginx:
- 가벼움
- Reverse Proxy
Kong:
- Plugin 확장
- 인증 기능
Traefik:
- Container 환경 자동 Discovery
Envoy:
- Service Mesh 연동
Docker Compose API Gateway Best Practice
추천:
- Gateway 단일 진입점 구성
- HTTPS 적용
- 인증 중앙화
- Rate Limit 적용
- Logging 수집
- Monitoring 연결
- Gateway 이중화
최종 구조:
Client
↓
API Gateway
↓
Authentication
↓
Routing
↓
Microservice
↓
Database
자주 묻는 질문
API Gateway와 Load Balancer 차이는 무엇인가요?
Load Balancer는 Traffic 분산, API Gateway는 API 관리와 요청 처리가 주요 역할입니다.
모든 Microservice에 Gateway가 필요한가요?
서비스 규모가 커질수록 효과가 커집니다.
Docker Compose에서도 API Gateway를 사용할 수 있나요?
가능합니다.
Nginx, Traefik, Kong 등을 Container로 구성할 수 있습니다.
Gateway가 장애 나면 어떻게 하나요?
Gateway 자체도 여러 개 구성하여 High Availability 구조로 운영합니다.
마무리
Docker Compose API Gateway 구성은 Microservice 환경에서 외부 요청을 안전하고 효율적으로 관리하는 핵심 구조입니다.
최종 흐름:
사용자
↓
API Gateway
↓
Routing
↓
Microservice
↓
Database
↓
Monitoring
API Gateway를 적용하면 인증, 보안, Traffic 관리, Logging을 중앙에서 관리할 수 있어 대규모 서버 운영 구조로 확장하기 쉬워집니다.
다음 글에서는 서비스 상태를 전체적으로 관찰하고 관리하는 Docker Compose Observability 구축 방법을 알아보겠습니다.