Gunicorn 과 Uvicorn

이상원·2025년 5월 15일

사내에서 Fast API 프레임 워크를 기반으로 작업하는 중 해당 코드를 실행시켜주는 서버에 대한 궁금증이 생겨 정리를 한 글입니다.

ASGI와 WSGI의 차이점

ASGI(Asynchronous Server Gateway Interface)와 WSGI(Web Server Gateway Interface)는 웹 서버와 Python 웹 애플리케이션/프레임워크 간의 인터페이스를 정의하는 규격입니다. 두 규격의 주요 차이점은 다음과 같습니다

1. 동기 vs 비동기

WSGI (Web Server Gateway Interface)

동기 처리 방식: 요청은 순차적으로 하나씩 처리됨
블로킹 I/O: 한 요청이 처리되는 동안 다른 요청은 대기
단일 HTTP 요청/응답만 지원: 웹소켓이나 장기 연결 같은 프로토콜 지원 불가
프로세스 수 만큼 처리 가능 : 동시 요청 많을 시쓰레드/프로세ㅌ스 개수 만큼 처리가 가능함

ASGI (Asynchronous Server Gateway Interface)

비동기 처리 방식: 여러 요청을 동시에 처리 가능
논블로킹 I/O: I/O 작업 중에도 다른 요청 처리 가능
다양한 프로토콜 지원: 다양한 프로토콜을 제공하여 실시간/고동시성 서비스에 최적 HTTP, WebSocket, HTTP/2 등 지원

2. 특징 및 차이점

WSGI

CPU 바운드 작업에 유리: 복잡한 계산이 많은 작업(이미지 처리나 복잡한 계산이 많을 시 유리)
단순 요청 처리: 간단한 웹사이트나 API
제한된 동시성: 요청당 하나의 스레드/프로세스 필요

ASGI

I/O 바운드 작업에 유리: 비동기 코루틴을 사용 I/O 작업 중에도 다른 작업이 가능. 데이터베이스 쿼리, API 호출 등
높은 동시성: 단일 워커로 수십~ 수백개 요청의 처리가 가능함. 적은 수의 워커로 많은 요청 처리 가능
실시간 애플리케이션: 채팅, 알림, 스트리밍 서비스에 적합

3. 성능 차이 (작성 예정)

이런 특징으로 인해 최근엔 Python 웹개발에선 ASGI 가 파이썬 프레임 워크의 표준 서버 스펙으로 등극하는 중 멀티 파드 사용시 단일 워커 한계를 극복 가능함

3. 주요 서버 및 프레임워크

WSGI 서버/프레임워크

서버: Gunicorn, uWSGI, mod_wsgi
프레임워크: Django(3.0 이전), Flask, Pyramid

ASGI 서버/프레임워크

서버: Uvicorn, Daphne, Hypercorn
프레임워크: FastAPI, Django(3.0 이후), Starlette, Quart

참고한 블로그 등...

https://snurf.tistory.com/entry/FastAPI-Gunicorn%EA%B3%BC-Uvicorn%EC%9D%84-%ED%95%A8%EA%BB%98-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0

profile
개발하는 코린이

0개의 댓글