프로그래밍
WSGI(Web Server Gateway Interface)란 ?
에그티비
2025. 4. 7. 20:40
WSGI(Web Server Gateway Interface)는 Python 웹 애플리케이션과 웹 서버 사이의 표준 인터페이스입니다.
웹 서버(예: Nginx, Apache)는 클라이언트 요청을 받고, WSGI를 통해 해당 요청을 Python 애플리케이션에 전달합니다.
애플리케이션은 요청을 처리한 후, 다시 WSGI를 통해 응답을 서버로 돌려보냅니다.
1. 왜 WSGI가 중요한가?
Python에는 다양한 웹 프레임워크(Flask, Django 등)가 있고, 웹 서버도 여러 종류가 있습니다. 이 둘 사이의 호환성을 유지하려면 공통의 약속이 필요합니다. WSGI는 이 약속, 즉 "프로토콜" 역할을 합니다.
2. 구성 요소
① 웹 서버 (예: Nginx, Apache, Gunicorn, uWSGI 등)
- 실제 클라이언트 요청을 수신.
- 정적 파일을 직접 제공할 수도 있고, 동적 요청은 WSGI 서버에 전달.
② WSGI 서버 (예: Gunicorn, uWSGI, mod_wsgi 등)
- WSGI 프로토콜을 지원하는 Python 앱 서버.
- 요청을 Python 애플리케이션에 전달하고, 응답을 받아 다시 웹 서버에 전달.
③ WSGI 애플리케이션 (예: Flask, Django 등)
- Python 코드로 작성된 로직.
- 요청을 처리하고 HTTP 응답을 생성.
3. WSGI 동작 방식 (요약 흐름)
- 클라이언트가 브라우저에서 요청을 보냄.
- 웹 서버(Nginx 등)가 요청을 받고, WSGI 서버(Gunicorn 등)로 전달.
- WSGI 서버는 Python 애플리케이션을 실행하고 요청을 전달.
- 애플리케이션이 요청을 처리한 후, 응답을 반환.
- WSGI 서버가 응답을 웹 서버에 넘김.
- 웹 서버가 응답을 클라이언트로 전달.
4. 실전 예시 (Flask + Gunicorn + Nginx)
gunicorn app:app --bind 127.0.0.1:8000
app:app
은app.py
파일 내의 Flask 인스턴스를 의미.- Gunicorn이 WSGI 서버 역할을 하며, 내부에서 Flask 애플리케이션을 실행.
- Nginx는 클라이언트 요청을 받아서 Gunicorn으로 프록시 전송.
5. 관련 주요 WSGI 서버들
서버명 | 특징 |
---|---|
Gunicorn | Python 전용. 가볍고 많이 사용됨. |
uWSGI | 다양한 언어 지원, 설정이 복잡하지만 유연함. |
mod_wsgi | Apache용 모듈. Apache 환경에 적합. |
Daphne | ASGI 기반. Django Channels에서 사용됨. |
6. WSGI vs ASGI
- WSGI는 동기 방식으로 작동. 대부분의 전통적인 웹앱에 적합.
- ASGI는 비동기 처리를 지원하며 WebSocket과 같은 실시간 기능을 제공. (예: FastAPI, Django Channels)
요약
- WSGI는 Python 웹 서버와 애플리케이션 사이의 표준 인터페이스다.
- Flask나 Django와 같은 프레임워크는 WSGI 인터페이스를 지원하며, Gunicorn 같은 서버를 통해 배포된다.
- 확장성과 호환성을 위해 꼭 필요한 구조이며, 배포할 때는 WSGI 서버와 웹 서버를 함께 설정해야 한다.