사내에서 Fast API 프레임 워크를 기반으로 작업하는 중 해당 코드를 실행시켜주는 서버에 대한 궁금증이 생겨 정리를 한 글입니다.
ASGI(Asynchronous Server Gateway Interface)와 WSGI(Web Server Gateway Interface)는 웹 서버와 Python 웹 애플리케이션/프레임워크 간의 인터페이스를 정의하는 규격입니다. 두 규격의 주요 차이점은 다음과 같습니다
동기 처리 방식: 요청은 순차적으로 하나씩 처리됨
블로킹 I/O: 한 요청이 처리되는 동안 다른 요청은 대기
단일 HTTP 요청/응답만 지원: 웹소켓이나 장기 연결 같은 프로토콜 지원 불가
프로세스 수 만큼 처리 가능 : 동시 요청 많을 시쓰레드/프로세ㅌ스 개수 만큼 처리가 가능함
비동기 처리 방식: 여러 요청을 동시에 처리 가능
논블로킹 I/O: I/O 작업 중에도 다른 요청 처리 가능
다양한 프로토콜 지원: 다양한 프로토콜을 제공하여 실시간/고동시성 서비스에 최적 HTTP, WebSocket, HTTP/2 등 지원
CPU 바운드 작업에 유리: 복잡한 계산이 많은 작업(이미지 처리나 복잡한 계산이 많을 시 유리)
단순 요청 처리: 간단한 웹사이트나 API
제한된 동시성: 요청당 하나의 스레드/프로세스 필요
I/O 바운드 작업에 유리: 비동기 코루틴을 사용 I/O 작업 중에도 다른 작업이 가능. 데이터베이스 쿼리, API 호출 등
높은 동시성: 단일 워커로 수십~ 수백개 요청의 처리가 가능함. 적은 수의 워커로 많은 요청 처리 가능
실시간 애플리케이션: 채팅, 알림, 스트리밍 서비스에 적합
이런 특징으로 인해 최근엔 Python 웹개발에선 ASGI 가 파이썬 프레임 워크의 표준 서버 스펙으로 등극하는 중 멀티 파드 사용시 단일 워커 한계를 극복 가능함
서버: Gunicorn, uWSGI, mod_wsgi
프레임워크: Django(3.0 이전), Flask, Pyramid
서버: Uvicorn, Daphne, Hypercorn
프레임워크: FastAPI, Django(3.0 이후), Starlette, Quart
참고한 블로그 등...