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
'WebApp' 카테고리의 다른 글
[HTTPS] certbot을 통한 nginx에서 HTTPS 설정. (0) | 2023.09.10 |
---|---|
[HTTPS] Certification 갱신 : certbot renew (0) | 2023.09.10 |
[HTTPS] certbot 사용법 : chain 삭제 (0) | 2023.09.10 |
[Nginx] 설치 및 설정 추가. (0) | 2023.09.08 |
[WebApp] NginX 설정 관련 . (0) | 2023.08.01 |