이번 면접을 보면서 받은 질문중에 서버에 관련된 질문을 받았습니다.
" 프로젝트에 Nginx를 사용했는데 Nginx는 무엇입니까?"
"Apache도 사용하셨는데 Apache와의 차이점은 무엇이죠?"
나는 아쉽게도 이 질문에 대한 답을 하지 못했습니다.
그래서 서로 비교하여 다시한번 정리 해보려 합니다.
Request가 올 때마다 Connection을 형성하기위해서 process를 생성시킵니다.
이작업은 복잡하기 때문에 미리 process를 만들어 놓는 PREFORK방식을 사용합니다.
그래서 새로운 클라이언트로부터 Request가 오면 미리 만들어 놓은 process를 사용합니다.
이러한 구조는 개발자에게 빠른 확장성을 지니게 하였고 다양한 모듈을 사용할수 있도록 했습니다.
이러한 장점으로 당시 Apache의 웹서버 순위는 1위를 달성합니다.
인터넷 트래픽이 점점 증가함에 따라서 Request또한 증가하여 문제점이 발생합니다.
더 이상 Connection을 생성하지 못하는 문제점이 발생했습니다.
커넥션은 여러 절차를 거쳐 만들어지기 때문에 오래 유지하여 여러 Request를 처리합니다.
그렇기 때문에 클라이언트가 늘어나고 connection 수가 10000단위를 넘어서는 순간 connection은 만들어지지 않는 문제점이 생깁니다.
프로세스가 많아지면 처리해야할 작업이 많기때문에 메모리가 부족해집니다.
아파치는 모듈을 쉽게 확장할 수 있기때문에 무겁습니다.
많은 커넥션이 일을 하기되면 CPU 부하가 UP 됩니다.
수많은 동시 커넥션을 감당하기에는 Apache서버의 구조는 부적합 했습니다.
2002년 탄생
Apache 서버를 보완 하기 위해서 새로운 구조로 만들어졌으며, 함께 사용합니다.
정적파일에 대한 요청을 Nginx에서 처리하고, 동적 파일에대한 요청은 apache에서 처리합니다.
Master process : 설정파일을 읽고 worker proces를 생성
Worker process : 만들어질 때 listen 소켓을 배정받고 connection이 형성되면 Request를 받아서 처리합니다.
처리하면 끝이 아니라 다른 Connection을 받아서 다시 Request를 처리하는데 이것을 Event라고 합니다.(Queue 형태로 작업합니다.)
process를 미리 만들어 놓는 apache보다 유연하게 메모리 사용이 가능합니다.
작업이 무겁다고 생각하면 수행하기 위해서 따로 Thread Pool을 만들어서 처리합니다.
cpu의 코어 수만큼 worker process를 생성하기 때문에 지정된 프로세스에서 일합니다.
그러나 2008년 전까지는 apache의 점유율이 훨씬 높은것을 볼 수 있습니다.
출처 : NetCraft survey
https://www.keycdn.com/support/nginx-vs-apache
https://www.youtube.com/watch?v=6FAwAXXj5N0&t=628s&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9CTech