ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

NGINX

도입

단순한 웹 서버가 아니라, 웹 서버·리버스 프록시·로드 밸런서·캐시를 하나의 실행 계층으로 묶어 고성능 트래픽 처리를 가능하게 하는 데 있다

많은 개발자가 NGINX를 “정적 파일 잘 주는 서버” 정도로 먼저 기억합니다. 하지만 실제로는 훨씬 더 넓은 역할을 수행합니다.

NGINX는 웹 서버로서 정적 콘텐츠를 제공할 수 있고, 리버스 프록시로서 뒤쪽 애플리케이션 서버에 요청을 전달할 수 있으며, 로드 밸런서로서 여러 업스트림 서버에 트래픽을 분산할 수 있고, 캐시 계층으로서 응답 재사용도 지원합니다. 그래서 NGINX를 이해한다는 것은 단순 설치법을 아는 것이 아니라, 서비스 앞단에서 요청을 어떻게 받아서 어디로 보내고 어떻게 보호할 것인가를 이해하는 일에 가깝습니다.

필요성

NGINX를 이해하면 단순히 웹 서버 하나를 다루는 수준을 넘어서, 정적 처리와 동적 처리 분리, 트래픽 분산, 캐시, TLS 종료, 오리진 보호 같은 운영 문제를 하나의 계층에서 조정할 수 있다

서비스가 커질수록 애플리케이션 서버 하나만으로 모든 요청을 직접 처리하기는 비효율적입니다. 정적 파일은 더 가볍게 주고 싶고, HTTPS 암복호화는 앞단에서 끝내고 싶고, 여러 백엔드 서버에 트래픽을 나누고 싶고, 동일한 응답은 캐시해서 원본 부하를 줄이고 싶어집니다.

NGINX는 이런 요구를 앞단에서 해결하는 대표 도구입니다. 그래서 NGINX를 잘 쓰면 애플리케이션 서버는 비즈니스 로직에 더 집중할 수 있고, 서비스 운영은 더 예측 가능해집니다.

NGINX가 특히 강한 영역
  • 정적 파일 제공
  • 리버스 프록시와 업스트림 연결
  • HTTP/TCP/UDP 계열 로드 밸런싱
  • 콘텐츠 캐시
  • TLS 종료와 앞단 보안 제어

정의

NGINX는 웹 서비스 제공, 리버스 프록시, 캐싱, 로드 밸런싱 등을 수행하는 오픈소스 소프트웨어이며, 앞단 트래픽 계층에서 매우 넓은 역할을 맡을 수 있다

NGINX 공식 문서는 NGINX를 웹 서빙, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등에 쓰이는 오픈소스 소프트웨어로 설명합니다. 또한 HTTP뿐 아니라 메일 프록시, HTTP/TCP/UDP 서버의 리버스 프록시 및 로드 밸런서 역할도 수행할 수 있다고 설명합니다.

즉, NGINX는 한 문장으로 “웹 서버”라고만 부르기에는 범위가 넓고, “트래픽을 받아서 적절한 뒤쪽 처리 계층으로 연결하는 실행 계층”이라고 보는 편이 더 실전적입니다.

핵심 문장
NGINX는 “웹 서버”이면서 동시에 “리버스 프록시”, “로드 밸런서”, “캐시 계층” 역할을 함께 수행할 수 있는 앞단 트래픽 플랫폼입니다.

핵심 원리

NGINX의 구조적 강점은 master process가 설정과 worker를 관리하고, worker process가 event-based 방식으로 실제 요청을 처리해 많은 연결을 효율적으로 분산하는 데 있다

NGINX는 하나의 master process와 여러 worker process로 동작합니다. master는 설정을 읽고 평가하고 worker를 유지하며, worker가 실제 요청 처리와 연결 관리를 맡습니다.

공식 문서는 NGINX가 event-based model과 OS-dependent mechanism을 이용해 요청을 효율적으로 worker들에 분산한다고 설명합니다. 이 구조 덕분에 NGINX는 많은 연결을 다루는 앞단 계층에서 매우 널리 쓰입니다.

기본 구조

