일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 러스트
- guru
- RabbitMQ
- 백준
- Fast API
- 알고리즘
- function
- Algorithm
- dockerfile
- Kubernetes
- Refactoring
- rust
- 파이썬
- Container
- 전문가를 위한 파이썬
- 블록체인
- Thread
- AWS
- Ethereum
- docker
- BAEKJOON
- 이더리움
- Network
- 코어 이더리움 프로그래밍
- fluent python
- 동시성
- BlockChain
- IMAGE
- Python
- 플랫폼
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
WSGI와 ASGI 살펴보기 본문
Django나 FastAPI를 사용할 때, 슬며시 지나갔던 개념들 중에 WSGI와 ASGI에 대해 간단히 정리해보자.
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 가 존재한다) 프로세스를 여러 개를 미리 띄워 요청을 처리하는 구조로 구성된다.