Nginx 동작 원리 — 이벤트 기반 웹 서버 구조 이해

조회수 30

Nginx는 이벤트 기반(Event-driven) 비동기 웹 서버다.
기존의 프로세스/스레드 기반 서버와 달리 적은 리소스로 많은 요청을 처리하는 구조를 가진다.

이 구조 덕분에 Nginx는 높은 동시 접속 처리 능력을 가진다.
특히 정적 파일 제공, 리버스 프록시, 로드 밸런서로 많이 사용된다.

1. 전체 구조

flowchart TD A["Client"] B["Nginx Master Process"] C["Worker Process"] D["Event Loop"] E["Upstream (App Server)"] A --> B B --> C C --> D D --> E

Nginx는 Master Process와 Worker Process로 구성된다.
실제 요청 처리는 Worker가 담당한다.

2. Master Process 역할

Master Process는 설정 파일을 읽고 Worker를 관리한다.
요청을 직접 처리하지는 않는다.

  • 설정 파일 로드
  • Worker 생성 및 관리
  • Graceful reload 처리

설정 변경 시 nginx -s reload를 하면 Master가 새로운 Worker를 생성하고 기존 Worker를 종료한다.

3. Worker Process 구조

Worker Process는 실제 요청을 처리하는 핵심이다.
각 Worker는 하나의 이벤트 루프를 가지고 동작한다.

중요한 점은 Worker 하나가 여러 요청을 동시에 처리할 수 있다는 것이다.

4. 이벤트 기반 처리 방식

Nginx는 이벤트 기반 비동기 모델을 사용한다.
요청마다 스레드를 생성하지 않고, 이벤트 루프를 통해 처리한다.

flowchart LR A["요청 1"] B["요청 2"] C["요청 3"] D["Event Loop"] A --> D B --> D C --> D

이 구조에서는 I/O 대기 시간 동안 다른 요청을 처리할 수 있다.
즉 블로킹 없이 효율적으로 CPU를 사용한다.

5. 동기 vs 비동기 차이

전통적인 서버(Apache)는 요청마다 스레드를 할당한다.
요청이 많아지면 스레드 수가 증가하면서 메모리 사용량이 증가한다.

반면 Nginx는 이벤트 기반으로 동작한다.
적은 Worker로도 많은 요청을 처리할 수 있다.

  • Apache — Thread/Process 기반
  • Nginx — Event Loop 기반

6. 리버스 프록시 역할

Nginx는 단순 웹 서버를 넘어 리버스 프록시로 많이 사용된다.
클라이언트 요청을 받아 내부 서버로 전달한다.


location / {
    proxy_pass http://app_server;
}

이 구조를 사용하면 다음과 같은 장점이 있다.

  • 트래픽 분산
  • 보안 강화
  • SSL 처리 분리

7. 정적 파일 처리

Nginx는 정적 파일 처리에 매우 효율적이다.
파일을 메모리/커널 레벨에서 빠르게 전달한다.


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

이미지, CSS, JS는 Nginx가 처리하고,
동적 요청만 애플리케이션 서버로 전달하는 구조가 일반적이다.

8. Worker 설정과 성능

Nginx 성능은 Worker 설정에 영향을 받는다.


worker_processes auto;
worker_connections 1024;

worker_processes는 CPU 코어 수에 맞추는 것이 일반적이다.
worker_connections는 동시에 처리 가능한 연결 수를 의미한다.

최대 처리 가능 연결 수는 다음과 같이 계산할 수 있다.


worker_processes × worker_connections

9. 실무에서 중요한 포인트

  • 정적 파일은 Nginx에서 처리
  • 동적 요청은 App 서버로 전달
  • Worker 수는 CPU 코어 기준 설정
  • FD 제한(ulimit) 함께 조정

특히 FD 제한이 낮으면 worker_connections 설정이 의미 없어질 수 있다.
OS 레벨 설정까지 같이 봐야 한다.

한 줄 요약

Nginx는 이벤트 기반 비동기 구조로 적은 리소스로 많은 요청을 처리하는 웹 서버다. Worker Process와 Event Loop를 활용해 높은 동시성 처리 성능을 제공한다.

댓글 0

  • 첫 번째 댓글을 남겨보세요.