#32 WSGI

#32 WSGI

지금까지는 django 서버를 구동하기 위해 python manage.py runserver 를 실행하여 django 의 내장 서버를

구동하는 방식을 사용했다. 그러나 이 내장서버는 기능도 단순하고 대량 요청과 동시 요청을 효율적으로 처리하지

못하기 때문에 운영 환경에 적합하지 못하다. 즉, 개발은 내장서버로 하더라도 실제로 배포하여 운영할 때는 다른

서버를 사용할 필요가 있는 것이다.

1. 웹 서버

웹 서버는 웹 브라우저로부터 요청을 받아 이를 처리하여 결과를 브라우저에게 보내준다. 대표적인 웹 서버로

아파치(Apache) 와 엔진엑스(Nginx) 가 있다. 이 프로젝트에서는 Nginx 를 웹 서버로 사용하기로 한다.

2. WSGI(Web Server Gateway Interface) 서버

브라우저가 웹서버에 요청한 것이 정적 페이지(static page)라면 단순히 서버내에 존재하는 요청에 대응하는 페이지를

브라우저에 보내주면 간단히 처리할 수 있다. 하지만 동적 페이지(dynamic page)라면 얘기가 조금 복잡해진다.

동적 페이지를 처리하기 위해서는 개발에 사용한 언어에 따라 여러 프로그래밍 언어의 코드를 실행할 필요가 있다.

pybo 의 경우는 파이썬 코드를 실행해야 동적 페이지에 대한 요청을 처리할 수 있을 것이다. 개발환경에서 사용했던

django 내장서버에는 파이썬 코드를 실행할 수 있는 기능이 내장되어있었다. 하지만 Nginx 나 Apache 같은 일반적인

웹서버들에는 그런 기능은 존재하지 않는다. 그렇기 때문에 대신 동적 페이지를 처리해줄 WSGI 서버가 필요하다.

정리하자면, Nginx, Apache 등의 웹 서버가 브라우저로부터 동적 페이지에 대한 요청을 받으면 웹 서버는

Gunicorn, uwsgi 등의 WSGI 서버를 호출하여 그 처리를 맡긴다. 그리고 WSGI 서버가 django, Flask 등의

WSGI 애플리케이션을 호출하면 WSGI 애플리케이션이 실제로 코드를 실행하여 그 결과를 반환하고 WSGI 서버가

처리 결과를 웹 서버가 처리할 수 있는 형태로 변환하여 반환하면 웹 서버는 이를 웹 페이지의 형태로 브라우저에게

반환한다.

Pybo에서 사용할 WSGI 서버는 Gunicorn 이며 WSGI 애플리케이션은 당연히 지금까지 사용한 django 이다.

from http://scala0114.tistory.com/121 by ccl(A) rewrite - 2021-10-15 18:26:03