WSGI(Web Server Gateway Interface)
파이썬 웹 애플리케이션과 웹 서버 간의 표준 인터페이스를 정의하는 규약이다.
WSGI는 웹 서버와 웹 애플리케이션 사이에서 중개자 역할을 하며, 파이썬 웹 개발에서 중요한 역할을 담당한다.
웹 서버와 파이썬 애플리케이션의 관계를 생각해보면,
웹 서버(예: Apache, Nginx)는 HTTP 요청을 받아서 처리해야 하고, 파이썬 애플리케이션은 비즈니스 로직을 실행해야 한다. 이 둘을 연결하는 중간자 역할로 WSGI가 등장한다.
WSGI는 2003년 PEP 333에서 처음 제안되었고, 현재는 PEP 3333에서 파이썬 3를 위해 업데이트되었다.
WSGI는 웹 서버와 파이썬 웹 애플리케이션 사이의 표준 인터페이스를 정의한다.
표준화된 인터페이스가 있기 때문에, 어떤 WSGI 서버든 어떤 WSGI 애플리케이션이든 서로 호환되어 동작할 수 있다.
WSGI(Web Server Gateway Interface)는 파이썬 웹 애플리케이션과 웹 서버 간의 표준 인터페이스를 정의하는 규약이다.
WSGI는 웹 서버와 웹 애플리케이션 사이에서 중개자 역할을 하며, 파이썬 웹 개발에서 중요한 역할을 담당한다.
주요 특징
- 표준화된 인터페이스:
WSGI는 PEP 3333에 정의된 파이썬의 표준 인터페이스로, 웹 서버와 웹 애플리케이션 간의 상호 운용성을 보장한다. - 동기적 처리:
WSGI는 기본적으로 동기 방식을 지원한다.
요청이 들어오면 해당 요청이 완전히 처리될 때까지 다른 요청을 처리할 수 없다. - 미들웨어 지원:
WSGI는 서버와 애플리케이션 사이에 위치하여 요청을 가로채고 수정하거나, 애플리케이션의 응답을 조작할 수 있는 미들웨어를 지원한다.
장점
- 프레임워크 독립성: Django, Flask, Pyramid 등 다양한 파이썬 웹 프레임워크를 사용할 수 있다.
- 서버 독립성: Gunicorn, uWSGI, Nginx 등 다양한 서버에서 동일한 애플리케이션을 실행할 수 있다.
- 안정성: 단순한 인터페이스로 인해 안정적인 운영이 가능하다.
- 메모리 효율성: WSGI는 메모리에 한 번만 적재되므로, CGI보다 메모리 사용이 적고 더 많은 요청을 처리할 수 있다.
동작 방식
WSGI 애플리케이션은 다음과 같은 구조를 가진다:
environ
: 웹 서버가 제공하는 환경 변수와 요청 정보가 담긴 딕셔너리start_response
: 상태 코드와 헤더를 웹 서버에 전달하는 콜백 함수
한계
- 동기적 처리:
WSGI는 동기적 요청 처리를 기반으로 하기 때문에, 실시간 웹 소켓 통신이나 장기 연결과 같은 비동기 작업에 적합하지 않는다. - 성능 제한:
동시성이 중요한 애플리케이션에서는 성능이 제한될 수 있다.