01. 개요
보통 Apache와 Nginx의 차이점으로 처리 방식과 성능을 말한다.
Apache는 요청당 하나의 프로세스 혹은 Thread로 처리를 하게되며, 다양한 모듈을 포함하기 때문에 Nginx에 비해 무거운 편이다.
Nginx는 요청에 대한 각 상태를 정해서, event가 발생할 때마다 event를 처리하는 방식이며, 별도 모듈을 포함하지 않기 때문에 가벼운 편이다.
02. 아파치 ( Apache )
Apache는 요청 당 프로세스(or 쓰레드)가 처리하는 구조로, 요청이 많을수록 CPU와 메모리 사용이 증가하기 때문에 성능 저하가 있을 수 있다. 프로세스가 블록 되면 요청을 처리하지 못하고, 처리가 완료 될 때까지 계속 대기하게 된다.
이와 같은 문제들은 Keep Alive를 활성화 함으로써 해결이 가능하지만, Keep Alive 때문에 대량 접속 시 효율이 급격하게 떨어지는 또 다른 문제점이 발생할 수 있다.
Keep Alive
HTTP 프로토콜의 특성상 한 번 통신이 이루어지면 접속을 끊어 버리지만, KeepAlive On 상태에서는 KeepAliveTimeOut 시간 동안 접속을 끊지 않고 다음 접속을 기다리는데, 한 번 연결된 클라이언트와 통신을 유지하고 있기 때문에, 다음 통신 시에 Connection을 생성하고 끊는 작업이 필요 없다. 따라서 Keep Alive을 활성화 함으로써, 성능 향상을 기대 할 수 있다. 요청이 많은 서버에서 KeepAlive On으로 설정해 놓을 경우, 요청 마다 연결을 유지해야 하기 때문에 프로세스 수가 늘어나, MaxClient값을 초과하는 경우가 발생 할 수 있다.
Apache 2.4(2012.06)부터는 Keep Alive에 대한 고민을 해결하는 새로운 MPM 방식인, Event MPM 방식을 지원하고 있다. 요청을 처리하는 프로세스를 별도로 두어, 분산된 처리를 하게 된다.
Apache는 주로 CGI를 통한 웹서비스를 위해 생겨난 경향이 있다.
03. 엔진엑스 ( Nginx )
Nginx는 보안과 속도를 최적화 시키려는 노력에서 탄생한 웹서버이며, 사용이 매우 심플하고 규모가 작은 서비스이면서 정적 데이터 처리가 많은 서비스에 적합하다. Event Driven 방식의 웹 서버로, 요청에 대한 각 상태를 정해서, event가 발생할 때마다 event를 처리한다.
적은 수의 쓰레드로 효율적인 일 처리를 하며, 쓰레드를 적게 사용 한다. 따라서 context switching 비용이 적고, 따라서 CPU 소모도 적다.
그러나 모듈 개발이 어려우며 다양한 모듈이 없다.
Nginx는 ginx의 경우 listener 가 request를 처리하기 때문에 각 request 마다 스레드와 프로세스가 복제 되지 않는다. Http Porxy의 목적이 강하다.
04. Apache vs Nginx 비교
Apache | Nginx | |
방식 | prefork worker event |
Event-driven |
확장성 | 제공되는 모듈이 많다 | 비교적 적음 |
성능 | 비교적 느리며, 복잡한 웹서버에 적합 | 가벼운 웹서비스 동작 시 빠름 |
WAS 연동 | Tomcat 연동 시 mod_jk 사용 | proxy 방식을 통해 연동 |
점유율 | 44.89% | 20.65% |
'IT > MW' 카테고리의 다른 글
[Apache] Log (0) | 2020.09.21 |
---|---|
08. Application Server, Servlet Container (0) | 2020.06.16 |
06. Apache (0) | 2020.06.16 |
03. SSL/TLS, HTTPS (0) | 2020.06.07 |
02. WEB Server (0) | 2020.06.06 |