플라스크와 WSGI
플라스크 문서를 살펴보다가 다음과 같은 문장을 보았다.
- 플라스크는
Jinja
템플릿 엔진과Werkzeug WSGI
툴킷에 의존하고 있다. 1
Werkzeug
가 무엇을 하는 툴인지 몰라서 검색을 해본 결과 다음과 같았다.
Werkzeug
는 포괄적인WSGI
웹 애플리케이션 라이브러리이다.WSGI
응용 프로그램을 위한 단순한 유틸리티에서 시작하였지만, 현재는 가장 진보한WSGI
유틸리티 라이브러가 되었다.- 플라스크는
Werkzeug
를 감싸WSGI
의 세부사항을 처리하는 동시에 강력한 애플리케이션을 위한 더 많은 구조와 패턴을 제공한다. 2
Werkzeug
는 다음을 포함하고 있다.
- 브라우저에 있는 스택 트레이스와 코드를 검사할 수 있는 디버거를 포함한다.
- 헤더, 쿼리 인자, 폼 데이터, 파일 및 쿠키와 상호 작용할 수 있는 요청 객체이다.
플라스크는 내부적으로 Werkzeug
로 구현되어 있고, Werkzeug
는 WSGI
를 구현하는 라이브러리이다.
그렇다면 자연스럽게 WSGI
가 무엇인지 궁금하였다.
WSGI
는 웹 서버 게이트웨이 인터페이스이다.- 웹 서버가 웹 애플리케이션과 통신하는 방법과 웹 애플리케이션을 연결하여 하나의 요청을 처리하는 방법을 설명하는 규격 입니다.
WSGI
는 PEP 3333에 설명되어 있는 파이썬 표준이다.
문서의 양이 방대하므로 지금 모두 설명하는 것보다는 따로 나중에 관련된 페이지를 만들어서 공부를 해야겠다.
-
파이썬은 다양한 웹 애플리케이션 프레임워크가 있고 웹 프레임 워크의 선택이 사용가능한 웹 서버 선택을 제한할 수 있고 그 반대의 경우도 마찬가지이다.
-
이와 대조적으로, 자바의 서블릿 API를 지원하는 웹 서버에서 자바 웹 애플리케이션 프레임워크로 작성된 애플리케이션을 실행할 수 있게 한다.
-
프레임워크 선택과 웹 서버 선택을 분리함으로써, 사용자는 자신에게 맞는 조합을 선택할 수 있고, 프레임워크와 서버 개발자는 원하는 분야에 집중할 수 있다.
-
따라서 이
PEP
문서는 웹 서버와 웹 애플리케이션 또는 프레임워크 사이의 단순하고 보편적인 인터페이스인 파이썬 웹 서버 게이트웨이 인터페이스를 제안하는 문서이다. -
WSGI
의 목표는 새로운 웹 프레임워크를 만드는 것이 아니라 기존 서버, 애플리케이션 또는 프레임워크의 쉬운 상호 연결을 촉진하는 것이다.
WSGI 개요
-
WSGI 인터페이스는 서버, 게이트웨이 측면과 애플리케이션, 프레임워크 측면이 있다.
-
서버 측에서 응용 프로그램이 제공하는
Callable
객체를 호출한다. -
이 객체의 제공 방법은 서버 또는 게이트웨이에 따라서 다르다.
-
순수한 서버/게이트웨이 및 애플리케이션/프레임워크 외에도, 이 규격 양쪽을 모두 구현하는 “중간 소프트웨어” 컴포넌트를 만들 수 있다.
-
이 규격에서
Callable
이라는 용어는__call__
메서드를 가지는 함수, 메서드, 클래스, 그리고 인스턴스를 말한다. -
필요에 따라 적절한 구현 기술을 선택하는 것은
Callable
을 구현하는 서버, 게이트웨이 또는 애플리케이션에 달려 있다. -
반대로
Callable
을 호출하는 서버, 게이트웨이 또는 응용 프로그램은Callable
타입에 종속되지 않아야 한다.
결론
- 웹 서버와 프레임워크를 분리하기 위해서 생겨났다.
- WSGI는 웹 서버와 애플리케이션이 통신하는 방법과 요청을 처리하는 방법을 설명한 규약이다.