
Nginx
경량 웹 서버이다. 경량 의미 그대로 매우 가벼우며 적은 자원의 사용으로 최상의 퍼포먼스를 목표로 만들어졌다. 클라이언트의 요청으로부터 정적 리소스를 응답해 주는 웹 서버로 활용될 수 있으며 Reverse Proxy Server로 설정하여 WAS 서버의 부하를 분산하는 로드밸런서로 활용할 수 있다.
Web server
HTTP 프로토콜을 기반으로 작동하는 서버이다. WAS 서버의 부하가 몰릴 경우 WAS 서버 앞단에 웹 서버를 두어 정적 리소스는 웹 서버가 처리하고 서비스 로직과 같은 동적 작업은 WAS가 담당하여 WAS 서버의 부하를 줄일 수 있다.
- 정적 리소스 제공
- Reverse Proxy Server(로드밸런싱)
- 메일 서버
- WAS 서버 장애 발생 시 웹 서버에서 별도의 화면 처리 가능
- 대표적인 웹 서버 종류 Apache Nginx IIS

작동 원리
하나의 Master Process와 여러개의 Worker Process로 구성되어있으며 Event Driven 구조를 기반으로 작동한다. 비동기 논 블로킹 방식이며 하나의 작업이 완료되지 않아도 다음 작업으로 넘어갈 수 있는 병렬적 구조를 지닌다. 서버가 실행되면 미리 스레드를 생성하여 클라이언트의 요청을 한정된 스레드 개수를 기반으로 처리한다.
Master Process: 설정 파일을 읽거나 검증하며 Worker Process를 관리하는 역할
Worker Process: 요청에 대한 작업을 담당하는 역할

1. 서버 실행 시 스레드가 생성되며 스레드 풀 내에 생성된 스레드를 기반으로 요청을 처리한다. 스레드의 개수는 개발자가 설정 가능하다.
- 스레드가 적을 경우: 작업을 처리함에 있어 스레드가 부족하여 성능 저하가 일어날 수 있다.
- 스레드가 많을 경우: 놀고 있는(IDLE) 스레드가 발생해 자원이 낭비될 수 있다.
2. 요청에 대한 응답은 내부 워커 프로세스에서 진행된다. 워커 프로세스의 수는 직접 설정하지 않았다면 컴퓨터 CPU 성능에 맞게 자동으로 생성된다.
3. 이벤트 기반으로 작동하며 이벤트 루프를 통해 요청에 대한 작업이 처리된다. 이벤트 루프 내부 작업은 비동기 방식이다. A와 B의 요청이 있으면 A의 요청을 받고 A의 요청에 대한 작업이 완료되지 않아도 B의 요청으로 넘어갈 수 있다.
- 요청이 들어오면 스레드는 이 요청에 대한 작업을 이벤트 핸들러에 할당
- 이벤트 핸들러의 작업이 끝나면 작업이 완료된 순서대로 Queue에 쌓임
- 이벤트 루프는 Queue에 완료된 작업이 있는지 체크(이 과정에서 CPU에 IDLE 상태가 없도록 유지)
- Queue에 완료 작업이 있을 경우 응답
4. Queue 완료된 작업을 받아 클라이언트에게 응답한다.
참고 자료
https://www.slideshare.net/jen6/nginx-architecture
https://velog.io/@wijihoon123/Nginx%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://nginx.org/en/docs/beginners_guide.html