티스토리 뷰

운영체제/Linux 일반

Apache vs Nginx

청년정신 2019. 3. 27. 16:12

Apache vs Nginx  

 

Apache와 Nginx는 현재까지 가장 폭넓게 사용되는 2가지의 오픈소스 웹서버이다.

2가지 솔루션들은 현재 전체 웹서비스의 50% 이상을 차지할 정도로 프론트엔드에서 사랑받고 있다.

이러한 폭넓은 지지 덕분에 수많은 다양한 솔루션들과 함께 다양한 Stack들을 제공하고 있다.

이 2가지 솔루션은 각자의 장점을 가지고 있기 때문에 서로의 우위를 이야기 한다는 관점 보다는 구조적인 부분을 보고 알맞게 선택하는 것이 바람직하다.

 

 

 


 

프로젝트 배경과 일반적인 특징 소개

 

Apache

 

1995년 Rober McCool에 의해 만들어졌으며, 1999년 부터 Apache Software Foundation 주도에 개발되었다. 웹서버 데몬의 선구자로 HTTP 웹 서버의 대명사로 Apache를 많이 떠올리는 이유도 이러한 오래된 역사에서 비롯된다.
가장 대중적이었고, 동적 로딩 모듈 기반 시스템을 통해 다양한 소프트웨어들과 유기적으로 결합되어 스택들을 제공해 왔다.
대중적인 인기를 바탕으로 여전히 가장 두터운 사용자와 경험적 지식을 제공하고 있다.

 

Nginx

 

2002년 러시아의 lgor Sysoev가 처음으로 고안하여, 2004년 비동기식 이벤트 처리 중심의 아키텍쳐를 목표로 소개하였다.
2000년 대 들어서면서 프론트엔드 서비스가 웹서비스 기반으로 크게 주목 받기 시작하면서, 웹 기반의 동시 처리가 매우 중요하게 되었다.
Nginx는 경량의 자원활용과 물리적인 하드웨어로 쉽게 확장이 가능해서 더욱 주목 받기 시작했다.
특히 정적인 컨텐츠들을 빠르게 처리하는데 있어서 매우 탁월한 처리가 가능해서, 동적 처리를 별도로 담당하는 소프트웨어 스택들과 연계해서 고성능 서비스를 제공하는 데 적합하다고 사용자들에게 알려져 왔다.
이러한 이유로 Nginx는 웹서비스 뿐만 아니라 프록시 서비스 기능에도 많이 사용되고 있다.

 


 

아키텍쳐 방식 소개

 

Apache는 MPM (Multi Processing Module) 아키텍쳐를 기반으로 클라이언트 요청 처리 방법을 처리하는 기술 기반을 하고 있다.

MPM은 3가지 아키텍쳐를 근간으로 하고 있다. mpm_prefork, mpm_worker, mpm_event 로 이뤄져 있다.

mpm_prefork 는 단일 스레드로직에서 동작하며 각 서버 프로세스는 한번에 하나의 Web Request를 처리한다.

이러한 방식은 PHP 환경에서 권장되는 방식이다. LAMP 아키텍쳐에서 PHP가 등장하는 이유도 이러한 데서 비롯된다.

mpm_worker는 동시에 여러 스레드를 지원한다. 이것은 Apache가 좀 더 효율적이고 확장가능하도록 돕는다.

mpm_event는 mpm_worker와 유사한 방식으로 동작하지만 최근 등장한 웹 관련 어플리케이션들을 위한 keep-alive 메카니즘이 포함되어 있다.

이러한 방식은 커넥션 마다 새로운 스레드가 필요하다는 관점에서 커넥션이 대규모로 많아 질때 성능 측면에서 많은 이슈가 발생할 수 있다.

 

프로세스 중심의 접근법
각 요청에 대해 새로운 Thread 필요.

 

 

 

Nginx는 프로세스 또는 스레드라는 개념을 사용하지 않고 이벤트 개념으로 접근한다.

