Victoree's Blog

WSGI와 ASGI 살펴보기 본문

Python

WSGI와 ASGI 살펴보기

victoree 2023. 6. 23. 14:07
728x90

Django나 FastAPI를 사용할 때, 슬며시 지나갔던 개념들 중에 WSGI와 ASGI에 대해 간단히 정리해보자.

https://breezymind.com/start-asgi-framework 에서 가지고 온 이미지입니다 :)

1. WSGI

WSGI는 web server gateway interface로 파이썬 스크립트가 웹서버와 통신하기 위해 만들어진 인터페이스로 CGI의 일종이다.
CGI는 common gateway interface의 약자로, 서버와 어플리케이션간에 데이터를 주고받는 방식, 규율이라고 생각하면 된다.

WSGI 의 예시로, gunicorn이나 uWSGI가 있는데, 이 녀석들은 Nginx나 Tomcat과 같은 웹서버의 http request를 해석(파싱)하여 어플리케이션단에 보내는 역할을 한다. 보통 uWSGI보다 gunicorn이 성능이 더 좋아서 많이 채택된다. 

Tomcat이나 nginx 같은 Web Server는 정적파일이나 페이지를 렌더링하는 용도로 사용되고, 동적인 양방향간의 통신을 원하는 경우 웹 어플리케이션에 요청사항을 전달한다. 또한 요청 포트별로 다른 어플리케이션으로 보내는 로드밸런싱을 제공하거나 ssl과 같은 암복호화를 처리함으로써 보안 역할을 하기도 한다.

 2. ASGI

ASGI는 asynchronous sever gate way로 비동기 방식이 가능한 파이썬 웹 서버 프레임워크와 어플리케이션 간의 인터페이스를 제공한다. ASGI의 예로는 uvicorn이 있다.  참고로 Django 3.0부터 ASGI를 제공한다고 한다 bb

위 그림을 보면 WSGI와 ASGI가 동시에 그려져 있는데, 그 이유는 gunicorn은 프로세스 매니저로서 동작하기 때문이다. 프로세스 매니저로서 Master 프로세스를 띄우고 Worker 프로세스로, 단일 프로세스로 실행하는 uvicorn (uvicorn 에는 Gunicorn-호환 worker class 가 존재한다) 프로세스를 여러 개를 미리 띄워 요청을 처리하는 구조로 구성된다.

728x90
Comments