본문 바로가기
WebApp

[WebApp] CGI vs. WSGI

by ds31x 2023. 7. 31.

CGI (Common Gateway Interface)

1993년 정적인 페이지를 처리하던 web server에

  • 사용자와의 interaction을 통한 동적인 페이지 생성 기능이 가능한
  • 외부 프로그램(오늘날 web application으로 불림)을 추가하기 위해 제안됨.

 

다시 말하면, CGI는 Web server와 Web application (이전엔 CGI program, CGI application이라 불림, 외부 프로그램 또는 web application) 간의 통신 방식이다.

  • Programming language나 platform 등에 independent 이라는 장점을 가지지만
  • Web server가 application(앞서 말한 외부 프로그램)을 호출할 때마다 새로운 process를 생성하기 때문에 성능이 낮다
  • 더구나 여러 요청을 동시에 처리할 수도 없다는 단점을 가짐.

 

1993년에 개발된 방식이라 확장성이나 보안성이 떨어진다는 단점도 있다.

(쉽게 말해서 구식이다. 대학생 1-2학년 때 실험실에서 세미나하던 주제로 CGI도 있었던 기억이 난다...==;;)


WSGI (Web Server Gateway Interface)

2001년에 CGI를 대처하기 위해 제안된 방식으로

  • Web application이 동작하는 web application server와
  • web server 간의
  • 통신 방식임.

CGI가 web server와 통신하려고 하는 외부 프로그램의 동작 방식에 대한 specification이었던 것처럼

WSGI도 web server와 통신하는 web application server의 동작방식에 대한 specification에 해당한다.

 

WSGI는

  • CGI와 달리 새로운 process를 생성하지 않고
  • 다중 요청 처리가 가능하며
  • 성능과 보안성이  우수하며
  • 훨씬 높은 확장성을 가짐.

 

오늘날 web server는

  • 앞 단에서 load balancing이나 static page 등의 처리를 담당하고,
  • 동적인 페이지에 대한 요청이 올 경우, WSGI를 통해 Web server에 해당 요청에 대한 호출을 수행한다.
  • 이는 Web server에서 구동 중인 Web Application에 전달되어 처리되고
  • 다시 web server를 통해 요청한 client에 처리 결과 데이터가 전달된다.

WSGI Server는

  • Web Server와 Web Application 사이에서 위치하는 점에 유래하여
  • middle-ware라고도 불리며,
  • 또는 Web application을 구동하고 있는 server라는 뜻에서
  • Application Server 또는 Web Application Server (WAS)라고 불린다.

CGI와 마찬가지로 PHP, Puby, Perl, Python 등의 다양한 프로그래밍 언어들에서 WSGI는 사용할 수 있다.

(사실 인터페이스를 정의하고 있는 specification이므로 어떤 프로그래밍 언어로도 WSGI 서버를 만들 수 있음.)

 

Python에서 유명한 Web Applications는

  • flask나
  • django등으로 구현되며,

이들을 web server (NGINX와 Apache 등등)와 연동시켜주는 WSGI server 로는

  • uwsgi (C로 구현됨),
  • gunicorn (python으로 구현됨) 등이 2023.07 현재 많이 사용된다.

 

초기에는

  • uWSGI가 보다 빠르고 확장성 측면에서 우수하여 많이 사용되었고
  • gunicorn의 경우 보다 편리한 사용성을 장점으로 내세웠으나 성능이 떨어졌음.

 

하지만, 현재는 gunicorn의 성능이 매우 좋아져서 사용률에서 uWSGI를 넘어서고 있다.

관련 sites