1. 글을 쓰게 된 계기
WSGI 그리고 ASGI 아마 API를 만들어본 사람들은 많이 들어본 키워드일 것이다.
여기서 두 개를 비교하고 어떻게 정의하고
평소에 궁금했던 내용들에 대해서 정리해보고자 한다.
2. WSGI(Web Server Gateway Interface)가 뭐야?
Web server의 Request를 python application으로 보내주고 Response를 받아서 Web server로 보내주는 것이 WSGI이다.
2003년 파이썬 표준으로 WSGI가 나온 이후로 현재까지 사용되었으며,
WSGI Middleware는 WSGI의 구현체로 Request를 Flask, django와 같은 Web Framework에 연결하는
WSGI server 역할을 한다. (대표적인 예시로는 gunicorn이 있음)
WSGI는 Synchronous(동기)하게 작동하기에 동시에 많은 Request를 처리하는데 한계가 있다.
3. ASGI(Asynchronous Server Gateway Interface)가 뭐야?
WSGI와 비슷한 구조를 가지지만, 기본적으로 모든 요청을 Asynchronous(비동기)로 처리하는 것이 다르다.
WSGI가 Synchronous 하게 작동함으로써 발생하는 한계를 해결하기 위해
Uvicorn과 같은 ASGI가 나오게 된 것이다.
4. 질문과 답변
Q. Web server와 Web Application Server를 왜 구분하는 것인가?
다양한 로직 처리를 Web Application Server로 단순한 정적 처리를 Web server로 나누어 서버 부하를 감소시킨다.
(만약 정적 컨텐츠까지 WAS가 처리하면 부하가 커져서 처리속도가 느려질 수 있음)
그리고 SSL 처리를 Web Server로 분리하여 보안을 강화하며
자원 이용의 효율성과 유지 보수의 편리성을 위해 구분한다.
Q. Flask, django에서 WSGI compatible server 기능이 있는데 WSGI Middleware를 써야 하는가?
Flask, django에서 제공하는 것을 사용해도 된다.
하지만, 그들이 제공하는 WSGI compatible server는 개발을 목적으로 구현된 것으로
운영 환경의 트래픽을 감당하는데 적합하지 않을 수 있다.
Q. WSGI Middleware 없이 Nginx 같은 Web Server와 WAS를 연결해서 써도 되나요?
Flask, django 등 Web Framework의 경우 WSGI interface가 일부 구현된 기능을 제공하기 때문에
Nginx만 사용해도 가능하다.
하지만! Gunicorn, uWSGI를 이용하게 되면 멀티쓰레드를 지원하여 더 많은 Request를 처리할 수 있다.
Q. Gunicorn과 Uvicorn을 보통 같이 사용하던데 이유가 무엇인가요?
Gunicorn의 멀티프로세스/멀티스레드 관리 능력과 Uvicorn의 비동기 처리 효율성을 같이 활용하기 위함이다.
Gunicorn의 프로세스 관리는 자동으로 로드밸런싱을 수행해, 요청이 여러 프로세스에 균등하게 배치되고
Uvicorn 워커는 비동기로 고성능을 유지하면서 효율을 극대화할 수 있다.
'Python > API' 카테고리의 다른 글
Celery 란 무엇인가? (0) | 2024.04.04 |
---|---|
uvicorn 이란 무엇인가? (feat. ASGI) (0) | 2024.04.03 |
gunicorn은 무엇인가? (feat. WSGI) (1) | 2024.04.03 |
동일 API 호출에 대한 처리 방법(feat. asyncio) (0) | 2023.09.05 |
기존 database를 가져와서 ORM 만들기 (0) | 2022.12.11 |