[Web] Web Server, CGI, WAS

정지용·2021년 12월 22일
4
post-thumbnail

Web Server

흔히 우리가 알고있는 웹 서버에는 Apache HTTP Server, Nginx가 있다. 하지만 우리는 웹 서버가 무엇인지 정확하게 알고 있진 못하다. 그렇다면 웹 서버는 뭘까?

웹 서버(Web Server)는 HTTP를 통해 웹 브라우저와 같은 클라이언트에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)와 같은 정적인 파일을 전송해주는 서비스 프로그램을 말한다.

웹 서버는 HTTP 프로토콜을 기반으로, 정해진 포트에서 클라이언트의 요청을 받아들이고 서비스한다. WAS를 거치지 않고 바로 자원을 제공하여 성능이 우수하다.

그림 1. Web Server를 설명함.

정적 페이지 (Static Page)

클라이언트로부터 경로를 받고, Web Server는 그 경로에 일치하는 파일을 반환한다. 즉 항상 동일한 페이지를 반환한다.

이를 정적 파일이라고 하며 정적 페이지는 정적 파일 중에서도 HTML 파일을 말한다.

CGI (Common Gateway Interface)

정적인 웹 생태계에 동적인 페이지를 제공하기 위하여 개발된 기술이다. 동적인 페이지는 C, PHP등의 임의의 프로그램을 통하여 생성된다.

정확히는 웹 서버와 임의의 프로그램 사이에서 정보를 주고받는 방법이나 규약이다. CGI를 위한 표준을 지키기만 한다면, 어떠한 언어로 작성되었든 CGI 스크립트라고 불릴 수 있다.

그림 2. CGI를 설명함.

위 사진은 CGI를 표현한 그림이다.

CGI의 특징

CGI는 사용하기에 간편하나, CGI 프로그램 (스크립트)가 실행 불가한 상태이면 서버에서 스크립트를 실행시켜 결과를 사용자에게 보내는 것이 아니라 스크립트 자체를 다운로드하게 한다.

웹 서버와 통신하기 위해 CGI를 사용하는 프로그램은 매 리퀘스트마다 프로그램이 재시작되어야 한다. 즉, CGI는 부하가 크다.

그림 3. CGI와 프로세스를 설명함.

또한 하나의 요청마다 하나의 프로세스가 생성된다. 연결이 끝나면 프로세스는 종료되지만, 순간적으로 많은 수의 요청을 감당하기엔 부하가 너무 크다는 문제점이 존재한다.

확장 CGI

위에서 언급한 것처럼 CGI는 성능이 좋지 못하다. 즉 처리량에 한계점이 명확하다.
확장 CGI는 하나의 프로세스 안에서 여러 개의 스레드를 생성하여 클라이언트의 요청을 처리한다. 여러 개의 프로세스를 사용하는 방식에서 이와 같이 변경하여 단점을 보완하였다.

이러한 확장 CGI에는 Servlet, JSP 등이 있다.

그림 4. 확장 CGI를 설명함.

WAS란? (Web Application Server)

WAS는 웹 서버와 다르게 동적인 페이지를 제공할 수 있는 서버다.
HTTP를 통해 클라이언트에 애플리케이션을 작동시켜주는 미들웨어라고도 한다.

그림 5. Web Application Server를 설명함.

WAS는 웹 서버와 웹 컨테이너로 이루어져 있다.

1) WAS는 요청을 받으면, 2) 그 요청을 웹 컨테이너에게 전송한다. 3) 웹 컨테이너는 정적인 페이지를 생성하여 웹 서버에게 전달한다. 4) 웹 서버는 응답으로 웹 컨테이너에게 받은 정적인 페이지를 클라이언트에게 전송한다.

웹 컨테이너란?

웹 컨테이너는 JSP, Servlet과 같은 Web Application의 컨테이너다. 컨테이너는 런타임과 같은 소프트웨어를 말한다. 즉 WAS는 JSP, Servlet의 런타임이라고 볼 수 있다.

최근에 자주 사용하는 Node.js와 EJS도 WAS로 예시를 들 수 있겠다. 웹 컨테이너는 Node.js고, 웹 컨테이너가 EJS 파일을 해석하여 정적인 HTML 파일을 만들어내게 된다.

정리

  1. Web Server는 정적인 웹 페이지와 자원을 제공하는 프로그램.
  2. CGI는 동적인 웹 페이지를 제공하기 위한 프로그램.
  3. 초기 CGI는 성능이 좋지 못해 확장 CGI를 사용하게 됨.
  4. WAS는 CGI에서 더 확장되어 웹 서버와 웹 컨테이너를 합친 구조로 되어있음.
profile
전설의 시작

0개의 댓글