[Web] Web Server(웹 서버)와 CGI, Web Application Server(WAS, 앱 서버) 알아보기
-
Web Server(웹 서버)
클라이언트로부터 HTTP 요청을 받아 Static pages(정적 페이지)를 제공하거나, Dynamic Pages(동적 페이지) 요청을 WAS에 전달 하는 서버 및 프로그램을 의미한다. 서버가 설치된 PC 자체를 가리키는 말이기도 하다.
예시) Apache, Nginx
Common Gateway Interface(CGI)
Web Server(웹 서버)와 Application Program 사이 정보를 주고 받는 프로토콜이다. CGI를 통해 웹 서버가 Dynamic Pages(동적 페이지) 구성을 할 수 있다. 프로토콜이기 때문에 어떤 언어로도 작성될 수 있다.
CGI는 클라이언트 요청을 처리 하기 위해 매번 Process(프로세스)를 새로 생성한다. 따라서 많은 요청이 발생할 경우 메모리 사용량이 커지는 문제가 발생한다.
CGI 문제점 보완 → 처리 프로세스 상주
요청마다 프로세스를 새로 생성하기 때문에 메모리 사용량이 커지는 것이 CGI의 문제였다. 이를 해결하기 위해 웹 서버에 Interpreter(인터프리터) 프로세스를 상주 시켜 성능을 개선했다.
Web Application Server(WAS, 앱 서버)
웹 서버와 달리 Dynamic Pages(동적 페이지)를 전달해줄 수 있는 서버 및 프로그램을 의미한다. WAS는 CGI 프로토콜을 활용해 Application 사이 통신으로 동적 페이지를 제공한다. 따라서 WAS = Web Server + CGI 이다. 다만 일반적으로 WAS를 얘기할 때는 Web Server(CGI) + Application 까지 포함된 개념을 뜻한다.
WSGI : Python 전용 CGI 중 하나
왜 WAS랑 웹 서버 함께 사용?!
위 그림을 보면 웹 서버(Nginx)와 WAS(WSGI)가 함께 존재하는 것을 확인할 수 있다. 왜 굳이 서버를 2개나 쓰냐 하면, 웹 서버(Nginx)를 Reverse Proxy 서버로서 사용할 수 있기 때문이다. Reverse Proxy 서버 사용 시 다음과 같은 장점이 있다.