Nginx란 무엇인가?
Nginx는 주로 정적 파일을 제공하는 웹 서버로 사용됩니다. 그러나 단순한 웹 서버의 역할을 넘어 Reverse Proxy Server로도 활용될 수 있습니다. 이를 통해 웹 애플리케이션 서버(WAS)의 부담을 줄여줄 뿐만 아니라 로드 밸런서로서 부하를 분산시키는 역할을 수행합니다.
Apache 웹 서버와의 차이점
요청 처리 방식의 차이
-
Apache
- 요청마다 새로운 쓰레드를 생성하여 처리합니다.
- 요청이 많아질수록 더 많은 자원이 소모되며, "C10K 문제"(만 개의 요청 처리 문제)가 발생할 수 있습니다.
-
Nginx
- 비동기 Event-Driven 모델을 사용하여 요청을 처리합니다.
- 고정된 개수의 프로세스만 생성하며, 각 프로세스가 병렬적으로 요청을 처리합니다.
- 주요 구성:
- Master Process: 설정 파일(
nginx.conf
)의 유효성을 검사하고 전체 워커 프로세스를 관리합니다.
- Worker Processes: 클라이언트 요청을 실제로 처리하는 프로세스입니다.
Nginx 설정 파일 예시
worker_processes 1;
http {
server {
location / {
root /path/to/html;
}
location /images/ {
root /path/to/image;
}
}
}
Event-Driven 아키텍처란?
정의
Event-Driven 아키텍처는 시스템의 중대한 상태 변화를 감지하고 처리하는 방식으로 동작합니다. 이는 주로 MSA(Microservices Architecture)가 적용된 분산 시스템에서 활용되며, 이벤트의 생산, 소비, 반응을 지원합니다.
Event의 의미
여기서 이벤트(Event)는 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건을 의미합니다.


Nginx의 Master Process와 Worker Process
Nginx의 Master Process와 Worker Process의 동작 방식을 학교와 선생님, 교실의 예로 쉽게 설명할 수 있습니다.
학교의 구조
- 선생님 (Master Process): 학교의 원장 역할로, 전체 운영을 관리합니다. 교실의 수를 조정하고, 수업 계획을 세우며, 학생들이 잘 학습할 수 있도록 돕습니다.
- 교실 (Worker Processes): 각 교실에서는 학생들이 수업을 듣고 과제를 수행합니다. 여러 교실이 동시에 운영되므로 많은 학생들이 동시에 학습할 수 있습니다.
처리 과정
-
Master Process의 역할
- 새로운 학생(요청)이 들어오면, 선생님은 학생을 교실에 배정합니다.
- 교실의 수를 최적화하여 학교 전체의 운영이 원활하도록 관리합니다.
-
Worker Process의 역할
- 교실에서는 학생들이 직접 수업을 듣고 과제를 수행합니다.
- Worker Process는 클라이언트 요청을 처리하며, 병렬적으로 작동하여 여러 요청을 동시에 처리할 수 있습니다.
동작 요약
- Master Process는 전체 시스템을 관리하며 Worker Process를 생성하거나 종료합니다.
- Worker Process는 실제로 클라이언트 요청을 처리합니다.
Nginx의 이벤트 기반 구조 이해하기
Nginx의 이벤트 기반 구조를 대중교통 시스템으로 설명할 수 있습니다.
대중교통 시스템 예시
- 버스 정류장: 사람들이 다양한 버스를 기다리는 장소입니다. 이는 여러 클라이언트 요청이 대기하는 상태를 의미합니다.
- 버스(Worker Processes): 버스는 승객을 태우고 목적지로 데려가는 역할을 합니다. Nginx의 Worker Process는 이와 같이 요청을 처리합니다.
- 운전사(Event Loop): 운전사는 승객의 요구를 실시간으로 감지하고 처리합니다. 이는 Nginx의 이벤트 루프와 유사합니다.
이벤트 기반 처리 방식
- 이벤트 감지: 클라이언트 요청이 들어오는 것을 이벤트로 감지합니다.
- 비동기 처리: 요청이 완료될 때까지 기다리지 않고, 다른 요청을 동시에 처리합니다.
- 자원 효율성: 적은 수의 Worker Process로도 많은 요청을 처리할 수 있습니다.
- 확장성: 사용자가 증가해도 시스템 성능을 유지할 수 있습니다.
사용자 요청 기반이 아닌 이벤트 기반인 이유
- 요청 기반 방식은 요청이 들어올 때마다 새로운 프로세스를 생성하지만, 이벤트 기반 방식은 이벤트를 감지하고 이를 효율적으로 처리합니다.
- 이벤트 루프를 활용해 자원을 효율적으로 사용하며, 많은 요청을 동시에 처리할 수 있습니다.
요약
Nginx는 비동기 Event-Driven 모델을 기반으로 동작하여 높은 성능과 효율성을 제공합니다. Master Process와 Worker Process 간의 분업 구조, 이벤트 기반 처리 방식은 적은 리소스로 많은 요청을 처리할 수 있도록 설계되었습니다. 이러한 구조 덕분에 Nginx는 많은 요청을 동시에 처리할 수 있는 강력한 웹 서버로 자리 잡았습니다.