WSGI는 Web Server Gateway Interface의 약자입니다. 이름만 봐서는 범용적인 기술처럼 보이지만 파이썬에서 사용되는 개념입니다.
앞에서 CGI의 가장 큰 단점은 요청이 들어올 때마다 새로운 프로세스를 생성한다는 점인데요. 이런 단점을 보완하기 위해서 고안된 개념입니다.
앞서서 설명한 CGI의 경우에는 요청에 대한 정보를 환경 변수나 STDIN 등으로 처리했지만 WSGI에서는 Callable object, 함수나 객체로 처리합니다.
서버에서 Callable object를 통해서 요청에 대한 정보와 Callback 함수를 전달하면 애플리케이션은 이 요청을 처리하고 Callback 함수를 실행합니다.
이런 인터페이스를 구현하는 서버나 어플리케이션을 WSGI compatible 하다고 하는데요, 그 중 특히 어플리케이션의 경우에는 WSGI application이라고 합니다.
또 이 중간에서 인증이나 쿠키 등을 관리하는 역할을 하는 것을 WSGI Middleware라고 하는데요, 이 또한 WSGI application의 일종입니다. 여기에는 흔히 사용하는 gunicorn 등이 포함됩니다.
이런 WSGI의 경우에는 비동기적인 요청 처리에 단점이 있었습니다.
하나의 동기적인 callable이 요청을 받아 응답을 리턴하는 방식이었는데, 이런 방식은 길게 유지되어야 하는 연결 - long-poll HTTP나 웹 소켓에는 적합하지 않았습니다.
ASGI는 이를 개선하기 위해 만들어졌습니다.
ASGI 공식 설명을 보면 “ASGI는 WSGI의 정신적 계승자입니다.
파이썬 웹 서버, 프레임워크, 어플리케이션 사이에 비동기적인 표준 인터페이스를 제공합니다.
WSGI가 파이썬 앱에 대한 동기성에 대한 표준을 제공했다면 ASGI는 동기성과 비동기성 모두에 대한 표준을 제공합니다”라고 되어 있는데요.
ASGI는 곧 WSGI에 대한 호환성을 가지면서 비동기적인 요청을 처리할 수 있는 인터페이스입니다.
ASGI 서버로는 보통 Uvicorn 등을 많이 사용합니다.