본문 바로가기
Nginx

[NGINX] Upstream과 API Gateway의 핵심 개념과 연관관계

by 임혁진 2025. 4. 19.

마이크로서비스 아키텍처, 그리고 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 서버로 프록시하는 구조