최근 ml 모델 서빙에 관한 관심이 늘어나면서 가볍고 빠른 프레임워크인 FastAPI가 관심받기 시작하였다. 회사에서는 flask를 사용해서 어떤 차이가 있는지 궁금하였고, 차이점을 공부하다가 wsgi 와 asgi에 대해 알게 되어 자세히 알아볼 겸 글을 남기게 되었다.
WEB SERVER, WEB Application SERVER를 구분하는 이유
- 다양한 로직 처리를 WEB Application SERVER로 단순한 정적처리를 WEB SERVER로 나누어 서버 부하 감소를 시킬 수 있습니다.
- SSL 처리를 WEB SERVER 로 분리하여 보안강화가 가능합니다.
- 자원 이용의 효율화, 유지 보수 편의성을 위해 구분합니다.
CGI, WAS 차이
- 동일한 요청이 많은 경우 CGI는 모든 요청에 대해 모두 실행하지만, WEB Application SERVER는 한번만 실행하므로 WAS가 더 효과적임
WEB SERVER의 요청을 Python Application으로 보내주고 요청을 받아서 WEB SERVER로 보내주는 Web Server Gateway Interface 라 부릅니다.
WEB SERVER의 요청을 Callable Object를 통해 Application에 전달하고 Callable Object는 Functiond이나 Object의 형태로 HTTP 요청에 대한 정보(Method, URL, data)를 Callback 함수 정보를 전달합니다.
2003년 파이썬 표준으로 WSGI가 나온 이후 현재까지 사용 중입니다.
WSGI Middleware는 WSGI의 구현체로 요청을 Flask, Django와 같은 Web Framework에 연결하는 WSGI 서버의 역할을 함. (gunicorn, uWSGI, Werkzeug 등이 있음)
WSGI는 Synchronous(동기)하게 작동하기에 동시에 많은 요청을 처리하는 데 한계가 있음 (Celery를 이용하여 성능 향상이 가능합니다.)
Flask, Django에서 WSGI compatible server 기능이 있는데 WSGI Middleware를 써야할까?
- Flask, Django만 사용해도 상관없지만,해당 프레임 워크의 WSGI compatible server는 개발을 목적으로 구현된 것이기 때문에 운영 환경의 트래픽을 감당하는데 적합하지 않을 수 있습니다.
WSGI Middleware 없이 Nginx 같은 Web Server를 써야하는가?
- Flask/Django 같은 Web Framework의 경우 WSGI interface가 일부 구현된 compatible server 기능을 제공하고 있기 때문에 Nginx만 사용해도 됩니다.
- Gunicorn/uWSGI을 이용하는 경우 멀티쓰레드를 지원하여 더 만흥ㄴ 요청을 처리할 수 있습니다.