본문 바로가기

Nginx

[Nginx] Nginx란, Nginx 와 Apache

Nginx 란

 

트래픽이 많은 웹사이트의 확장성을 위해 개발된 경량의 고성능 웹서버이다. 

Nginx는 적은 자원의 사용으로 높은 성능높은 동시성을 목표로 만들어졌다.

Nginx가 등장하기 전에는 Apache를 웹서버로 많이 사용하였지만 점차 늘어나는 트래픽을 감당하기 어려웠고 C10K 문제(하나의 웹 서버에 1만개 이상의 클라이언트 접속을 처리하지 못하는 문제)가 발생하였고 이를 해결하기 위해 러시아의 Igor Sysoev라는 개발자에 의해 2002년 Nginx의 개발이 시작되었고 2004년에 릴리즈 됐다. 

현재 Nginx는

  • HTTP Server - 요청에 의해 정적 파일을 응답해주는 웹서버
  • Reverse Proxy Server - 요청으로부터 애플리캐이션 서버에 로드밸런싱
  • Mail Proxy Server

등으로 사용되고있다

 

 

Nginx 와 Apache

 

Nginx

  • 비동기 Event-Drive 으로 요청하여 적은 자원을 사용해 CPU 소모가 적다.
  • 다수의 클라이언트 연결을 효율적으로 처리 가능.
  • 문맥 교환(context switching)의 비용이 적다.
  • Apache에 비해 모듈이 다소 적다.
  • 복잡한 처리가 필요한 요청의 경우 시스템 큐에 쌓이게 되어 성능이 저하될 수 있다.

 

 

- Nginx는 event driven으로 클라이언트 요청을 병렬 처리한다. 싱글 프로세스이며, 클라이언트의 요청 이벤트를 reactor가 받는다. 받은 이벤트는 handler를 통해 worker로 전달되어 처리된다. 

 

Apache

  • 환경에 맞게 PreFork 방식(요청마다 프로세스 생성), Worker 방식(프로세스와 쓰레드 병행해서 사용) 선택 가능
  • 안정성, 확장성, 호환성의 장점이 있다.
  • 하나의 클라이언트 연결에 하나의 쓰레드만 부여된다.
  • 클라이언트의 연결이 늘어남에 따라 프로세스가 계속 늘어나 메모리 낭비가 심하고 문맥 교환 비용이 든다.
  • 프로세스가 blocking 되면 요청을 처리하지 못하고 이전 요청을 처리하기 전까지 대기상태가 된다. (해결 가능한 기능이 있지만 효율이 떨어짐)