Nginx와 apache가 무엇인지

Nginx, Apache의 개념


https://ithub.tistory.com/101

html, JS 같은 정적인 프론트엔드 컨텐츠들은 웹서버를 구축한다면 웹서버 선에서 요청을 정리할 수 있습니다.

하지만 정적인 컨텐츠말고도 당연히 동적인 컨텐츠를 처리하기 위한 구조가 항상 웹서버를 공부할 때 따라다니는데, 이것을 WAS(Web Application Server)라고 합니다.

웹서버는 정적인 컨텐츠를 제공하는 것 외에도 WAS구조에서 동적인 처리를 하는 컨테이너에게 요청을 넘겨주게 되며 처리가 끝나면 응답을 받아 다시 클라이언트로 전송하는 역할을 합니다

이때 대표적인 웹서버로 사용되는 것들이 APACHE와 NGINX입니다

Nginx와 Apache 중 뭘 쓸까

둘의 차이는 과거부터 천천히 알아보면 쉽습니다.

우선 과거의 버그가 많았던 초기의 웹서버 프로그램이 수정되고 개발된게 아파치입니다

Apache 처리 방식 (커넥션 기반)

아파치는 Multi-Process Module방식

⇒ 클라이언트로부터 하나의 요청이 들어오게되면 하나의 process를 생성해서 연결

⇒이러한 방식은 확장성면에서 큰 장점을 가짐

⇒ 하나의 요청만을 처리함으로써 동적인 처리도 가능

하지만 스마트폰이 등장하고 트래픽이 점점 많아지면서 일정 수준 이상에 연결 프로세스를 만들지 못하거나 혹은 처리가 매우 느려지는 현상이 발생했습니다.

장단점

Nginx의 등장

대규모 연결 처리를 위한 Nginx가 등장했는데 이때 Nginx는 Apache를 대체하는 프로그램이 아닌 Apache앞단에서 사용되며 Apache가 감당하기 힘들었던 대용량 트래픽(과도한 부하)에 대한 동시 연결을 지원하는 프로그램이었습니다.

이런 대규모 동시 연결을 제외하고도 Nginx는 앞서 얘기했던 웹서버로써 스스로 정적인 데이터들을 처리할 수 있었고 동시에 동적인 컨텐츠 요청들만 뒤로 넘기면서 웹컨테이너 에게 처리를 요청하고 받을 수 있었습니다.

Nginx 처리 방식(이벤트 기반)

이쯤되니 Apache와 비슷해보이지만 Nginx는 하나의 요청을 받고도 여러 개의 요청을 하나의 Worker process가 받을 수 있습니다.

(먼저 연결된 클라이언트에 요청이 없으면 Keep-Alive를 통해 연결은 끊지않고 추가적인 요청을 대기하면서 다른 클라이언트의 요청을 받음)

클라이언트에서 온 하나의 요청을 Event라고 하며 이 요청을 OS 커널이 큐 형식으로 worker process 에 하나씩 넣어서 순차적 처리, 이때 오래 걸리는 작업들은 따로 빼서 처리( blocking )

장단점

https://www.youtube.com/watch?v=6FAwAXXj5N0

https://hue9010.github.io/aws/nginx를-적용해-보자/

EC2 인스턴스에 Nginx를 구축해 보자 하나의 EC2 인스턴스에 Nginx와 WAS를 두는 구조를 실습 해보자 hue9010.github.io

https://www.youtube.com/watch?v=8IGgeaLlYW8