Nginx
[NGINX] Upstream과 API Gateway의 핵심 개념과 연관관계
임혁진
2025. 4. 19. 06:58
마이크로서비스 아키텍처, 그리고 API Gateway
마이크로서비스(MSA) 구조에서는 각 기능이 독립된 서비스로 존재합니다.
그러다 보니 클라이언트는 수많은 API 경로를 알아야 하고,
인증, 로깅, 라우팅 같은 기능도 매번 구현해야 하죠.
그래서 등장한 것이 바로 API Gateway입니다.
모든 API 요청을 한 곳에서 받고,
라우팅, 인증, 속도제한, 로깅 등을 처리한 뒤
해당하는 서비스에 요청을 전달합니다.
🧩 Nginx를 API Gateway로?
Nginx는 고성능 웹 서버이자 Reverse Proxy 기능도 제공하기 때문에,
API Gateway 역할로도 매우 적합합니다.
🔗 리버스 프록시와 API Gateway의 연관관계
두 개의 공통점:
- 요청을 중계하고 라우팅하는 역할
- 보안, 로드 밸런싱 등의 기능 수행 가능
즉, API Gateway는 리버스 프록시+@의 형태 라고 볼 수 있습니다.
기능적으로 API Gateway는 리버스 프록시 위에 다양한 기능(인증, 로그, 속도제한 등)이 추가된 개념이기에 적합합니다.
기능별로 보면...
기능 | 설명 |
라우팅 | 요청 경로에 따라 서비스 분기 /product → Product Service |
로드밸런싱 | 여러 인스턴스로 분산 처리 |
캐싱 | 응답 캐시로 응답속도 향상 |
인증 (Lua) | JWT 또는 세션 인증 구현 가능 |
SSL 처리 | HTTPS 처리, Let's Encrypt 자동화 |
🔁 Nginx의 Upstream 이란?
upstream은 Nginx 설정에서 백엔드 서버 그룹을 정의하는 블록입니다.
upstream product_service {
server product1.internal:8080;
server product2.internal:8080;
}
이제 이 그룹에 요청을 보내도록 설정하면 됩니다.
location /product/ {
proxy_pass http://product_service;
}
이렇게 하면, 클라이언트가 /product/ 요청을 보낼 때
→ product_service 그룹에 정의된 서버 중 하나로 라우팅됩니다.
예시: MSA 기반 쇼핑몰 구조
[Client]
↓
[Nginx (API Gateway)]
├── /product → Product Service
├── /order → Order Service
└── /auth → Auth Service
Nginx 설정 예시
upstream product_service {
server product1:8080;
server product2:8080;
}
upstream order_service {
server order1:8081;
server order2:8081;
}
server {
listen 80;
location /product/ {
proxy_pass http://product_service;
}
location /order/ {
proxy_pass http://order_service;
}
}
Nginx + API Gateway의 장점
- ✅ 단일 진입점으로 API 보안과 통제가 쉬움
- ✅ 백엔드 서버의 IP나 경로를 클라이언트가 몰라도 됨
- ✅ 라우팅/인증/캐싱 등 통합 관리
- ✅ MSA 구조에서 요청을 안전하고 효율적으로 분배할 수 있습니다.
- => 마이크로서비스의 유지보수가 쉬워짐
Upstream과 API Gateway의 관계
개념 | 설명 |
Upstream | Nginx의 설정에서, 여러 백엔드 서버(Spring Boot, Node.js 등)에 트래픽을 전달하기 위해 사용하는 로직 그룹입니다. 일종의 라우팅 대상 리스트 |
API Gateway | 클라이언트의 모든 요청 진입점으로, 인증, 로깅, 라우팅, 속도 제한, 캐싱 등 다양한 API 관련 기능을 수행하는 서비스입니다. |
연결되는 포인트
Nginx를 API Gateway로 사용할 때
→ Upstream을 통해 백엔드 마이크로서비스(API) 로 요청을 분산하고 전달합니다.
즉, Nginx API Gateway = API 요청을 받고 → Upstream 서버로 프록시하는 구조