Python WSGI란?

2025. 2. 3. 13:31·Python

안녕하세요. 오늘은 파이썬의 웹 서버 인터페이스인 WSGI에 대해서 알아보도록 하겠습니다.

WSGI

WSGI(Web Server Gateway Interface) 정의

 

WSGI — WSGI.org

Contributing Found a typo? Or some awkward wording? Want to add a link to a presentation, a tutorial or a new (or old and missing) WSGI-related tool? Fixing a dead link? WSGI.org is open-source and hosted on github, contributions are encouraged and appreci

wsgi.readthedocs.io

WSGI는 웹 서버와 웹 애플리케이션이 어떻게 통신해야 하는지 정의해 놓은 명세서입니다. 웹 서버와 웹 애플리케이션은 이 명세에 맞게 개발되어야 합니다.

  • 웹 서버: Socket을 직접 사용하며 HTTP 통신하는 서버
  • 웹 어플리케이션: Django, FastAPI 등 웹 프레임워크들 같이 요청에 따라 응답을 내려주는 애플리케이션

WSGI 애플리케이션

WSGI 자체는 명세서이므로, 바로 사용할 수 없습니다. 직접 개발하거나 이미 완성된 구현체(서버-Gunicorn, 애플리케이션-Django 등)를 사용해야 합니다.
간단하게나마 직접 WSGI 애플리케이션을 만들어보도록 하겠습니다.

def simple_app(environ: dict, start_response: Callable):
    status = '200 OK'
    headers = [('Content-type', 'text/plain; charset=utf-8')]
    start_response(status, headers)
    return [b"Hello, WSGI World!"]

# 혹은
class SimpleApp:
    def __call__(environ: dict, start_response: Callable):
        status = '200 OK'
        headers = [('Content-type', 'text/plain; charset=utf-8')]
        start_response(status, headers)
        return [b"Hello, WSGI World!"]

WSGI 서버는 HTTP 요청 정보를 가지고 있는 environ 변수를 WSGI 애플리케이션에 제공합니다. 이 변수에는 query string, body, header, url, method와 같은 정보가 담겨있습니다. WSGI 애플리케이션은 이 정보를 보고 어떠한 응답을 할지 결정하고 반환합니다.
응답 반환은 어떠한 방식으로 이루어질까요? WSGI 서버가 제공하는 start_response 변수와 자체 return 값으로 이루어집니다. start_response 변수는 콜백 함수입니다. 이 함수를 통해서 HTTP status와 header를 전달합니다. 또한 body는 return 값으로 전달합니다. 이때 byte가 담긴 리스트로 반환해야 합니다.

장점

  • 꽤 단순한 인터페이스
  • 단순함으로 인한 안정성
  • 많은 웹 프레임워크들이 지원함

단점

  • 동기식으로 작동하기 때문에 File, Network I/O 작업이 발생할 경우 전체 응답 시간이 느려짐
  • 해당 문제를 해결하기 위해 멀티 프로세싱을 이용해야 함, 다만 멀티 프로세싱도 많은 자원을 소모함

'Python' 카테고리의 다른 글

Python에서 멀티 스레드를 사용하지 않는 이유(Java와 비교, GIL)  (0) 2025.02.03
Python WSGI 서버 직접 만들어보기  (0) 2025.02.03
Python 추상클래스 만들기  (0) 2025.02.03
'Python' 카테고리의 다른 글
  • Python에서 멀티 스레드를 사용하지 않는 이유(Java와 비교, GIL)
  • Python WSGI 서버 직접 만들어보기
  • Python 추상클래스 만들기
우띵이
우띵이
코딩해요~
  • 우띵이
    ChODING
    우띵이
  • 전체
    오늘
    어제
    • 분류 전체보기 (11)
      • JVM (6)
        • Java (4)
        • Kotlin (2)
      • Python (4)
      • JavaScript (0)
      • Computer Science (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    computer science
    Virtual Thread
    hash
    CORS
    CS
    java
    kotlin
    synchronize
    Metaclass
    jdk21
    Thread
    binary
    Python
    Spring
    concurrency
    Monitor
    WSGI
    complement
    spring security
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
우띵이
Python WSGI란?
상단으로

티스토리툴바