단일 NGINX 작업자가 동시에 수천 개의 Web 요청을 처리할 수 있다는 의미이다. Worker가 이벤트가 트리거 될 때 마다 새로운 요청을 빠르게 선택할 수 있는 내부 루핑 시스템을 사용하는 방식이다. 이러한 방식은 Apache와는 다르게 이벤트가 비동기식으로 처리되기 때문에 다른 이벤트들이 순차적으로 지정해서 기다릴 필요가 없다.

 

이벤트 중심의 접근 방식
하나의 스레드에서 여러개의 요청을 처리

 


 

컨텐츠의 처리 방식

 

정적 컨텐츠 처리

 

Apache - 전통적인 파일기반 방식의 정적 컨텐츠 
 
NGINIX - 이벤트 처리/비동기식/논블로킹 방식 처리로 인해 정적 컨텐츠 제공시 고속 처리가 가능

 

동적 컨텐츠 처리

Apache - 서버 내에서 처리
기본적으로 유연성과 범용성을 갖추는 방식으로 서버 자체내에서 동적 컨텐츠 처리가 가능하다.
 
NGINX - 동적 컨텐츠를 처리 하지 않음
동적 웹 페이지 컨텐츠를 가진 모든 요청을 위해 외부 자원과 연계 (php-fpm)한다. 따라서 최종적으로 동적 컨텐츠가 다시 돌아올 때까지 기다렸다가 클라이언트에게 전달하는 방식을 가지고 있다. 물론 방법은 있으나 다소 복잡하다.
 

 

OS 지원에 대한 범용성

 

Apache - 리눅스, BSD, UNIX , Window
큰 장점 중에 하나이다. 역사가 있는 만큼 지원범위가 다양하고, 특히 Window까지 지원이 가능하여 일관성 있는 웹 서비스 아키텍쳐를 구현 할 수 있다.
 
NGINX - 리눅스, BSD, UNIX, Window 부분지원
다양한 운영체계를 지원하고, 윈도우도 지원하지만 Apache만큼 완벽히 지원하지는 않는다.

 


 

분산/중앙집중식 구성 방식

 

Apache - 분산/중앙집중식 구성 채택
.htaccess 를 통해 디렉토리별로 추가 구성을 할 수 있다. 단일 기반 뿐만 아니라 분산형 구축이 가능하므로 대용량 서버 아키텍쳐에서 자원만 충분하다면 여러 웹 서비스를 구현 할 수 있다.
 
NGINX -중앙집중식 구성 채택
Apache 처럼 .htaccess를 지원하지 않는다. 따라서 추가 구성을 할 수 없는 단점이 있다. 하지만 이러한 방식은 가상화, 클라우드, MSA와 같은 아키텍쳐에서는 오히려 경량화와 성능 보장이라는 측면에서 단점이 되지 않을 수도 있다.

 


 

모듈 및 확장성/보안

 

Apache
60개 이상의 다양한 기능과 모듈을 지원하며, 필요에 따라 활성화 또는 비활성 시킬 수 있다.동적 모듈을 통해 웹 서버의 사용자 지정도 가능하게 할 수 있는 등 다양한 디자인과 확장이 가능하다.
또한 보안을 위해 다양한 Web기반 DDoS  방어에 대한 기술을 제공한다.
 
NGINX
다른 코어 모듈을 동적으로 로딩할 수 없도록 되어 있습니다. 옵션을 최소화 해서 태생 부터 성능에 포커싱 했다.
NGINX에서도 보안에 대한 다양한 기술 문서를 제공하며, 코드 자체가 가볍고 경량화 되어 있어서 보안에 유리한 측면도 있다.

 

 

 

 

 

 

 

 

 

'운영체제 > Linux 일반' 카테고리의 다른 글

리눅스 환경변수 구조의 이해  (0) 2019.03.26
공지사항