플라스크와 WSGI

Screen Shot 2021-03-02 at 2 42 04 PM

플라스크 문서를 살펴보다가 다음과 같은 문장을 보았다.

  • 플라스크는 Jinja 템플릿 엔진과 Werkzeug WSGI 툴킷에 의존하고 있다. 1

Screen Shot 2021-03-02 at 2 47 21 PM

Werkzeug가 무엇을 하는 툴인지 몰라서 검색을 해본 결과 다음과 같았다.

  • Werkzeug는 포괄적인 WSGI 웹 애플리케이션 라이브러리이다.
  • WSGI 응용 프로그램을 위한 단순한 유틸리티에서 시작하였지만, 현재는 가장 진보한 WSGI 유틸리티 라이브러가 되었다.
  • 플라스크는 Werkzeug를 감싸 WSGI의 세부사항을 처리하는 동시에 강력한 애플리케이션을 위한 더 많은 구조와 패턴을 제공한다. 2

Werkzeug는 다음을 포함하고 있다.

  • 브라우저에 있는 스택 트레이스와 코드를 검사할 수 있는 디버거를 포함한다.
  • 헤더, 쿼리 인자, 폼 데이터, 파일 및 쿠키와 상호 작용할 수 있는 요청 객체이다.

플라스크는 내부적으로 Werkzeug로 구현되어 있고, WerkzeugWSGI를 구현하는 라이브러리이다. 그렇다면 자연스럽게 WSGI가 무엇인지 궁금하였다.

Screen Shot 2021-03-03 at 5 09 08 PM

  • WSGI는 웹 서버 게이트웨이 인터페이스이다.
  • 웹 서버가 웹 애플리케이션과 통신하는 방법과 웹 애플리케이션을 연결하여 하나의 요청을 처리하는 방법을 설명하는 규격 입니다.
  • WSGIPEP 3333에 설명되어 있는 파이썬 표준이다.

문서의 양이 방대하므로 지금 모두 설명하는 것보다는 따로 나중에 관련된 페이지를 만들어서 공부를 해야겠다.

Screen Shot 2021-03-03 at 5 18 38 PM

  • 파이썬은 다양한 웹 애플리케이션 프레임워크가 있고 웹 프레임 워크의 선택이 사용가능한 웹 서버 선택을 제한할 수 있고 그 반대의 경우도 마찬가지이다.

  • 이와 대조적으로, 자바의 서블릿 API를 지원하는 웹 서버에서 자바 웹 애플리케이션 프레임워크로 작성된 애플리케이션을 실행할 수 있게 한다.

  • 프레임워크 선택과 웹 서버 선택을 분리함으로써, 사용자는 자신에게 맞는 조합을 선택할 수 있고, 프레임워크와 서버 개발자는 원하는 분야에 집중할 수 있다.

  • 따라서 이 PEP 문서는 웹 서버와 웹 애플리케이션 또는 프레임워크 사이의 단순하고 보편적인 인터페이스인 파이썬 웹 서버 게이트웨이 인터페이스를 제안하는 문서이다.

  • WSGI의 목표는 새로운 웹 프레임워크를 만드는 것이 아니라 기존 서버, 애플리케이션 또는 프레임워크의 쉬운 상호 연결을 촉진하는 것이다.

WSGI 개요

Screen Shot 2021-03-03 at 5 31 36 PM

  • WSGI 인터페이스는 서버, 게이트웨이 측면과 애플리케이션, 프레임워크 측면이 있다.

  • 서버 측에서 응용 프로그램이 제공하는 Callable 객체를 호출한다.

  • 이 객체의 제공 방법은 서버 또는 게이트웨이에 따라서 다르다.

  • 순수한 서버/게이트웨이 및 애플리케이션/프레임워크 외에도, 이 규격 양쪽을 모두 구현하는 “중간 소프트웨어” 컴포넌트를 만들 수 있다.

  • 이 규격에서 Callable 이라는 용어는 __call__ 메서드를 가지는 함수, 메서드, 클래스, 그리고 인스턴스를 말한다.

  • 필요에 따라 적절한 구현 기술을 선택하는 것은 Callable을 구현하는 서버, 게이트웨이 또는 애플리케이션에 달려 있다.

  • 반대로 Callable을 호출하는 서버, 게이트웨이 또는 응용 프로그램은 Callable 타입에 종속되지 않아야 한다.

결론

  • 웹 서버와 프레임워크를 분리하기 위해서 생겨났다.
  • WSGI는 웹 서버와 애플리케이션이 통신하는 방법과 요청을 처리하는 방법을 설명한 규약이다.

참고 문헌

>> Home