CGI와 FastCGI

외부 애플리케이션과 웹 서버(nginx, apache)를 연결할 때 사용하는 interface는 보통 CGI.

CGI는 Coomand Gateway Interface의 약자로 웹 서버와 외부 프로그램을 연결해주는 표준화된 프로토콜이다.

 

그러나 CGI는 클라이언트의 요청이 발생할 때마다 프로세스를 추가로 생성/삭제 하게 된다.

→ 성능저하

 

 

FastCGI는 몇 번의 요청이 들어와도 하나의 프로세스만을 가지고 처리하게 된다.

→ CGI에 비하여 오버헤드가 월등하게 감소

 

하지만 Python 에서는 이러한 WAS가 별도로 존재하지 않으며 그 대신 Python만의 Gateway Interface가 존재한다.

 

WSGI란?

Web Server Gateway Interface의 약자

CGI와 동일하게 웹 서버와 application 중간에 우치하는데, FastCGI와 동일하게 한 프로세스에서 모든 요청을 받는다.

WSGI는 nginx, apache에 내장 모듈로 제공하는 server-often hgih profile 방식, 그리고 python 코드로 작성된 Web App Server(gunicorn, cherrypy 등)이 있다.

Django에서는 wsgi를 위한 module인 wsgi.py를 제공하며 내부 구현 변경 없이 WSGI 서버를 자유롭게 선택할 수 있다.

장고의 내장 서버는 WSGI의 기능을 자체적으로 포함하고 있다 -> python manage.py runserver

ASGI

Python에서는 asyncio, coroutine과 같은 비동기 처리를 지원한다.

그러나 WSGI는 동기 함수 처리만을 지원하여 여러 작업을 동시에 처리하는 것에 한계가 있다.

가령 현대 웹 서비스에서는 웹 소켓 등을 사용한 실시간 채팅 서비스를 할 수 있는데, WSGI로는 이러한 서비스를 구현하는데 어려움이 있다.

따라서 ASGI가 사용된다.

ASGI는 기본적으로 요청을 비동기로 처리한다.

이러한 대표적인 ASGI Web App에는 univorn이 있다.

 

출처: https://blog.neonkid.xyz/249

BELATED ARTICLES

more