본문 바로가기
IT 개인 공부/Server

웹 서버 : Nginx vs Apache

by Libi 2021. 8. 25.
반응형

학부시절 인터넷 프로그래밍 수업을 배울 때는 웹 서버는 Apache, WAS는 Tomcat으로 웹 사이트를 구현하였었다.

예전에는 웹 서버로 Apache를 많이 사용하였지만 최근에는 Nginx를 사용하는 추세이다.

 

그렇다면 어떤 이유 때문에 Nginx를 점점 더 사용하는 것일까?

바로 Nginx가 트래픽이 많은 웹사이트에 적합하기 때문이다.

Nginx는 대용량 트래픽을 처리하기 위해 가벼움과 높은 성능을 목표로 하는 경량 웹 서버이다.

초기에는 정적 파일을 제공하는 웹 서버로 Apache를 보조하는 역할을 수행하였지만 오늘날에는 리버스 프록시, 로드 밸런서, 메일 프록시 및 HTTP 캐싱 등 전체 범위의 서버 작업을 처리하는 웹 서버로 발전하였다.

즉, Nginx 웹 서버는 Apache 웹 서버의 성능 제한을 해결하기 위해 탄생한 웹 서버이다.

그렇다면 이둘을 비교하면서 좀 더 자세히 Nginx와 Apache 웹 서버의 차이에 대해서 알아보도록 하자.

 

첫 번째로 설계 아키텍처의 차이이다. Nginx와 Apache는 클라이언트의 요청을 처리하고 응답하는 방식이 다르다.

Nginx

  • 이벤트 중심 접근 방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
  • 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행 
  • 코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능

Apache

  • 프로세스 기반 접근 방식으로 하나의 스레드가 하나의 요청을 처리하는 구조
  • 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음

 

 

두 번째로 성능 차이이다. Nginx와 Apache 두 웹서버 모두 정적 및 동적 컨테츠를 제공하는 방식이 다르다.

정적 컨텐츠

  • 서버 PC의 디스크에 저장하는 파일 기반 방법으로 정적 컨텐츠 제공
  • 설계 아키텍처 구조상 Nginx가 적은 비용으로 효율적으로 제공

 

동적 컨텐츠

  • 두 웹 서버 모두 서버 자체에서 동적 컨텐츠 처리 가능
  • Nginx는 SCGI 핸들러와 FastCGI 모듈을 사용해서 동적 컨텐츠 제공할 수 있음
  • 동적 컨텐츠는 두 웹서버 성능이 비슷함

 

 

세 번째로 OS 지원 여부이다. 거의 비슷하지만 조금 다르다.

Nginx

  • 거의 모든 Unix 계열 OS 지원
  • Windows는 부분적으로 지원

 

Apache

  • Linux 및 BSD를 포함한 모든 Unix 계열 OS 지원
  • Windows 모두 지원

 

 

네 번째로 분산/중앙 집중식 구성이다.

Nginx

  • 추가 구성을 허용하지 않음
  • 권한이 없는 사용자가 웹 사이트의 특정 측면을 제어할 수 없지만 추가 구성을 제공하지 않음으로써 성능 향상
  • 디렉토리 구성을 허용하지 않음으로 .htaccess 파일을 검색하고 사용자가 만든 요구 사항을 해석할 필요 없기 때문에 Apache보다 빠르게 요청을 처리할 수 있음

 

Apache

  • .htaccess 파일을 통해 디렉토리 별로 추가 구성을 허용
  • 이로 인해 권한이 없는 사용자가 웹 사이트의 특정 측면을 제어할 수 있음

 

 

다섯 번째로 요청을 처리 및 해석하는 방법의 차이이다.

Nginx

  • 요청을 해석하기 위해 URI를 전달
  • URI로 전달함으로써 웹 서버뿐만 아니라 프록시 서버, 로드 밸런서 및 HTTP 캐시로 쉽게 동작 가능
  • 서버에서 클라이언트로 데이터가 전송되는 속도가 Apache보다 더 빠름

 

Apache

  • 요청을 해석하기 위해 파일 시스템 위치 전달
  • URI 위치를 사용하지만 일반적으로 더 추상적인 디렉토리 구조를 사용

 

 

여섯 번째로 기능 모듈의 차이이다.

Nginx

  • 타사 플러그인 과정으로 선택되고 컴파일되기 때문에 동적으로 모듈을 로드할 수 없음
  • 따라서 사용하려는 기능만 선택해서 서버를 실행 = 가벼움

 

Apache

  • 동적으로 로드 가능한 다양한 60개의 공식 모듈을 제공
  • 모든 모듈을 가지고 서버가 실행되지만 실제 사용되는 모듈을 소수임 = 무거움

 

 

일곱 번째로 유연성이다.

Nginx

  • 아직까지는 동적 모듈과 로딩을 지원하지 않음

 

Apache

  • 동적 모듈과 로딩을 지원함

 

 

마지막으로 보안이다. 두 웹서버 모두 C언어 기반으로 확장된 보안을 제공한다. 하지만 Nginx가 코드가 더 작기 때문에 미래 지향적인 보안 관점에서 장점을 가진다.

즉, 비슷하지만 Nginx가 조금 더 안전한 것으로 간주된다.

 

지금까지 Nginx와 Apache를 비교하며 각각의 장단점에 대해서 간단하게 알아봤다. 그렇다면 어떠한 상황에 두 서버를 사용해야 할까?

Apache는 .htacess 파일을 제공하기 때문에 이를 활용하거나 Nginx에게 없는 핵심 모듈을 사용할 경우 Apache를 사용하며, 빠른 정적 컨텐츠를 처리하고 싶고 대용량 트래픽을 처리하는 웹 사이트인 경우는 Nginx를 사용하면 된다.

또한, 두 서버를 함께 사용해도 된다. Apache 앞단에 Nginx를 프록시 서버로 활용할 수 있다.

 

 

 

[ Reference ]

· https://w3techs.com/technologies/history_overview/web_server/ms

· https://serverguy.com/comparison/apache-vs-nginx/

· https://m.blog.naver.com/jhc9639/220967352282

반응형

댓글