[Nginx] 현대 웹의 관문 Nginx란?

he2mang·2026년 1월 29일

nginx

목록 보기
1/1
post-thumbnail

최근 프로젝트에서 Nginx를 통해 포트 제한 문제를 해결하고 HTTPS 환경을 구축했습니다. 설치했다에서 끝나는 것이 아닌 '왜 Nginx가 현대 인프라의 표준이 되었는지' 공식 문서와 실무 관점에서 정리했습니다.


1. Nginx는 왜 특별한가? (vs Apache)

전통적인 웹 서버인 Apache가 요청당 하나의 프로세스/스레드를 사용하는 Process-driven 방식이라면 Nginx는 Event-driven(비동기 이벤트 루프) 구조를 채택하고 있습니다.

비교 항목Process-driven (Apache 방식)Event-driven (Nginx 방식)
핵심 비유손님마다 전담 웨이터가 1명씩 붙음웨이터 1명이 여러 테이블을 돌며 주문만 받음
자원 사용요청 수에 비례하여 급증요청이 많아도 낮고 일정하게 유지
동시 접속수천 명 이상 시 서버 부하 급증수만 명 이상의 동시 접속도 거뜬히 처리
주요 용도복잡한 비즈니스 로직 처리대규모 트래픽 처리, 리버스 프록시

Nginx가 Apache보다 빠른 이유는 Context Switching의 늪에 빠지지 않기 때문!

  • Context Switching이란, CPU가 한 프로세스(또는 스레드)에서 다른 프로세스로 실행을 넘길 때 현재까지의 작업 상태(Context)를 저장하고 다음 작업의 상태를 불러오는 과정

  • Context(문맥/상태): 프로그램이 어디까지 실행되었는지(프로그램 카운터), 어떤 값을 계산 중이었는지(레지스터 상태) 등의 정보

  • 교환 과정: A 작업을 멈추고 현재 상태를 메모리에 기록 → B 작업의 이전 상태를 메모리에서 불러옴 → B 작업 실행.

2. Nginx의 4대 핵심 기능

① 리버스 프록시 (Reverse Proxy) & 보안

클라이언트와 백엔드 서버(Docker 컨테이너) 사이의 중개자입니다.

  • 보안 강화: 백엔드 서버의 실제 IP와 포트(예: 8080, 3000)를 외부에 노출하지 않습니다. 외부에서는 오직 Nginx의 80/443 포트만 보입니다.
  • 버퍼링: Nginx가 클라이언트의 요청을 끝까지 다 받은 후 백엔드에 전달하므로 느린 네트워크 환경의 클라이언트로부터 백엔드 서버를 보호합니다.

프로젝트 실제 활용 사례 보기

② 로드 밸런싱 (Load Balancing)

여러 대의 서버에 트래픽을 분산합니다.

  • Round Robin: 순차적으로 분산
  • Least Connections: 연결이 가장 적은 서버로 전달
  • IP Hash: 특정 사용자(IP)를 특정 서버에 고정 (세션 유지가 필요할 때 사용)

③ 정적 파일 서빙 (Static Content Serving)

이미지, HTML, JS 파일 같은 정적 자원을 어플리케이션(Spring/Node.js) 단까지 보내지 않고 Nginx가 메모리 캐시를 활용해 즉시 응답합니다. 이는 전체 시스템의 응답 속도를 비약적으로 향상시킵니다.

④ SSL/TLS 종단점 (SSL Termination)

HTTPS 암호화 해제 작업을 Nginx가 전담합니다. 백엔드 서버는 복잡한 암호화 계산을 할 필요 없이 비즈니스 로직에만 집중할 수 있게 됩니다.

프로젝트 실제 활용 사례 보기

3. 실전 설정 파헤치기 (Configuration)

Nginx 설정 (/etc/nginx/sites-available/default)은 context 구조로 이루어져 있습니다. 이번 프로젝트에서 사용한 location 블록의 의미는 다음과 같습니다.

server {
    listen 80;
    server_name [도메인IP];

    # 프론트엔드: "/" 경로로 들어오면 nnnn번 컨테이너로!
    location / {
        proxy_pass http://127.0.0.1:nnnn;
        proxy_set_header Host $host; # 원본 호스트 정보 유지
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 실제 클라이언트 IP 전달
    }

    # 백엔드: "/api/" 경로로 시작하면 xxxx번 컨테이너로!
    location /api/ {
        proxy_pass http://127.0.0.1:xxxx;
    }
}

4. 인프라 담당자가 주의해야 할 점

  1. 502 Bad Gateway: Nginx는 살아있지만, 뒤에 연결된 Docker 컨테이너가 죽었거나 포트가 다를 때 발생합니다. docker ps로 상태를 확인합니다.
  2. 권한 설정: Nginx 워커 프로세스는 보통 www-data 계정으로 실행됩니다. 정적 파일을 서빙할 때 해당 폴더에 접근 권한이 있는지 확인해야 합니다.
  3. 방화벽(UFW): 외부 포트(80, 443)는 열고, 내부 포트(8080, 3000 등)는 닫아서 보안을 유지하는 것이 핵심입니다.

🔗 참고 문헌 및 출처

0개의 댓글