NGINX를 실무에서 제대로 이해하려면 nginx.conf의 컨텍스트 구조와, 리스너·서버 블록·location·upstream이 각각 어떤 책임을 가지는지 나눠 봐야 한다
구성 요소 역할 실무 포인트
main 전역 수준 설정 events, http 같은 최상위 컨텍스트를 품음
events 연결 처리 관련 설정 동시 연결 처리 특성과 맞닿음
http HTTP 서버 동작의 상위 컨텍스트 server, upstream, 캐시, 공통 HTTP 설정이 여기에 놓임
server 가상 서버 단위 설정 listen, server_name, TLS, location 분기의 중심
location URI 기반 요청 처리 규칙 정적 파일 제공, proxy_pass, FastCGI 연결 등 실제 요청 분기점
upstream 뒤쪽 백엔드 서버 그룹 정의 로드 밸런싱과 장애 회피의 핵심 단위
events {
    worker_connections 1024;
}

http {
    upstream backend {
        server app1.example.com;
        server app2.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

공식 가이드는 `events`, `http`, `server`, `location`을 대표적인 context 예시로 설명합니다. 또한 `events`와 `http`는 main context에 있고, `server`는 `http` 안에, `location`은 `server` 안에 놓인다고 설명합니다.

기본 구현

NGINX를 가장 빨리 이해하는 방법은 정적 파일 제공과 프록시 전달을 한 설정 파일 안에서 같이 보는 것이다
http {
    server {
        listen 80;
        server_name example.com;

        location /static/ {
            root /srv/www;
        }

        location / {
            proxy_pass http://127.0.0.1:8080;
        }
    }
}

이 예시는 의미가 분명합니다. `/static/` 아래 요청은 로컬 파일 시스템에서 직접 제공하고, 나머지 요청은 애플리케이션 서버로 넘깁니다. 즉, NGINX는 앞단에서 정적 처리와 동적 프록시를 분리하는 데 매우 적합합니다.

패턴 1. 웹 서버와 리버스 프록시

NGINX의 가장 대표적인 활용은 정적 파일은 직접 서빙하고, 나머지 요청은 뒤쪽 애플리케이션 서버로 프록시하는 구조다

공식 Beginner’s Guide도 먼저 정적 파일 제공을 설명하고, 이어서 프록시 서버 구성을 설명합니다. 프록시 서버란 요청을 받고 proxied server에 전달한 뒤 응답을 다시 클라이언트에 보내는 서버를 뜻합니다.

NGINX Reverse Proxy 가이드는 요청을 다양한 프로토콜의 proxied server로 전달하고, 업스트림에 전달할 요청 헤더를 수정하고, 응답 버퍼링을 설정할 수 있다고 설명합니다. 즉, NGINX는 단순 전달자가 아니라 앞단 트래픽 조정 계층입니다.

server {
    listen 80;

    location / {
        proxy_pass http://localhost:8080;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }
}

위 구조처럼 정적 이미지는 직접 응답하고, 나머지는 애플리케이션 서버로 보내는 패턴은 NGINX가 앞단에 놓일 때 가장 전형적입니다.

패턴 2. 업스트림과 로드 밸런싱

로드 밸런싱 관점에서 NGINX의 핵심은 upstream 그룹을 정의하고, 적절한 분산 알고리즘으로 여러 백엔드에 요청을 나누는 데 있다

공식 HTTP Load Balancing 문서는 먼저 `upstream` 블록으로 서버 그룹을 정의하고, 그 그룹을 `proxy_pass`로 참조하는 구조를 설명합니다. 이 업스트림 그룹이 곧 로드 밸런싱 대상입니다.

NGINX Open Source는 기본적으로 Round Robin, Least Connections, IP Hash, Generic Hash 네 가지 방법을 지원합니다. NGINX Plus는 여기에 Least Time과 Random을 더 지원합니다. 또한 서버 weight를 줄 수 있고, 특정 서버를 backup이나 down으로 둘 수도 있습니다.

방식 설명 언제 유용한가
Round Robin 기본 방식, 요청을 순서대로 분산 서버 성격이 비슷할 때
Least Connections 현재 연결 수가 가장 적은 서버 우선 연결 지속 시간이 들쭉날쭉할 때
IP Hash 클라이언트 IP 기반으로 같은 서버에 붙이기 쉬움 세션 성격의 일관성이 중요할 때
Generic Hash 지정한 키 기준으로 해시 분산 더 세밀한 라우팅 기준이 필요할 때

또한 문서는 세션 persistence, server slow-start 같은 기능도 설명합니다. 다만 slow-start와 고급 sticky 방식은 NGINX Plus 기능이고, Open Source에서는 `hash`나 `ip_hash` 같은 방식으로 유사한 요구를 일부 해결하는 쪽에 가깝습니다.

패턴 3. 캐시와 TLS 종료

NGINX가 앞단에서 특히 강한 이유는 단순 프록시를 넘어서 캐시 계층과 TLS 종료 지점을 함께 맡아 업스트림 서버 부담을 크게 줄일 수 있기 때문이다

캐시가 켜지면 NGINX는 응답을 디스크 캐시에 저장하고, 같은 콘텐츠에 대해 매번 업스트림까지 프록시하지 않고도 클라이언트에 응답할 수 있습니다. 오래된 캐시를 지우기 위한 purge도 지원하며, 필요하면 특정 요청 조건에서 캐시를 우회하도록 설정할 수도 있습니다.

TLS 종료도 매우 대표적인 활용입니다. 공식 SSL Termination 문서는 `listen ... ssl`과 인증서/개인키 설정을 통해 HTTPS 서버를 구성하고, 이렇게 하면 업스트림 웹/애플리케이션 서버가 직접 감당하던 SSL/TLS 암복호화 부담을 줄일 수 있다고 설명합니다.

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate     /etc/ssl/example.crt;
    ssl_certificate_key /etc/ssl/example.key;

    location / {
        proxy_pass http://backend;
    }
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m use_temp_path=off;

server {
    location / {
        proxy_cache mycache;
        proxy_pass http://backend;
    }
}
실전 포인트
정적 파일 제공, reverse proxy, load balancing, cache, TLS termination을 한 앞단 계층에서 묶을 수 있다는 점이 NGINX의 가장 큰 운영상 장점입니다.

NGINX Open Source 와 NGINX Plus

실무에서 NGINX를 말할 때는 오픈소스 기능과 플러스 전용 기능을 구분해서 이해하는 편이 훨씬 정확하다
구분 NGINX Open Source NGINX Plus
기본 역할 웹 서버, 리버스 프록시, 캐시, 로드 밸런싱 오픈소스 기능 + 엔터프라이즈용 확장 기능
로드 밸런싱 Round Robin, Least Connections, IP Hash, Generic Hash Least Time, Random, 고급 session persistence, slow-start 등 추가
운영 관점 가볍고 널리 쓰이며 기본 기능이 매우 강력함 엔터프라이즈 운영과 고급 기능 수요에 적합

NGINX 공식 문서는 Open Source 위에 NGINX Plus가 엔터프라이즈 요구를 다루기 위한 프리미엄 기능을 더한다고 설명합니다. 따라서 문서를 읽을 때 기능이 기본 제공인지, Plus 전용인지 구분해 보는 습관이 중요합니다.

한계와 주의점

NGINX는 매우 강력하지만, 이 앞단 계층 하나만으로 애플리케이션 병목, 데이터베이스 병목, 세션 일관성 문제까지 모두 해결되지는 않는다

NGINX를 앞단에 둔다고 해서 백엔드의 구조적 병목이 사라지는 것은 아닙니다. 예를 들어 정적 자산 전달은 좋아져도, 뒤쪽 DB가 느리면 전체 응답 시간은 여전히 느릴 수 있습니다.

또한 NGINX가 세션 affinity나 캐시를 도와줄 수는 있지만, 애플리케이션이 강하게 상태 저장형이면 결국 세션 저장소와 데이터 일관성 문제를 별도로 풀어야 합니다. 즉, NGINX는 강력한 앞단 계층이지만 만능 해결기는 아닙니다.

특히 주의해야 할 지점
  • NGINX 도입만으로 애플리케이션 병목이 해결된다고 생각하지 않기
  • 캐시 정책 없이 그냥 proxy_cache만 켜지 않기
  • 상태 저장 앱에서 세션 전략을 같이 설계하기
  • Open Source와 Plus 기능 차이를 문서 없이 감으로 추정하지 않기

자주 하는 실수

NGINX를 배울 때 가장 흔한 오해는 웹 서버 하나로만 보거나, reverse proxy와 load balancer와 cache를 각각 다른 제품 역할처럼 분리해서 생각하는 데서 나온다
  • NGINX = 정적 파일 서버라고만 생각함
  • upstream 개념을 백엔드 서버 그룹으로 이해하지 못함
  • Open Source와 Plus 기능 차이를 구분하지 않음
  • 설정 컨텍스트(main / http / server / location) 계층을 헷갈림
  • reload가 무조건 강제 종료 후 재시작이라고 오해함
  • 캐시와 TLS 종료를 붙였는데 오리진과 세션 구조를 안 바꿈

실무 루틴

NGINX를 설계할 때는 모듈이나 제품 이름부터 외우기보다, 정적 처리·동적 프록시·TLS·캐시·업스트림 분산 중 무엇을 맡길지 먼저 정하는 순서가 맞다
  1. 먼저 정적 파일을 직접 줄지, 전부 프록시할지 정한다.
  2. 동적 요청은 어떤 업스트림 그룹으로 보낼지 설계한다.
  3. TLS를 NGINX에서 종료할지 백엔드까지 넘길지 정한다.
  4. 캐시를 붙일 대상과 TTL/무효화 전략을 같이 잡는다.
  5. 세션 지속성이나 해시 기반 분산이 필요한지 판단한다.
  6. Open Source로 충분한지, Plus 기능이 필요한지 확인한다.
  7. 마지막으로 설정 파일 계층과 운영 명령을 정리한다.

디버깅

NGINX 문제를 디버깅할 때는 “서버가 안 된다”라고 뭉뚱그리지 말고, 설정 문법, listener, location 매칭, upstream 연결, TLS, 캐시 중 어느 층에서 끊기는지부터 나눠야 한다
1
먼저 설정 문법이 맞는지 확인한다.
2
요청이 어떤 server 블록과 location 블록에 매칭되는지 본다.
3
프록시라면 업스트림 서버가 실제로 살아 있는지와 연결 가능한지 확인한다.
4
HTTPS라면 인증서, 키, SNI, listen 설정을 함께 본다.
5
캐시가 있다면 hit/miss와 purge 상태를 같이 점검한다.
# 문법 확인
nginx -t

# 설정 reload
nginx -s reload

# graceful shutdown
nginx -s quit

공식 Beginner’s Guide에 따르면 `nginx -s reload` 시 master process는 새 설정 문법을 먼저 검사하고, 성공하면 새 worker를 띄운 뒤 기존 worker에게 종료를 요청합니다. 기존 worker는 새 연결 수락을 멈추고, 진행 중인 요청을 마친 뒤 종료합니다. 실패하면 master는 기존 설정으로 계속 동작합니다.

요약

NGINX의 본질은 고성능 event-driven 구조를 바탕으로 정적 파일 제공, 리버스 프록시, 업스트림 로드 밸런싱, 캐시, TLS 종료를 앞단에서 묶어 처리하는 데 있으며, 실무에서는 설정 계층과 upstream 구조와 캐시/TLS 전략을 함께 이해해야 제대로 사용할 수 있다
  • ✅ NGINX는 웹 서버, 리버스 프록시, 캐시, 로드 밸런서 역할을 함께 수행할 수 있다.
  • ✅ master/worker 기반의 event-driven 구조가 핵심이다.
  • ✅ 설정은 main, events, http, server, location 같은 계층 컨텍스트로 이해하는 편이 좋다.
  • ✅ `proxy_pass`와 `upstream`이 리버스 프록시와 로드 밸런싱의 중심이다.
  • ✅ 캐시와 TLS 종료를 앞단에 두면 업스트림 부담을 줄일 수 있다.
  • ✅ Open Source와 Plus는 기능 범위가 다르므로 구분해서 봐야 한다.
  • ✅ `nginx -s reload`는 문법 검증 후 새 worker로 점진 전환하는 방식이다.
  • ✅ 좋은 NGINX 운영의 핵심은 설정 문법보다 역할 분리와 트래픽 설계다.
728x90