Archived(IT)/배경지식_기술

웹 서버 Nginx_Apache

bale.yoon 2019. 11. 2. 01:22

웹 서버는 대표적으로 Nginx와 Apache 두 가지를 많이 든다. 

웹 어플리케이션을 개발해본 경험이 있다면 두 용어에 대해서는 접했던 경험이 있을 것이다.

(나도 후에 알게 되었는데 EC2를 배포할 때 Nginx를 썼던 것이었다...)

1. Nginx

Nginx의 가장 큰 특징은 Event-Driven으로 동작된다.

즉, 서버로 들어오는 요청을 Event로써 어떤 일을 해야 하는지에 대해서만 전달하고 다음 Event를 처리한다.

그래서 하나의 프로세스를 통해서 들어오는 많은 요청들을 빠르게 처리가능하다. 

Apache와 달리, CPU에 관계없이 모든 IO들을 전부 Event Listener로 미루기 때문에 흐름이 끊기지 않고 응답이 빠르게 진행이 되어 1개의 프로세스로 더 빠른 작업이 가능하게 될수 있다. 이러한 처리 덕에, System Resource 또한 적게 차지하게 된다는 장점이 있다. 그렇지만 커뮤니티 파워와 같은 부분에서는 아파치에 비해 단점으로 지적될 수 있다.

(출처:https://taetaetae.github.io/2018/06/27/apache-vs-nginx/)

2. Apache

Apache의 가장 큰 특징은 Client로부터 요청을 받으면, 멀티 프로세스 구조를 통해 요청을 처리한다(MPM: Multi Process Module).

즉, 서버로 들어오는 요청을 프로세스마다 처리를 한다. 이러한 구조가 System Resource를 상대적으로 많이 차지한다는 점을 단점으로 들 수는 있다. 그러나 국내에서 웹 표준으로 자리잡을 만큼 이미 많은 서비스들에서 사용중이라 강력한 커뮤니티 파워와 여러 API를 장점으로 들 수 있다. 

이러한 Apache는 Prefork와 Worker 2가지 구조가 있는데, 각각의 특징은 다음과 같다. 

(출처:https://taetaetae.github.io/2018/06/27/apache-vs-nginx/)

 

  • Prefork MPM

     

    Prefork MPM,   http://old.zope.org/Members/ike/Apache2/osx/configure_html
    실행중인 프로세스를 복제되어 처리가 된다. 각 프로세스는 한번에 한 연결만 처리하고 요청량이 많아질수록 프로세스는 증가하지만 복제시 메모리영역까지 복제되어 동작하므로 프로세스간 메모리 공유가 없어 안정적이라 볼수 있다.
  • Worker MPM
    Worker MPM,   http://old.zope.org/Members/ike/Apache2/osx/configure_html
    Prefork 동작방식이 1개의 프로세스가 1개의 스레드로 처리가 되었다면 Worker 동작방식은 1개의 프로세스가 각각 여러 쓰레드를 사용하게 된다. 쓰레드간의 메모리를 공유하며 PreFork방식보다 메모리를 덜 사용하는 장점이 있다.