해당 내용도 면접에서 언급되었던 부분이므로 정리하고 넘어간다.
사실 아파치와 nginx(엔진엑스 라고 읽는다)의 차이점에 대해 찾아본 결과 무엇인가를 정리 할만큼의 차이는 찾지 못했다. 두 웹서버의 태생이 다르기 때문에 차이점이 존재했으나, 기술의 발달과 서로 벤치마킹한 결과(라고 추측) 두 웹서버에서 제공하는 기능은 대부분 비슷하다.
하지만, 많은 사람들이 nginx의 경우 일반적인 상황에서 아파치 보다 조금더 많은 커넥션을 처리한다고 하는데, 그 이유는 아파치의 경우 커넥션 당 하나의 스레드와 프로세스를 생성하지만, nginx의 경우 listener 가 request를 처리하기 때문에 각 request 마다 스레드와 프로세스가 복제 되지 않는다. 이 때문에 메모리적인 측면에서 nginx는 System Resource를 적게 처리한다는 장점이 있다.
트렌드 자체가 아파치에서 nginx로 넘어가고 있지만, 그럼에도 불구하고 태생적인 부분(아파치의 경우 CGI를 통한 웹서비스를 위해 생겨남, nginx의 경우 Http Proxy의 목적이 강함)을 이해하고 상황에 맞게 사용하는것이 중요할 듯 하다.
2021.4.20
Open Source 에 대한 글을 읽는 중 nginx 관련 글이 있어 추가 작성합니다.
nginx 의 시작은 C10k problem 에서 시작합니다.
web service 의 성장과 함께 web server에서 처리해야하는 http connection 이 non-linear 하게 증가하게 됩니다.
기존의 아파치 서버로는 하나의 connection 당 하나의 스레드를 할당하여 connection 이 늘어 날때마다 CPU와 MEM 사용률이 늘어나게 됩니다.
이런 상황에서 C10k problem 라는 문제가 등장하는데 1만개의 socket을 동시에 연다면 과거에는 하드웨어적인 문제로 불가능했지만 이제는 소프트웨어의 구조적 문제로 1만개의 socket을 동시에 처리할 수 없다는 문제가 등장합니다
nginx 는 아파치와 다른 구조로 C10K 문제를 해결해나가게 됩니다.
결국 nginx 는 늘어가는 connection 에 대응하고 Concurrency 문제를 해결하는데 중점을 두고 개발된 웹 서버라는 내용이 맞습니다.
참고 : http://blog.naver.com/PostView.nhn?blogId=tmondev&logNo=220737182315, http://knot.tistory.com/88
http://aosabook.org/en/nginx.html