마이크로서비스 아키텍처, 그리고 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 서버로 프록시하는 구조
'Nginx' 카테고리의 다른 글
[NGINX]Nginx에서 로드밸런서 사용하기 Feat. HTTPS (0) | 2025.04.19 |
---|---|
[Nginx] Lua로 JWT 인증 처리하기 – API Gateway에 인증 붙이기 feat. Lua 와 JWT로 사용자 정보 받아오기 (0) | 2025.04.19 |
[Nginx] 환경변수 설정하고 사용하는 방법 docker- .env , Lua , 템플릿 렌더링(envsubst) (0) | 2025.04.19 |
[NGINX] Nginx의 기본 변수 받아오기와 활용법 (0) | 2025.04.19 |
[Nginx] Nginx 실행하기 (0) | 2025.04.19 |