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를 앞단에 두는 구성이 일반적이다.
반응형
'Programming' 카테고리의 다른 글
| REST API 와 Stateless 개념 정리 (0) | 2026.06.23 |
|---|---|
| [vscode] Explorer에서 single click로 fileopen 하고 싶지 않을때 (double click 설정) (0) | 2021.11.25 |
| [docker] 사용법 (0) | 2020.05.26 |
| [SQL] join (0) | 2020.03.23 |
| [python] pythonic 한 코드 쓰기 (0) | 2020.02.26 |