[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 서버 사용 시 다음과 같은 장점이 있다.
- Load Balancing : 특정 서버에 트래픽이 몰려 과부화가 발생하는 것을 막는다.
- 보안 우수 : 웹 서버 1, 2…의 IP를 노출하지 않기 때문이다.
- 캐시 사용 가능 : Reverse Proxy에 캐시 데이터를 저장해두고 활용할 수 있다.
- SSL 암호화 도움 : 구조 자체가 암호 및 복호화에 적합
참고
[WEB] 웹서버, 앱서버, WAS, APP이란?
헷갈리는 용어인 웹서버, 앱서버, WAS, 앱에 대하여 알아봅니다.
chrisjune-13837.medium.com
Nginx와 Gunicorn 둘 중 하나만 써도 될까?
Flask나 Django로 만든 파이썬 앱을 배포할 때, 보통 Nginx와 Gunicorn과 자기 앱을 연결해서 배포하는 게 정석처럼 여겨
velog.io
CGI 기술의 등장 배경과 WAS로의 발전
초창기 웹(WWW)은 웹 서버에 미리 만든 웹 페이지(정적 페이지)를 가공 없이 단순히 보여주는 것이 목적이었다. 그러나 많은 웹 사용자들은 미리 저장된 정보를 보는 것 뿐만 아니라, 유저의 이름
bentist.tistory.com