on
wsgi란?
wsgi란?
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
WSGI에 대한 자세한 동작은 아래 유튜브 영상을 참고하는 것을 추천한다.
(4) WSGI for Web Developers (Ryan Wilson-Perkin) - YouTube
참조
Werkzeug Tutorial — Werkzeug Documentation (2.0.x) (palletsprojects.com)
Web Server Gateway Interface - Wikipedia
공유하기 글 요소 저작자표시
from http://june-coder.tistory.com/53 by ccl(A) rewrite - 2021-08-02 19:26:38