학부시절 인터넷 프로그래밍 수업을 배울 때는 웹 서버는 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
'IT 개인 공부 > Server' 카테고리의 다른 글
메시지 큐(Message Queue)란? (1) | 2021.08.26 |
---|---|
여러 대의 서버가 세션(Session)을 공유하는 방법 (0) | 2021.08.24 |
포워드 프록시(Forward Proxy) vs 리버스 프록시(Reverse Proxy) (0) | 2021.08.21 |
로드 밸런싱(Load Balancing) (0) | 2021.07.31 |
댓글