Why does django need WSGI?(WSGI, ASGI 개념 간단정리)
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이 있다.
'Django' 카테고리의 다른 글
Django로 알아보는 여러가지 암호화 알고리즘 (0) | 2023.03.18 |
---|---|
[Django] 장고로 프로젝트 시작하기 (0) | 2022.03.18 |