SSAFY 2학기 프로젝트 동안, 빠르고 가볍다는 이유로 Nginx를 채택해 왔다. (Nginx는 경량 웹 서버라고도 불린다)
하지만 현업에서는 여전히 Apache를 사용하는 기업이 많다고 익히 들어왔고, 둘의 차이에 대해 짚고 넘어갈 필요성을 느껴 이번 글을 작성하게 되었다.
들어가기 앞서, CS 질문에서 단골 메뉴로 등장하는 WAS와 Web Server의 정의를 짚고 넘어가겠다.
Web Server : 단순히 정적 파일 응답
WAS(Web Application Server) : 클라이언트 요청에 대해 동적 처리가 이뤄진 후 응답

즉 이번 글에서 다룰 Apache와 Nginx는 Web Server에 해당한다.

Apache HTTP Server
Apache는 Apache Software Foundation에서 만든 웹 서버 프로그램으로서, 오래된 만큼 문서화가 잘 되어 있고 자료가 많다.
주요 특징
스레드 / 프로세스 기반 구조
- Apache는 클라이언트 요청당 하나의 스레드가 처리하는 구조 (동기)
- 1개의 프로세스는 1개의 스레드를 가지며 프로세스는 자식 프로세스를 1024개까지 가질 수 있다.
- 사용자가 많으면 스레드 생성, 메모리 및 CPU 낭비가 심하다.
- C10K, 즉 10000개의 커넥션이 넘어가면 성능 이슈가 발생한다.
- 최근엔 Nginx 처럼 이벤트 기반으로 동작하는 웹서버도 개발했다고 한다. 이 경우 스레드 안에서 비동기로 진행된다고.
단점
- 상술하였던 C10K 문제
- 1개의 커넥션 마다 1개의 프로세스/스레드가 할당되기에 비용 증대 문제

Nginx
트래픽이 많은 웹사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반구조의 웹 서버 프로그램.
공식문서에서는 "NGINX는 고성능, 확장성, 고가용성 웹서버, 역방향 프록시 서버 및 웹 가속기(HTTP 로드밸런서, 콘텐츠 캐시 등의 기능 결합)이다." 라고 소개하고 있다.
즉, 상술하였던 Apache의 C10K 문제를 해결하기 위한 방안으로서 속도와 고가용성을 높인 솔루션이라고 볼 수 있겠다.
주요 특징
Event-Driven 처리 기반 구조
- 한 개 또는 고정된 프로세스만 생성하고, 여러 개의 Connection을 모두 Event-Handler를 통해 [비동기 방식]으로 처리한다.
- 적은 양의 스레드만 사용되기 때문에 Context Swiching 비용이 적고, CPU 소모가 적다.
- Apache와 달리 동시 접속자 수가 많아져도 추가적인 생성 비용이 들지 않는다.
- CPU와 관계없이 모든 I/O들을 전부 Event Listener로 미루기 때문에 흐름이 끊기지 않고 응답이 빠르게 진행되어 1개의 프로세스로 더 빠른 작업이 가능하다.
- 결론적으로 자원을 보다 적게 사용한다.
단점
- Apache에 비해 다양성이 부족하다.
- Apache가 쌓아온 만큼의 커뮤니티 및 자료의 부재
결론
안정성 면에서는 Apache,
속도와 성능 면에서는 Nginx
Apache와 Nginx 비교가 잘되어 있네요 ~~ 평소 궁금했던 내용인데 잘 읽고 갑니다 ㅎㅎ