개발/이론

CGI, WSGI, WAS 개념 정리

p-code 2024. 3. 1. 13:17

CGI, WSGI, WAS란?

 

개념을 설명하기에 앞서 전체적인 구조도와 여기서 말하는 Web Server의 정의는 아래와 같다.

 

Web Server

여기서 웹 서버는 정적 웹 서버를 의미한다. 클라이언트(브라우저 등)의 요청으로 정적 리소스(html, 이미지 등)를 가공하지 않고 그대로 반환하는 역할을 하는 것이 정적 웹 서버이다.

 

웹 서버 종류 : Apache, Nginx

 

참고로 동적 웹 서버는 정적 웹 서버에 웹 애플리케이션과 데이터베이스가 추가된 개념으로 위 구조도의 Server를 지칭한다. 웹 애플리케이션과 데이터베이스의 데이터를 이용하여 리소스를 가공해서 클라이언트에 제공한다.

 

 

CGI(Common Gateway Interface)

정적인 웹 서버에 데이터를 가공처리할 수 있는 어플리케이션을 연결해 주는 다리 역할을 하는 기술이다. 이때 실행되는 애플리케이션을 CGI프로그램이라고 한다.

 

  • 서버에서 동적인 처리를 할 수 있도록 개발된 최초의 기술이다.
  • 요청이 들어올 때마다 프로세스를 생성(fork)하여 처리하기 때문에 성능(메모리의 비효율적인 사용, 처리 속도 등)이 좋지 않다.
  • 대부분의 웹서버가 CGI를 지원한다.
  • 종류로는 Java Servlet, mod perl, mod php, FastCGI 등이 있다.

 

WSGI(Web Server Gateway Interface)

웹 서버와 파이썬 웹 어플리케이션(파이썬 스크립트) 사이의 middleware이다. CGI의 디자인 패턴에 기반한 업그레이드된 인터페이스이다.(위스키라고 한다)

 

  • 웹 어플리케이션의 처리 전 후로 웹서비스의 공통 기능(Authentication, Routing, Session, Cookie, Error Page 표시 등)을 수행한다.(Middleware 역할)
  • CGI처럼 모든 요청에 대한 프로세스를 생성하지 않으므로 성능상 CGI보다 효율이 좋다.
  • WSGI 자체적으로 웹 서버 역할을 하여 웹 서버가 없이도 동작한다. 그러나 보안 이슈 및 성능 문제로 웹 서버(주로  Nginx)를 함께 사용한다.
  • 종류로는 uWSGI, Gunicorn, Werkzeug 등이 있으며, 사용되는 대표적인 웹 애플리케이션은 Django, Flask가 있다.

 

WAS(Web Application Server)

정적인 웹 콘텐츠 뿐만 아니라 동적인 웹 콘텐츠(주로 JSP, Servlet)를 처리하기 위한  애플리케이션 서버이다.

 

 

최상단의 전체 구조도에서는 WAS가 마치 Web Server와 CGI/GSGI를 합쳐 놓은 것 같이 보여서 그림을 따로 가져왔다. (Web Application 영역까지 포함해야 할 것으로 보인다)

 

  • 이전에는 WAS가 Web Container만을 지칭했지만 Web Server 기능도 포함하게 되면서 함께 지칭한다.(상황에 따라 Web Container만을 말할 때도 있다.)
  • WAS에 웹 서버가 포함되어 있고 성능상 별도의 웹 서버와 큰 차이는 없지만, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성 등으로 인해 규모가 있는 프로젝트에서는 따로 웹 서버를 둔다.
  • 종류로는 Tomcat(Apache tomcat), JBoss, Jeus, Web Sphere  등이 있다.
  • 이전에는 Tomcat에 웹 서버 기능이 없었지만 Tomcat 5.5버전부터는 Tomcat에 웹 서버 기능이 추가되어 Apache Tomcat이라고도 부른다.

Referrence