Why Nginx? (vs Apache)

Gyus·2022년 6월 2일
3

서버구축 프로젝트

목록 보기
9/11

설명 배경


이번 면접을 보면서 받은 질문중에 서버에 관련된 질문을 받았습니다.
" 프로젝트에 Nginx를 사용했는데 Nginx는 무엇입니까?"
"Apache도 사용하셨는데 Apache와의 차이점은 무엇이죠?"
나는 아쉽게도 이 질문에 대한 답을 하지 못했습니다.
그래서 서로 비교하여 다시한번 정리 해보려 합니다.

Apache vs Nginx

Apache

1995년 탄생

  • 당시 사용하는 서버 NCSA HTTPd의 많은 문제를 해결하기위해 등장합니다.

  • Request가 올 때마다 Connection을 형성하기위해서 process를 생성시킵니다.

  • 이작업은 복잡하기 때문에 미리 process를 만들어 놓는 PREFORK방식을 사용합니다.

  • 그래서 새로운 클라이언트로부터 Request가 오면 미리 만들어 놓은 process를 사용합니다.

  • 이러한 구조는 개발자에게 빠른 확장성을 지니게 하였고 다양한 모듈을 사용할수 있도록 했습니다.

  • 이러한 장점으로 당시 Apache의 웹서버 순위는 1위를 달성합니다.

1999년 C10K 문제점 등장

  • 인터넷 트래픽이 점점 증가함에 따라서 Request또한 증가하여 문제점이 발생합니다.

  • 더 이상 Connection을 생성하지 못하는 문제점이 발생했습니다.

  • 이를 C10K (Connection 10000 Problem) 이라고 합니다.
  • 커넥션은 여러 절차를 거쳐 만들어지기 때문에 오래 유지하여 여러 Request를 처리합니다.

  • 그렇기 때문에 클라이언트가 늘어나고 connection 수가 10000단위를 넘어서는 순간 connection은 만들어지지 않는 문제점이 생깁니다.

  • 프로세스가 많아지면 처리해야할 작업이 많기때문에 메모리가 부족해집니다.

  • 아파치는 모듈을 쉽게 확장할 수 있기때문에 무겁습니다.

  • 많은 커넥션이 일을 하기되면 CPU 부하가 UP 됩니다.

수많은 동시 커넥션을 감당하기에는 Apache서버의 구조는 부적합 했습니다.

Nginx

  • 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

2007 스마트폰의 등장

  • 스마트폰이 등장하면서 많은 클라이언트가 서버에 Request를 보내기위해서 connection을 형성해야했습니다.
  • 동시 connection을 처리하기위해서 nginx를 사용하게 되었습니다.
  • 2008년 이후로 Apache의 점유율은 하락세인 반면 nignx는 서서히 상승하는 것을 볼 수 있습니다.

    출처 : NetCraft survey

정리

  • nginx는 많은 Request에 응답하기 위해서 이벤트 기반 구조의 웹서버로, 아파치의 동시 커넥션 부하 문제를 해결하기 위해 개발 되었으며 옵션을 최소화 하여 보안에 유리한 특징이 있습니다.
  • apache는 오래되었기 때문에 다양한 OS를 지원하는 유연한 호환성을 갖고 있으며, 60개 이상의 다양한 기능과 모듈을 지원하는 확장성을 가지고있어 현재 개발중인 애플리케이션의 기능에 따라 선택하는게 좋습니다.

Reference

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

profile
푸로구래머

0개의 댓글