본문 바로가기
Programming

nginx 개념 정리

by 단창 2026. 6. 19.

nginx 개념 정리

1. nginx란?

nginx(엔진엑스) 는 오픈소스 웹 서버(Web Server) 소프트웨어다.
정적 파일을 빠르게 내려주고, 클라이언트의 요청을 뒤쪽 서버로 전달(프록시)하는 역할을 한다.

  • 2004년에 등장 (당시 Apache의 동시접속 처리 한계를 개선하려는 목적)
  • 이벤트 기반(Event-driven), 비동기(Asynchronous) 구조 → 적은 자원으로 많은 동시접속 처리
  • 웹 서버 외에도 리버스 프록시 / 로드 밸런서 / 캐시 서버 / API 게이트웨이 로 두루 쓰인다

한 줄 요약: "요청을 가장 앞단에서 받아 정적 파일은 직접 주고, 동적 요청은 뒤(WAS)로 넘겨주는 입구 역할"


2. 왜 쓰는가? (nginx의 존재 이유)

2-1. 정적 콘텐츠를 빠르게 처리

HTML, CSS, JS, 이미지 같은 정적 파일은 굳이 애플리케이션 로직(WAS)을 거칠 필요가 없다.
nginx가 직접 파일을 읽어서 응답하면 훨씬 빠르고, 그만큼 WAS의 부담을 덜어준다.

2-2. 리버스 프록시 (Reverse Proxy)

클라이언트는 nginx하고만 통신하고, nginx가 내부의 실제 서버(WAS)로 요청을 중계한다.

  • 내부 서버의 IP/포트/구조를 외부에 숨김 → 보안 향상
  • 클라이언트는 서버가 1대인지 100대인지 알 필요 없음

2-3. 로드 밸런싱 (Load Balancing)

요청을 여러 WAS로 분산시켜 부하를 나눈다.

  • 트래픽이 몰려도 안정적 (Round Robin, Least Connection 등 분배 방식 지원)
  • 서버 1대가 죽어도 다른 서버로 요청 전달 → 무중단/고가용성

2-4. SSL/TLS 종료 (HTTPS 처리)

HTTPS 암호화/복호화 작업을 nginx가 대신 처리(SSL Termination).

  • 인증서 관리를 한 곳(nginx)에서 일괄 처리
  • WAS는 암호화 부담 없이 비즈니스 로직에만 집중

2-5. 캐싱 / 압축 / 보안

  • 자주 요청되는 응답을 캐시해서 WAS 호출 자체를 줄임
  • Gzip 압축으로 전송량 감소
  • 요청 속도 제한(Rate Limiting), 접근 제어 등 보안 게이트 역할

3. 백엔드 기본 구조에서 nginx의 위치

질문하신 "웹서버 + WAS + DB" 구조에서 nginx는 웹 서버(Web Server) 에 해당한다.

[클라이언트(브라우저)]
        │  HTTP(S) 요청
        ▼
┌──────────────────┐
│   웹 서버         │  ← ★ nginx 가 여기 ★
│   (nginx)         │     - 정적 파일 직접 응답
│                   │     - HTTPS 처리, 로드밸런싱
└──────────────────┘
        │  동적 요청만 전달 (리버스 프록시)
        ▼
┌──────────────────┐
│   WAS             │  ← Tomcat, Node.js, Spring,
│ (애플리케이션 서버)│     Django, FastAPI 등
│                   │     - 비즈니스 로직 처리
└──────────────────┘
        │  데이터 조회/저장
        ▼
┌──────────────────┐
│   DB              │  ← MySQL, PostgreSQL,
│ (데이터베이스)     │     Oracle 등
└──────────────────┘

각 계층의 역할 비교

계층 대표 소프트웨어 핵심 역할
웹 서버 nginx, Apache 정적 파일 응답, 요청 라우팅, 프록시, HTTPS, 로드밸런싱
WAS Tomcat, Node.js, Spring Boot, Django 동적 처리(로그인, 계산, DB 연동 등 비즈니스 로직)
DB MySQL, PostgreSQL, Oracle 데이터의 영구 저장 및 조회

핵심 구분

  • 웹 서버(nginx) = "정적인 것 + 문지기/교통정리"
  • WAS = "동적인 것 + 머리(로직)"
  • DB = "기억(데이터 저장소)"


4. nginx가 없으면 안 되는가? (없으면 왜 안 되는지)

결론부터 말하면 "없어도 동작은 하지만, 운영 환경에서는 사실상 필수" 다.

4-1. 기술적으로는 없어도 동작한다

WAS(Tomcat, Node.js 등)도 자체적으로 HTTP 요청을 받을 수 있다.
따라서 클라이언트 → WAS → DB 구조로 nginx 없이도 서비스가 돌아가긴 한다.
(개발/테스트 환경에서는 실제로 이렇게 많이 쓴다.)

4-2. 그런데 실서비스에서 nginx 없이 가면 생기는 문제들

문제 상황 nginx 없을 때 nginx 있을 때
정적 파일 처리 WAS가 이미지·JS까지 다 처리 → 자원 낭비, 느림 nginx가 직접 응답 → 빠르고 WAS 부담 ↓
동시접속 폭증 WAS가 직접 다 받으면 쉽게 과부하 앞단에서 분산/완충
서버 여러 대 운영 클라이언트가 어느 서버로 갈지 직접 알아야 함 로드밸런싱으로 자동 분배
HTTPS WAS마다 인증서 설정해야 함 nginx에서 한 번에 처리
보안 WAS 구조/포트가 외부에 그대로 노출 내부 구조 은닉, 게이트 역할
무중단 배포 WAS 재시작 시 서비스 중단 nginx가 트래픽을 살아있는 서버로 우회

4-3. 정리

  • 소규모/개발 환경 → nginx 없이도 충분히 가능
  • 실제 운영(트래픽·보안·확장성 필요) → nginx(또는 유사 웹서버) 거의 필수
  • 즉, nginx는 "기능상 반드시 필요한 부품"이라기보다 "성능·보안·확장성·안정성을 책임지는 앞단 인프라" 라서 쓰는 것이다.

5. 한눈에 요약

  • nginx = 웹 서버 (백엔드 3계층 중 맨 앞단)
  • 하는 일: 정적 파일 응답 + 리버스 프록시 + 로드밸런싱 + HTTPS + 캐싱/보안
  • WAS는 "로직", DB는 "데이터", nginx는 "입구이자 교통정리"
  • 없어도 돌아가지만, 실서비스에서는 성능·보안·확장성 때문에 사실상 필수

참고: Apache와의 차이 (보너스)

  • Apache: 요청마다 프로세스/스레드 생성 (프로세스 기반) → 동시접속 많아지면 무거움
  • nginx: 이벤트 기반 비동기 → 적은 자원으로 대량 동시접속 처리에 강함
  • 그래서 요즘은 정적 처리·프록시는 nginx, 복잡한 동적 모듈은 Apache 식으로 나눠 쓰거나, nginx를 앞단에 두는 구성이 일반적이다.
반응형