nginx와 apache 모두 web server로서 사용되기 위해 만들어진 웹 서버 프로그램이다. 그렇기에 web server와 was에 대해서 간단히 이해할 필요가 있다.
Http 프로토콜을 기반으로 하며, 클라이언트의 요청을 서비스하는 기능을 담당한다
요청에 따라 2가지 기능 중 적절히 수행을 담당할 수 있다.
웹 서버로는 Apache server와 Nginx 등이 있다.
DB 조회나 다양한 요청에 대해 동적으로 응답하기 위해 만들어진 서버이다.
동적이란 말은 동일한 요청에도 DB에 저장되어 있는 상태에 따라 다른 응답을 할 수 있다고 이해하자
Web Server의 기능을 분리해서 처리하는 목적으로 구성된 개념으로 이해할 수 있다.
주요 기능은 다음과 같다.
대표적은 WAS로는 Tomcat, JBoss, Jeus 등이 있다.
Apache Software Foundation에서 만든 웹 서버 프로그램이다. 오랫동안 사용되었고 레퍼런스가 풍부한 장점이 있다.
apache 서버는 기본적으로 요청당 프로세스 또는 쓰레드를 생성하여 처리한다. 멀티쓰레드 동기 방식으로 처리하는데 이 방식의 좋은 점은 동시성을 통해 사용자의 요청을 동시에 처리하는 데 뛰어나지만 쓰레드 또는 프로세스가 많이 생성될 경우 Context Switching으로 인한 성능 저하가 일어난다.
Apache 서버의 경우 동시 커넥션이 많아질 경우 더 이상 커넥션(프로세스 또는 쓰레드)를 생성하지 못하는 상황이 발생한다. 이를 C10K 문제라고 한다.
C10K: (connection 10,000)
Apache에서 요청을 처리하는 방식은 크게 2가지이다.
PreFork MPM(Multi-Process Module)
Worker MPM
Event-Driven 구조의 웹 서버 소프트웨어이다. 한 개 또는 고정된 프로세스만 생성하고, 여러 개의 Connection을 모두 Event-Handler를 통해 비동기 방식으로 처리하고 이 덕분에 Apache Server와 달리 Context Switching 비용 문제가 크지 않기 때문에 CPU를 효율적으로 사용하면서 수많은 요청을 처리할 수 있다. C10K 문제에 대해서 특히 효과적이다.
Event Handler를 이용해 다양한 요청에 대해서 하나의 코어의 하나의 쓰레드로 효과적으로 처리 가능. 쓰레드를 복사하고나 스위칭할 일이 요청마다 일어나지 않기 때문에 많은 요청에 대해서 효과적으로 처리 가능