웹 서버의 종류는 다양하지만 대부분 사용하는 웹 서버는 비슷하다. 그 중에서 Apache 와 Nginx 를 많이 사용하는데, 어느 웹 서버를 선택하는 것이 좋을지 알기 위해 둘의 차이점을 찾아보았다.

일단 크게 어떤 차이점이 있는지 파악하기 위해 chatGPT 를 이용해보았다. 5가지 정도의 차이점이 있었다.

  1. 아키텍처 : Apache 는 프로세스 기반의 웹 서버, Nginx 는 단일 프로세스 내에서 처리하는 이벤트 중심의 비동기 아키텍처
  2. 성능 : 아키텍처 덕분에 일반적으로 Nginx 가 더 빠르고 효율적이다. 하지만 Apache 는 트래픽이 많은 경우에 좋은 성능을 낼 수 있다.
  3. 설정 : Nginx 가 Apache 보다 설정 과정이 간결하다.
  4. 모듈 : Apache 가 제공하고 있는 모듈의 수가 더 많다. Nginx 는 로드 밸런싱 및 역방향 프록시와 같은 특정 작업에 최적화된 모듈에 집중되어 있다.
  5. 보안 : 두 웹 서버 모두 보안 웹 서버지만, Nginx 가 더 나은 보안 기능을 제공한다.

간단하게 정리해보자면, Apache(최초 출시년도 1995) 보다 Nginx(최초 출시년도 2004) 가 후발주자이기 때문에 Nginx 는 기존 Apache 의 단점을 보완하려는 시도가 보인다. Apache 는 프로세스 기반으로 요청마다 새로운 프로세스를 제공한다. Nginx 는 단일 프로세스 환경에서 더 빠른 응답을 낼 수 있는 구조로 개선하였다. 또한 보안도 Nginx 가 더 효율적으로 관리할 수 있다. 그렇다고 모든 상황에서 Nginx 를 선택하기에는, Apache 가 대용량 트래픽 관리, 다양한 모듈 제공 등의 장점을 제공하기 때문에 상황에 맞는 웹 서버를 선택하는 것이 적절하다. 일반적인 상황에서는 높은 성능을 보여주는 Nginx 를 선택하고, Nginx 에서 제공하는 기능들로는 구현하기 어려운 특수한 상황에서는 Apache 를 선택하는 것이 좋아보인다.

Nginx 동작 과정

Apache 는 요청이 들어올 경우 매 요청마다 프로세스를 생성한다. 생성된 프로세스는 사용자가 요청한 처리를 수행한다. Apache 의 동작 과정은 매우 심플하다. 하지만 Nginx 는 Apache 에 비해 동작 과정이 조금 복잡하다. Apache 는 매번 프로세스를 생성하지만 Nginx 는 Nginx 가 시작될 때 미리 Worker Process 를 생성해둔다.(자동으로 설정하면 여러 환경에 맞는 적절한 Worker process 로 조절하기는 한다.) 사용자의 요청이 들어오면 요청을 관리하는 Master Process 가 Worker Process 에게 요청을 할당한다.

매번 새로운 프로세스를 생성하고 제거하는 Apache 와는 달리 적절한 Worker Process 를 미리 생성해두고 생성된 Process 내에서 요청을 배분하며 사용한다. Apache 는 Blocking 방식으로 진행되기 때문에 할당받은 프로세스가 요청을 마칠 때까지 점유하고 있는 반면 Nginx 는 Non-Blockin 방식이기 때문에 Worker Process 가 다른 요청을 처리하는 동안 다른 사용자에게 들어온 요청을 처리할 수 있다.

즉, 설정된 최대 개수까지 무한정 프로세스를 생성하는 Apache 는 한정된 메모리 안에서 비교적 사용하는 메모리의 양이 커질 수 있다. Nginx 는 적절한 Worker Process 의 개수를 조절해가며 Non-Blocking 방식으로 진행하기 때문에 Apache 보다 적은 메모리 사용량으로 높은 성능을 낼 수 있다.

Untitled