NGINX 활용 가이드: 웹서버부터 API Gateway까지

NGINX는 웹 서버, 리버스 프록시, 로드 밸런서, 캐싱 서버, API 게이트웨이 등 다양한 역할을 수행할 수 있는 강력한 오픈소스 솔루션입니다. 특히 각 기능 구현을 위해 별개의 NGINX 서버로 구성이 필요한 것이 아닌, 하나의 NGINX 서버를 통해서 위 기능을 모두 사용할 수 있습니다.
이 포스트에서는 각 시나리오별로 NGINX 활용 방법을 살펴보겠습니다.

목차

1. NGINX 활용 – Web Server
2. NGINX 활용 – Reverse Proxy
3. NGINX 활용 – Load Balancer
4. NGINX 활용 – Caching Server
5. NGINX 활용 – API Gateway
6. 결론

1. NGINX 활용 – Web Server

NGINX는 빠르고 효율적인 정적 웹 서버를 목표로 만들어졌습니다. 다중 연결 처리 성능이 뛰어나고, 메모리 사용률이 낮으며, 파일 시스템에서 직접 정적 파일을 제공하는 데 최적화되어 있습니다.

사용 시나리오
  • 고성능 정적 파일 제공이 필요한 경우: HTML, CSS, JavaScript, 이미지 등
  • 대량의 동시 연결 처리가 필요한 경우: C10K 문제(동시 접속자 10,000명 처리) 해결
  • 메모리 사용량을 최소화해야 하는 환경: 제한된 리소스에서도 효율적 운영
주요 특징
  • Gzip 압축, HTTP/2 지원으로 페이지 로딩 속도 개선
  • Event-driven 아키텍처로 적은 자원으로 높은 성능 제공
  • 비동기 처리 방식으로 수천 개의 연결을 동시에 효율적으로 처리
  • sendfile(), TCP_NODELAY, TCP_CORK 등 최적화 기법 기본 내장
구성 예시
server {
    listen 80;
    server_name www.example.com;

    root /var/www/html;
    index index.html index.htm;

    # 정적 파일 캐싱 최적화
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
        access_log off;
    }

    # Gzip 압축 활성화
    gzip on;
    gzip_types text/plain text/css application/javascript application/json;
    gzip_min_length 1000;
}

2. NGINX 활용 – Reverse Proxy

Reverse Proxy는 외부 요청을 내부 서비스로 중계하며, 보안, 확장성, 중앙 집중 관리를 제공합니다. NGINX는 가장 널리 쓰이는 리버스 프록시 중 하나로, TLS termination, 요청 헤더 변경, 응답 캐싱까지 가능합니다.

사용 시나리오
  • 내부 애플리케이션 서버 보호가 필요한 경우: 직접 노출 방지
  • 여러 백엔드 서비스를 단일 진입점으로 통합해야 하는 경우
  • TLS/SSL Termination을 중앙화하고 싶은 경우
  • 레거시 애플리케이션의 보안 강화가 필요한 경우
주요 특징
  • 내부 서버 아키텍처를 외부에 숨겨 보안 강화
  • 백엔드 서버 변경 시 클라이언트 영향 최소화
  • 요청/응답 헤더 수정 및 필터링 가능
  • WebSocket 등 특수 프로토콜 지원
예시 구성
server {
    listen 443 ssl http2;
    server_name api.example.com;

    # SSL 설정
    ssl_certificate     /etc/ssl/certs/cert.pem;
    ssl_certificate_key /etc/ssl/private/key.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;

    # 백엔드 애플리케이션 서버로 프록시
    location / {
        proxy_pass http://internal-app:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # 타임아웃 설정
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
    }
    
}

3. NGINX 활용 – Load Balancer

NGINX는 L7 로드 밸런서로도 훌륭한 역할을 수행합니다. 라운드로빈 알고리즘을 기본적으로 사용하며, 접속자 IP, 최소 연결 수 등을 기반으로 트래픽을 분산시킬 수 있습니다.

사용 시나리오
  • 서비스의 수평적 확장이 필요한 경우: 여러 서버에 트래픽 분산
  • 서버 장애에 대비한 고가용성 구성이 필요한 경우
  • 서버 리소스를 효율적으로 활용해야 하는 경우
주요 특징
  • 다양한 로드 밸런싱 알고리즘 지원
    • Round Robin: 순차적으로 요청 분배 (기본)
    • Least Connections: 연결이 적은 서버에 우선 분배
    • IP Hash: 클라이언트 IP 기반 일관된 분배 (세션 유지)
  • 액티브(NGINX Plus 전용)/패시브 헬스 체크로 장애 서버 자동 감지
  • 가중치(weight) 설정으로 서버별 부하 조절 가능
예시 구성
# 백엔드 서버 그룹 정의
upstream backend_servers {
    # 최소 연결 알고리즘 사용
    least_conn;
    
    # 서버 목록과 가중치, 실패 조건 정의
    server app1.internal:8080 weight=3 max_fails=3 fail_timeout=30s;
    server app2.internal:8080 weight=2;
    server backup.internal:8080 backup;  # 백업 서버
    
    # 연결 유지 시간 설정
    keepalive 32;
}

