관리 메뉴


Kinesis´s Open Document

Lightsail : Nginx vs Apache 본문

기획 시리즈/구축 : Lightsail 을 이용한 서버 구축

Lightsail : Nginx vs Apache

Kinesis 2019. 2. 10. 22:39

※ 본 게시물은 https://www.kinesis.kr/lightsail-nginx-vs-apache/ 에 게재한 내용의 Shadow(복제본) 입니다.


Lightsail : Nginx vs Apache

Amazon Lightsail 을 이용한 WordPress 사이트 구축

아마존 라이트세일(Amazon Lightsail)을 이용해 워드프레스(WordPress) 사이트를 구축할 때, 우리는 엔진엑스(Nginx)나 아파치(Apache) 서버 중 하나를 선택해야 한다. 가장 널리 알려진 아파치(Apache)를 이용하는 방법도 있지만 일반적으로 저렴한 비용의 서버를 이용하여 워드프레스(WordPress) 사이트를 구축하는 경우가 많다 보니 CPU와 Ram의 가용성을 고려, 엔진엑스(Nginx) 기반으로 구축하기를 권장한다. 실제로 1년 이상 운영 경험에 비추어봐도 그렇고 사이트의 규모가 커져 동접자(동시 접속자)가 늘어나는 경우 엔진엑스(Nginx)로 전환하는 이슈가 많으니 이러한 점도 참조하도록 하자.


NGINX or APACHE : That is the Question

엔진엑스(Nginx)는 가벼움과 높은 성능을 목표로 만들어진 경량화된 웹 서버로 2017년 10월을 기준으로 실제 작동하는 웹 사이트들 중 20.65%가 이용하고 있으며, 정적처리에서 비교적 강점을 보인다. 리버스 프록시(Reverse Proxy) 및 메일 프록시(Mail Proxy) 기능을 가지고 있어 이러한 용도로 활용되기도 한다.


아파치(Apache)는 우리가 흔히 알고 사용하고 있는 아파치 소프트웨어 재단(Apache Software Foundation)에서 관리하는 HTTP 웹 서버이며 가장 대중적으로 사용되고 있는 웹 서버로 2017년 10월을 기준으로 실제 작동하는 웹 사이트들 중 44.89%가 이용하고 있으며 동적처리에서 비교적 강점을 보인다.


2005년경까지가 전성기였고 그 뒤인 2011년 전후로도 보통의 웹사이트(Web Site)는 아파치(Apache)를 기반으로 구축되는 경우가 많았으나 최근 몇 년 전부터는 엔진엑스(Nginx), IIS(Internet Information Service) 등의 시장 점유율이 증가하는 추세가 관찰되고 있다. 


이는 웹 서버에 관련된 통계를 발표하는 넷크래프트(Netcraft)의 통계자료에서도 확인 가능한데, 2008년도부터 엔진엑스(Nginx)의 점유율을 계속 증가하는 추세를 보이며 아파치의 경우 점유율을 회복하는가 싶다가 2011년을 기준으로 하향하는 추세를 보이고 있다. 이는 해당 시점 증가하기 시작한 Other 웹 서버와도 연관이 있을 것으로 유추할 수 있는데 파이썬(Python) 기반의 웹 서버 등장 등이 예가 될 수 있겠다.



VPS의 성능을 고려한다면 NGINX, 유지보수를 고려한다면 APACHE

라이트세일(Lightsail)은 가장 저렴한 Linux/Unix 기반의 인스턴스(Instance) 기준  1CPU, 512MB Ram의 처리 성능을 가지고 있다. 요즘 일반적인 노트북이나 PC에서도 듀얼코어(Dual Core) 나 통상 쿼드코어(Quad Core) 이상의 CPU를 사용하며, 4GB 이상의 Ram을 가지고 있는 것을 고려할 때 높은 사양은 아니다. 이 경우 Event-driven 방식이면서 비동기 방식(Asynchronous)으로 동작하는 엔진엑스(Nginx)가 1개의 요청당 하나의 프로세스(Process)와 쓰레드(Thread) 자원을 소비하게 되는 아파치(Apache)에 비해 상대적으로 유리하다. 반면 별도 인력을 두고 유지보수 측면에서의 이점을 취득하고자 한다면 아무래도 널리 쓰이고 있고 많은 레퍼런스 풀을 가지고 있는 아파치(Apache)가 엔진엑스(Nginx)에 비해 상대적으로 유리하다.


아파치(Apache)는 요청(Request) 하나당 하나의 프로세스(Process) 또는 스레드(Thread)가 생성되어 처리하는 구조로 요청(Request)이 많아질수록 CPU와 메모리 사용량이 증가하여 성능상의 저하가 발생 될 수 있는 구조로 되어 있다. 또한 프로세스(Process)가 블로킹(Blocking) 상태가 되는 경우 요청을 처리하지 못하고 처리 완료 시까지 대기하는 일이 발생하는데 이 경우 Keep Alive를 활성화함으로써 문제해결이 가능하지만 동접자가 많아지는 경우 효율이 떨어지는 또 다른 문제점이 발생하기도 한다.


이러한 문제들로 인해 등장한 것이 바로 엔진엑스(Nginx) 인데 경량화를 통해 보안과 속도를 최적화시키기 위한 것에서 출발하여 아파치(Apache)의 처리 방식과는 다르게 이벤트 드리븐(Event Driven) 방식의 구조로 되어 있다. 따라서 요청에 대한 상태(State)를 정해서 이벤트(Event) 발생할 때마다 처리를 수행하여 적은 수의 스레드(Thread)로도 효율적인 처리가 가능하며 스레드(Thread) 자체가 적다 보니 메모리도 적게 사용하며, 문맥 교환(Context switching) 비용이 적어 CPU 사용량도 낮은 장점이 있다.


이러한 차이는 점차 대용량 정적 파일 및 규모가 커지는 사이트의 증가와 맞물려 엔진엑스(Nginx)가 관심을 받고 점유율이 높아지는 현상을 만들어 냈는데, 이에 따라 아파치 소프트웨어 재단(Apache Software Foundation)에서는 아파치(Apache) 2.4.x 버전을 발표하며 Event MPM 방식을 추가해 빠른 응답속도와 적은 리소스를 사용을 지원하도록 개선했다. 그러나 본질적 구조에서 태생 자체가 다르다 보니 성능 면에서는 엔진엑스(Nginx)가 다소 강세를 보이고 있다.


다만, 엔진엑스(Nginx)는 아파치(Apache) 대비 사용되기 시작 한지가 오래되지 않았고 이에 따라 이에 대한 전문 인력이 부족한 편이며, 모듈도 아파치(Apache)에 대비하여 적은 편이라 확장이나 유지보수, 유연성 면에서는 다소 뒤처지는 면이 있다. 아파치(Apache)의 입장에서는 이러한 부분을 반대로 강점으로 내세울 수 있겠다.


그러나 결론적으로 자신의 여건에 맞는 서버를 선택해 사용하면 된다.

향후 개발/확장/관리 계획이 어떻게 되느냐, 그리고 비용측면에서 충분한 여유를 가지고 있느냐를 고려해 선택하면 된다.


각자 장단점이 있다. 무엇이 무조건 맞다고 정의할 수는 없다. 향후 개발을 어떻게 할 것인지, 관리 주체는 누구인지, 확장면이나 유연성, 성능 측면에서 어느것을 우위에 둘지에 따라 여건에 맞추어 선택하면 된다. 다만 개인적이며, 저사양, 저비용, 저인력으로 서버를 운영하고 관리하려 한다면 성능측면에서 엔진엑스(Nginx)를 조심스럽게 권장해본다.


Comments