개발자가 되고 싶은 준개발자

wsgi란? 본문

IT/백앤드

wsgi란?

준개발자 2021. 8. 2. 19:21

Nginx, Wsgi에 대한 정확한 개념을 모르겠어서 이번 기회에 정리해 보고자 한다.


Wsgi(발음: 위즈기)가 도대체 무엇인가? Wsgi(web server gateway interface)web application(ex. Django, Flask...)과 web server(ex. Apache, Nginx...) 간의 통신 규약으로 파이썬 언어로 작성한다.

 

웹 서버와 웹 어플리케이션이란 무엇인가?

  • web server
    • 사용자가 브라우저에 URL을 입력하면, 브라우저는 웹 서버에 웹페이지를 보내달라는 요청을 한다.
    • 웹 서버는 HTTP 요청을 파싱한 후, 정적 컨텐츠(HTML, CSS, PNG...)을 저장하고 있다가 브라우저에게 보내준다. (대표적으로 Apache, Nginx가 있다.) 
      • 브라우저와 웹 서버는 HTTP(HyperText Transfer Protocol)로 통신한다. 기본적으로 클라이언트와 서버 간에 요청과 응답이 1:1 구조를 띠고 있어 한 화면을 구성하는 콘텐츠가 100개라면 요청과 응답이 100번 이뤄지게 된다.
    • 브라우저의 요청을 가장 먼저 받는 서버로 정적 컨텐츠 응답 이외에도 로드발란싱, 캐싱 등 다양한 기능을 할 수 있다.
  • web application: 웹 어플리케이션 서버(WAS)는 웹 서버에서 처리하지 못하는 동적 컨텐츠를 처리해 웹 서버에게 응답한다. 주로 비즈니스 로직을 수행한다. (예. Django, Flask)

 

왜 웹 서버와 웹 어플리케이션은 별도의 서버로 나누어져 있나?

웹 어플리케이션 서버가 등장하기 이전에는 웹 서버에서 동적 컨텐츠를 처리하기 위해서 자체적으로 process를 fork해서 어플리케이션 코드를 수행했다. 그러나 매 요청마다 process를 fork하게 되면 요청에 대한 응답이 느릴 수 밖에 없다. 이를 방지하기 위해서 웹 어플리케이션 서버를 따로 두고, 동적인 요청은 웹 어플리케이션 서버로 보내서 처리하게 되었다.

웹 어플리케이션 서버를 별도로 두다 보니, 웹 서버와 웹 어플리케이션 서버 간의 통신하는 규칙이 필요했고 그래서 WSGI가 나오게 되었다.  WSGI는 여러 종류의 웹 서버(Nginx, Apache)와 여러 종류의 웹 어플리케이션(Django, Flask)이 서로 종속성이 없이 모두 통신이 가능하도록 하기 위해서 만들어졌다. 즉 WSGI 덕분에 web server와 web application은 종류에 상관 없이 중간에 WSGI layer를 두면 통신할 수 있다.

(WSGI에 대한 공식 문서는 PEP 3333에 있다. 이 문서의 요약에서 'This document specifies a proposed standard interface between web servers and Python web applications or frameworks, to promote web application portability across a variety of web servers.'라고 말하고 있다.)

 

WSGI는 어떻게 구현하는가?

WSGI는 Gunicorn, uWSGI와 같은 WSGI middleware에서 제공하기 때문에 직접 구현하지 않아도 된다. WSGI middleware웹 서버가 브라우저로부터 요청을 받으면 웹 서버는 WSGI middleware에 요청을 전달하고, 미들웨어는 이 요청을 어플리케이션에 전달한다. 

출처:  https://www.vndeveloper.com

 

(Flask는 이미 WSGI application이다. Flask를 실행하면 사실은 Werkzeug의 developent WSGI Server에서 Flask app을 WSGI Callable로 전달하는 것이다. 하지만 어디까지나 개발용 서버이기 때문에 production 환경에서는 더 안전하고 효율적인 Gunicorn이나 uWSGI로 대체해야 한다.)

 

Gunicorn에서 제공하는 기능들?

  • 디버깅 모드: 코드가 바뀌면 서버를 재시동해준다.
  • SSL을 지원한다.
  • Worker Process를 여러 개 띠울 수 있다.

자세한 기능들은 아래 공식 문서에 나와 있다.

Settings — Gunicorn 20.1.0 documentation

 

WSGI에 대한 자세한 동작은 아래 유튜브 영상을 참고하는 것을 추천한다.

(4) WSGI for Web Developers (Ryan Wilson-Perkin) - YouTube


참조

Werkzeug Tutorial — Werkzeug Documentation (2.0.x) (palletsprojects.com)

 

Werkzeug Tutorial — Werkzeug Documentation (2.0.x)

Werkzeug Tutorial Welcome to the Werkzeug tutorial in which we will create a TinyURL clone that stores URLs in a redis instance. The libraries we will use for this applications are Jinja 2 for the templates, redis for the database layer and, of course, Wer

werkzeug.palletsprojects.com

Web Server Gateway Interface - Wikipedia

 

Web Server Gateway Interface - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Calling convention for web servers to forward requests to web applications written in Python "WSGI" redirects here. For the radio station in Springfield, Tennessee, see WSGI (AM). The

en.wikipedia.org