Nginx와 Apache

JaeGu Jeong·2022년 11월 13일
0

Apache 탄생

1995년에 출시한 웹서버 소프트웨어. 기존의 httpd라는 웹서버의 버그를 수정 및 구조를 변경 하여 출시.

Apache 구조

클라이언트가 connection을 요청하면 "새로운 프로세스"를 생성한다. 여러개의 connection요청이오면 각 요청마다 새로운 프로세스를 생성한다. 이 방식은 유닉스계열os의 네트워크연결 모델을 그대로 적용한 것이다.
단점인 새로운 프로세스를 fork할 때 프로그램이 느려지므로 사전에 프로세스를 미리 만들어서 요청이 들어오면 바로 사용 가능하도록 설계되어 있다. 만약 준비된 프로세스가 모두 소진되면 새로운 프로세스를 생성한다.

Apache 장점

모든 연결요청에 프로세스를 생성하여 처리하는 구조는 모듈을 활용한 확장성이 용이했다. 즉 cgi를 처리하는데 편리하였다.

Apache 단점

1999년부터 PC의 보급률이 높아지면서 한 서버에 연결요청도 폭증하였다. 이 수많은 연결을 유지하기위한 아파치서버의 생성가능한 프로세스의 수를 넘어서게 되었다. 1만개의 연결이 넘어가면 아파치서버는 프로세스를 생성하지 못하게되고, 클라이언트는 접속을 못하게되는데 이를 C10K문제라고 한다.

C10K 문제

하드웨어는 문제되지않았다. 이미 웹정도면 차고 넘치는 스펙이었기 때문에 소프트웨어의 문제이다. 아파치에서 연결마다, 새로운 확장프로그램마다 프로세스를 생성하는 구조는 빠르게 서버의 RAM을 고갈시키는 구조이다. 추가로 1만개 클라이언트 기준 1만개의 프로세스를 서버가 처리해야 하기 때문에 기하급수적인 context스위칭이 일어나면서 cpu과부하가 쉬웠다.

Nginx 등장

2004년 아파치의 C10K를 극복하고자 출시된 웹서버. 출시당시 아파치 서버와 같이 사용하는 용도로 만들어졌다.

Nginx 구조

초창기 엔진엑스는 아파치서버보다 앞에서 클라이언트를 상대하여 연결유지를 대신하였다. 이는 아파치의 C10K를 해결 할 수 있었다.
엔진엑스는 마스터프로세스밑에 자식프로세스로 "워커프로세스"를 만들어 비동기-Non Bloking 방식이 적용되어 있다.

Nginx 장점

멀티플렉싱을 활용해 하나의 프로세스에서 여러개의 클라이언트와의 통신을 처리하면서 자원의 효율을 최대로 활용한다. 내부적으로 커널큐를 사용하여 작업의 순서도 보장하며, 이 과정에서 매우 큰 파일 쓰기가 발생하면 해당 작업만 따로 쓰레드풀에 넣어 처리한다. 이처럼 프로세스의 효율을 극한으로 사용하는 이벤트구조의 웹서버가 Nginx이다.

Nginx 단점

아파치보다 상대적으로 확정성이 약하다. 서버개발자가 기능추가 중에 마스터프로세스가 종료되면 서비스중인 워커프로세스를 사용하지 못하는 경우가 생길 수 있다.

Nginx + Apache (로드밸런서)

nginx는 동적으로 설정을 바꿔도 실행이 가능하도록 설계되어 있다. 이를 로드밸런서로도 사용 할 수 있다. 실행중인 nginx를 중간에 설정을 바꾸면 기존 워커서버는 유지하면서 새로운 설정된 워커서버를 생성한다. 그리고 기존 워커서버의 이벤트큐가 끝나면 프로세스를 종료한다.

웹서버 점유율 1위는 Nginx

2008년부터 스마트폰이 빠르게 보급되면서 서버에 대한 클라이언트의 요청이 더욱 폭증했다. 다중연결에 강력한 nginx는 이러한 웹 시장에서 선호되고있다.

profile
BackEnd Developer

0개의 댓글