프로그래밍

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 동작 방식 (요약 흐름)

  1. 클라이언트가 브라우저에서 요청을 보냄.
  2. 웹 서버(Nginx 등)가 요청을 받고, WSGI 서버(Gunicorn 등)로 전달.
  3. WSGI 서버는 Python 애플리케이션을 실행하고 요청을 전달.
  4. 애플리케이션이 요청을 처리한 후, 응답을 반환.
  5. WSGI 서버가 응답을 웹 서버에 넘김.
  6. 웹 서버가 응답을 클라이언트로 전달.

4. 실전 예시 (Flask + Gunicorn + Nginx)

gunicorn app:app --bind 127.0.0.1:8000
  • app:appapp.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 서버와 웹 서버를 함께 설정해야 한다.