Infra

Nginx란?

Wanderer Kim 2025. 4. 28. 22:49
반응형

사이드 프로젝트하면서 load balancer로 Nginx를 사용하게 되면서 Nginx에 대해서 공부한 내용을 정리 하였다.

 

Nginx란?

트래픽이 많은 웹사이트의 서버를 도와주는 비동기 이벤트 기반구조의 웹 서버 프로그램이다.

  • Web Server  :단순히 정적 파일을 응답해주는 서버
  • WAS(Web Application Server) : 클라이언트 요청에 대해 동적 처리가 이루어진 후 응답하는 서버

Nginx 구조

Nginx는 하나의 master process와 다수의 worker process로 구성되어 실행됩니다.

master process는 설정 파일을 읽고, 유효성을 검사합니다. 그리고 worker process를 관리합니다.

모든 요청은 worker process에서 처리합니다.

 

worker process가 생성될 때 각자 지정된 listen 소켓을 배정 받는다. 그 소켓에 새로운 클라이언트 요청이 들어오면 커넥션을 형성하고 처리한다.

커넥션은 정해진 keep alive 시간만큼 유지되는데, 이렇게 커넥션이 형성되었다고 해서 worker process가 커넥션 하나만 담당하지 않는다. 형성된 커넥션에 아무런 요청이 없으면 새로운 커넥션을 형성하거나 이미 만들어진 다른 커넥션으로부터 들어온 요청을 처리한다.

Nginx에서 이런 커넥션 형성과 제거, 새로운 요청을 처리하는 것을 event라고 한다.

event들은 OS 커널이 큐 형식으로 worker process에세 전달해준다.

event는 큐에 담긴 상태에서 worker process가 처리할 때까지 비동기 방식으로 대기한다.

그리고 worker process는 하나의 스레드로 event를 꺼내서 처리해 나간다.

 

worker process는 보통 CPU 코어 수만큼 생성하게 된다.

그래서 코어가 담당하는 process를 바꾸는 횟수를 줄이기에 CPU의 Context Switching을 줄이게 된다.

 

만약 큐에 담긴 요청 중 하나가 시간이 오래 걸릴때 Nginx는 어떻게 처리할까?

이럴 경우를 대비해서 Thread Pool을 만들어 그 요청은 따로 수행하게 된다.

worker process는 처리할 요청 시간이 오래 걸릴 것 같으면 thread pool에 event를 위임하고 다른 event를 처리한다.

 

Nginx 장점과 단점

단점

  • 개발자가 직접 모듈을 만들기가 까다롭다.

장점

  • 프로세스를 적게 만들다보니 가볍다
  • 동적 설정 변경 가능
  • 동시 커넥션 양 최소 10배 증가
728x90