Java로 프로그래밍을 처음 시작할 때는 웹서버는 Apache, WAS는 Tomcat으로 웹 사이트를 구현했었다.
전 직장에서도 웹 서버-Apache, WAS-Tomcat을 사용하고 있었지만, Python으로 프로젝트를 배포하며 알게 된 것은 최근에는 Nginx를 많이 사용한다는 것이다.
무슨 이유로 Apache보다 Nginx를 더 사용하는 걸까?
그 이유는 바로 Nginx가 트래픽이 많은 웹 사이트에 더 적합하기 때문이다.
Nginx는 대용량 트래픽을 처리하기 위해 가벼움과 높은 성능을 목표로 하는 경량 서버이다.
그런데 웹 서버는 정적 파일의 제공을 목적으로 사용하던 Apache를 사용하던 시기와 달리 최근에는 리버스 프록시, 로드 밸랜서, 메일 프록시 및 HTTP 캐싱 등 전체 범위에서 서버 작업을 처리하는 웹 서버로 발전하였다.
다양한 기능과 클라이언트의 확장으로 대용량 트래픽을 처리해야 하는 요즘 서비스는 무겁고 대용량 트래픽을 처리하기 어려운 Apache와는 맞지 않기 때문에 Nginx가 점점 더 많이 사용되고 있다.
Apache와 Nginx의 차이점
Apache보다 Nginx를 더 많이 사용하는 이유는 간략하게 살펴보았다.
이제 두 웹 서버의 차이점을 상세히 비교해 보도록하자.
1. 설계 아키텍처
Nginx
이벤트 중심 접근 방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
- 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행
- 코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능
Apache
- 프로세스 기반 접근 방식으로 하나의 스레드가 하나의 요청을 처리하는 구조
- 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음
2. 성능
정적 컨텐츠
- 서버 PC의 디스크에 저장하는 파일 기반 방법으로 정적 컨텐츠 제공
- 설계 아키텍처 구조상 Nginx가 적은 비용으로 효율적인 서비스 제공
동적 컨텐츠
- 두 웹 서버 모두 서버 자체에서 동적 컨텐츠 처리 가능
- Nginx는 SCGI핸들러와 FastCGI 모듈을 사용해서 동적 컨텐츠 제공할 수 있음
- 동적 컨텐츠는 두 웹 서버 성능이 비슷함
3. OS 지원
Nginx
- 거의 모든 Unix 계열 OS 지원
- Windows는 부분적으로 지원
Apache
- Linux 및 BSD를 포함한 모든 Unix 계열 OS 지원
- Windows 모두 지원
4. 분산/중앙 집중식 구성
Nginx
- 추가 구성을 허용하지 않음
- 권한이 없는 사용자가 웹 사이트의 특정 측면을 제어할 수 없지만 추가 구성을 제공하지 않음으로 성능 향상
- 디렉토리 구성을 허용하지 않음으로 .htaccess 파일을 검색하고 사용자가 만든 요구 사항을 해석할 필요 없기 때문에 Apache보다 빠르게 요청을 처리할 수 있음
Apache
- .htaccess 파일을 통해 디렉토리 별로 추가 구성을 허용
- 이로 인해 권한이 없는 사용자가 웹 사이트의 특정 측면을 제어할 수 있음
5. 요청을 처리 및 해석하는 방법의 차이
Nginx
- 요청을 해석하기 위해 URI를 전달
- URI로 전달함으로써 웹 서버뿐만 아니라 프록시, 서버, 로드 밸런서 및 HTTP 캐시로 쉽게 동작 가능
- 서버에서 클라이언트로 데이터가 전송되는 속도가 Apache보다 더 빠름
Apache
- 요청을 해석하기 위해 파일 시스템 위치 전달
- URI위치를 사용하지만 일반적으로 더 추상적인 디렉토리 구조를 사용
6. 기능 모듈의 차이
Nginx
- 타사 플러그인 과정으로 선택되고 컴파일되기 때문에 동적으로 모듈을 로드할 수 없음
- 따라서 사용하려는 기능만 선택해서 서버를 실행 = 가벼움
Apache
- 동적으로 로드 가능한 다양한 60개의 공식 모듈을 제공
- 모든 모듈을 가지고 서버가 실행되지만 실제 사용되는 모듈은 소수임 = 무거움
7. 유연성
Nginx
Apache
8. 보안
두 웹 서버 모두 C언어 기반으로 확장된 보안을 제공한다.
하지만 Nginx 코드가 더 작기 때문에 미래 지향적인 보안 관점에서 장점을 가진다.
🔖 결론
Apache는 .htacess 파일을 제공하기 때문에 이를 활용하거나 Nginx에게 없는 핵심 모듈을 사용할 경우 Apache를 사용하며, 빠른 정적 컨텐츠를 처리하고 싶고 대용량 트래픽을 처리하는 웹 사이트인 경우는 Nginx를 사용하면 된다.
또한, 두 서버를 함께 사용해도 된다. Apache 앞단에 Nginx를 프록시 서버로 활용할 수 있다.
🔖 참고
https://sorjfkrh5078.tistory.com/289