Web Server
- HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램을 말한다.
- Apache, Nginx, etc.
-
Apache와 Nginx는 웹 서버를 운영할 수 있는 오픈 소스 서버 기술을 제공
-
Apache는 오랫동안 이용되어 왔고, 최근에는 Nginx가 점유가 높아짐
-
웹 서버의 선택은 인터넷 트래픽에 영향을 주기 때문에 상황에 알맞는 선택이 필요
-
두 기술은 작동 방식이 다르기 때문에 각각의 작동 방식 및 장단점을 알고 사용하자
Apache | Nginx |
---|---|
- Apache HTTP는 1995년부터 많이 사용되어진 웹 서버로 HTTP 표준을 준수하도록 구축된 오픈 소스이며, 고성능 웹 서버
- Apache의 C10K 문제점 해결을 위해 만들어진 Event-Driven 구조의 웹 서버
- C10K : 일만개의 클라이언트 문제, 한 시스템에 동시 접속자수가 1만명이 넘어갈 때 효율적 방안
- 클라이언트의 요청을 처리하고 응답하는 방식의 차이
- 프로세스 기반 접근 방식으로 하나의 스레드가 하나의 요청을 처리하는 구조
- 매 요청마다 스레드를 생성 및 할당해야 하기 때문에 리소스를 많이 잡아먹음
- 이벤트 중심 접근 방식으로 하나의 스레드 내에서 여러 요청을 처리하는 구조
- 비동기 Event-Driven 구조 : Event Handler에서 비동기 방식으로 먼저 처리되는 요청을 진행
- 코어 모듈이 Apache보다 적은 리소스로도 많은 트래픽을 효율적으로 처리 가능
-
적은 스레드가 사용되면 CPU 소모가 적고, context switching 비용이 감소
-
Spring에서 Sevlet 기반 MVC(멀티 스레드)와 WebFlux(이벤트 루프) 비교할 때와 유사
-
대용량 트래픽을 처리하기 위해 가벼움과 높은 성능을 목표로 한다면 Nginx가 적합
- Apache는 서버 컴퓨터의 디스크에 저장하는 파일 기반 방법을 사용하여 정적 콘텐츠를 처리
- Nginx는 설계 아키텍처 구조상 Nginx가 적은 비용으로 효율적으로 제공
- Nginx는 최대 1,000개의 동시 연결을 실행하는 벤치마크 테스트에 따르면 Apache보다 2.5배 더 빠른 성능을 발휘
- 두 웹 서버의 성능이 비슷함
- Apache는 외부 구성 요소에 의존할 필요 없이 웹 서버 자체 내에서 동적 컨텐츠를 처리할 수 있음
- Nginx는 동적 컨텐츠를 웹 서버 내에서 처리하지 않지만 SCGI 핸들러와 FastCGI 모듈을 사용해서 동적 컨텐츠 제공할 수 있음
- Linux 및 BSD를 포함한 모든 Unix 계열 OS 지원
- Windows 모두 지원
- 거의 모든 Unix 계열 OS 지원
- Windows는 부분적으로 지원
- .htaccess 파일을 통해 디렉토리 별로 추가 구성을 허용
- 이로 인해 권한이 없는 사용자가 웹 사이트의 특정 측면을 제어할 수 있음
- 추가 구성을 허용하지 않음
- 권한이 없는 사용자가 웹 사이트의 특정 측면을 제어할 수 없지만 추가 구성을 제공하지 않음으로써 성능 향상
- 디렉토리 구성을 허용하지 않음으로 .htaccess 파일을 검색하고 사용자가 만든 요구 사항을 해석할 필요 없기 때문에 Apache보다 빠르게 요청을 처리할 수 있음
- 요청을 해석하기 위해 파일 시스템 위치 전달
- URI 위치를 사용하지만 일반적으로 더 추상적인 디렉토리 구조를 사용
- 요청을 해석하기 위해 URI를 전달
- URI로 전달함으로써 웹 서버뿐만 아니라 프록시 서버, 로드 밸런서 및 HTTP 캐시로 쉽게 동작 가능
- 서버에서 클라이언트로 데이터가 전송되는 속도가 Apache보다 더 빠름
- 동적으로 로드 가능한 다양한 60개의 공식 모듈을 제공 모든 모듈을 가지고 서버가 실행되지만 실제 사용되는 모듈은 소수임 = 무거움
- 타사 플러그인 과정으로 선택되고 컴파일되기 때문에 동적으로 모듈을 로드할 수 없음
- 사용하려는 기능만 선택해서 서버를 실행 = 가벼움
- 동적 모듈과 로딩을 지원함
- 아직까지는 동적 모듈과 로딩을 지원하지 않음
- 두 웹 서버 모두 C언어 기반으로 확장된 보안을 제공
- 하지만 Nginx가 코드가 더 작기 때문에 미래 지향적인 보안 관점에서 장점을 가짐(비슷하지만 Nginx가 조금 더 안전한 것으로 간주)
항목 | Apache | Nginx |
---|---|---|
작동 방식 | 프로세스 기반 접근 방식 (멀티 스레드 or 멀티 프로세스) |
이벤트 중심 접근 방식 (단일 스레드) |
성능 차이 (정적 컨텐츠) |
Nginx가 효율적 | |
성능 차이 (동적 컨텐츠) |
비슷함 (다만 Nginx는 내부에서 처리하지 못 하고 핸들러를 통해 처리) |
|
OS 지원 범위 | 거의 비슷하지만 조금 다름 (Apache가 좀 더 넓게 지원) |
|
요청 해석 | 파일 디렉토리 구조 접근 | URI 전달 |
무게 | 사용하지 않는 모듈도 포함하기 때문에 무거움 | 가벼움 |
-
Apache는 오랫동안 이용되어 왔기 때문에 신뢰할 수 있고 문제가 발생했을 때 참고할 자료가 Nginx에 비해 많다. 추가로 다양한 동적 모듈을 로드하는데 이점이 있다.
-
하지만 다량의 트래픽이 발생하는 경우에는 Nginx가 안정성과 속도면에서 확실히 효율적이다.
-
추가로 두 웹 서버를 함께 사용해도 된다. Apache 앞단에 Nginx를 프록시 서버로 활용할 수 있다.