server {
    listen 80;
    server_name app.example.com;
    
    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Connection "";  # HTTP/1.1 연결 재사용
        proxy_http_version 1.1;
        
        # 헬스 체크 실패 시 다음 서버로 재시도
        proxy_next_upstream error timeout http_500;
    }
}

4. NGINX 활용 – Caching Server

동일한 콘텐츠를 여러 번 전달하는 경우, 캐시 기능을 통해 응답 속도 향상과 백엔드 서버의 부하 감소 효과를 누릴 수 있습니다. NGINX는 강력한 프록시 캐시 기능을 제공합니다.

사용 시나리오
  • 자주 요청되는 동일한 콘텐츠가 많은 경우
  • 데이터베이스나 API 서버의 부하를 줄여야 하는 경우
  • 사용자 응답 시간을 개선해야 하는 경우
주요 특징
  • 메모리와 디스크 기반 캐싱 옵션 제공
  • 세밀한 캐시 제어 가능 (TTL, 캐시 키, 조건부 캐싱)
  • 스태일(stale) 콘텐츠 활용으로 백엔드 장애 시에도 서비스 유지
  • 캐시 퍼지(purge) 기능으로 콘텐츠 갱신 관리(NGINX Plus 전용)
예시 구성
# 캐시 저장소 정의
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=content_cache:10m inactive=60m max_size=1g;

server {
    listen 80;
    server_name cache.example.com;
    
    # API 응답 캐싱
    location /api/ {
        proxy_pass http://backend-api;
        proxy_cache content_cache;
        
        # 상태 코드별 캐시 유효 시간
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404     1m;
        
        # 캐시 키 설정 (URL + 쿼리 파라미터)
        proxy_cache_key $scheme$host$request_uri;
        
        # 백엔드 서버 접속 불가 시 캐시된 응답 사용
        proxy_cache_use_stale error timeout updating;
        
        # 캐시 상태 헤더 추가
        add_header X-Cache-Status $upstream_cache_status;
        
        # 동일 URL 동시 요청 시 하나만 처리
        proxy_cache_lock on;
    }
    
    # 정적 파일 캐싱
    location /static/ {
        proxy_pass http://static-server;
        proxy_cache content_cache;
        proxy_cache_valid 200 30d;
        proxy_ignore_headers Cache-Control;
        proxy_cache_min_uses 2;  # 최소 2번 요청되어야 캐싱
    }
}

5. NGINX 활용 – API Gateway

최근 마이크로서비스 환경에서는 서비스 간 API 호출이 증가하며, 인증, 라우팅, 로깅, 속도 제한 등 다양한 기능을 처리하는 API Gateway가 필수 요소가 되었습니다. NGINX 는 이러한 기능을 활용 하여 API Gateway로 사용할 수 있습니다.

사용 시나리오
  • 여러 마이크로서비스 API를 단일 진입점으로 통합해야 하는 경우
  • API 인증과 접근 제어가 필요한 경우
  • 요청 속도 제한(Rate Limiting)이 필요한 경우
  • API 모니터링과 로깅을 중앙화하고 싶은 경우
장점
  • URI 기반 라우팅으로 다양한 백엔드 서비스 연결
  • JWT 검증(NGINX Plus 전용), API 키 인증 등 보안 기능 구현 가능
  • IP, 사용자, 서비스별 요청 제한 설정
  • 요청/응답 변환 및 재정의
  • 상세한 API 액세스 로깅과 모니터링
예시 구성
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;

server {
    listen 443 ssl;
    server_name api.example.com;

    ssl_certificate     /etc/ssl/certs/cert.pem;
    ssl_certificate_key /etc/ssl/private/key.pem;

    location /v1/users/ {
        limit_req zone=api_limit burst=10 nodelay;
        proxy_pass http://user-service;
    }

    location /v1/products/ {
        proxy_pass http://product-service;
    }

}

6. 결론

활용 유형주요 목적이상적인 활용 시나리오
Web Server정적 콘텐츠 서빙SPA 호스팅, 이미지/HTML 페이지, CDN Edge
Reverse Proxy트래픽 중계 및 보호API Gateway, 백엔드 노출 방지, TLS termination
Load Balancer트래픽 분산다중 서버 확장, 가용성 확보
Caching Proxy응답 캐싱외부 API 응답 캐싱, 이미지/파일 서버 최적화
API Gateway인증, 속도 제한, 라우팅마이크로서비스 API 중계, 보안 필터링, 로깅 등

NGINX는 하나의 서버로 위와 같은 다양한 기능을 수행할 수 있기 때문에, 현재 환경에서 어떤 기능이 필요한지 먼저 정의한 후 해당 목적에 맞는 기능을 활성화하는 것이 가장 중요합니다.

NGINX의 상업용 구독 버전을 체험해 보고 싶으시다면 NGINX STORE를 통해 문의해 무료로 NGINX One trial을 체험해 보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required