Django: Server

Seoyul Kim·2020년 8월 16일
0

Django

목록 보기
12/12
  • django app과 서버는 독립적이며 django app을 돌리는 방법은 여러가지가 있는데, python manage.py runserver는 서버를 돌리기 위한 여러 방법 중 한가지이다.

gunicorn

pip install gunicorn
gunicorn -b :8000 djangogirls.wsgi:application
  • UNIX에서 사용하기 위해 만들어졌으며, Python WSGI HTTP Server이다.

  • python wsgi(Web Server Gateway Interface)로 WEB Server(Nginx)로부터 서버사이드 요청을 받으면 wsgi(Gunicorn)을 통해 서버 어플리케이션(django)로 전달하는 역할을 한다.

  • wsgi는 멀티 쓰레드를 만들 수 있도록 하여 request 요청이 많아지더라도 효울적으로 저리하므로 production 환경에서 사용한다.

  • 상대적으로 빠르고 가벼우며 사용이 용이하며 의존성이 없고, python 설정이 쉽다.

  • HTTP proxy server로 Nginx를 쓰길 권장한다. localhost 8000번을 사용하는데 Nginx는 reverse proxy server를 이용한다.

WSGI

  • wsgi는 CGI(Common Gateway Interface)의 일종으로, web이 이제 막 시작했을 때 CGI는 수많은 언어에서 문제 없이 작동한다는 이유로 사용량이 증가했다. 하지만 CGI는 너무 느리고 제한사항도 많고, python app에서는 CGI, mod_python, Fast CGI 등등 만을 사용했다.이때 wsgi는 프레임워크의 웹서버로, route web에서는 표준 인터페이스로 개발되었다.

  • WSGI는 Nginx나 Apache 같은 server–often high-profile 웹 서버와
    python script로 짜여진 web app 두가지 부류가 있다.

  • server는 web app과 그에 연관되있는 정보, callback 함수등을 실행한다. request는 app 단에서 실행되며, response는 callback함수를 이용해서 server로 되보내진다.

  • server와 web app사이에 한개 이상의 wsgi middleware가 존재할 때 middleware는 app objects에 직접적으로 request를 보내거나, load balancing, 등의 역할을 위해 이용된다.

  • python framework인 django, cheerypy, flask, web2py 에서 WSGI를 지원하는 것이 그 예다.

  • 프레임 워크들은 스스로 수 많은 request들을 실행하고 최고의 방법으로 처리할수 있도록 설계되지 않았지만 wsgi server는 많은 request들을 다룰 수 있도록 설계되었다.

uwsgi

pip install uwsgi
uwsgi --http :8000 --module djangogirls.wsgi:application
  • hosting server에서 full stack 개발이 가능하도록 하기 위해 개발되었으며, API와 일관된 configuration setup은 다양한 언어와 프로토콜, 프로세스 매니저, 프록지 등을 다양하게 다룰 수 있도록 개발되었다.

  • django app과 서버들은 모두 wsgi라는 같은 표준을 따른다.

  • django 같은 파이썬 웹 프레임워크가 서버와 데이터를 주고 받는 방식 중 가장 널리 쓰이는 표준 방법이다.

  • uWSGI는 확장성이 뛰어나며 강력하고 다양한 언어 위에서 작동하지만 너무 무거울 수 있다.

runserver

  • django는 실제 서비스에서 runserver를 쓰지 말 것을 권고한다. runserver는 개발을 편하게 하는데 중점을 두고 개발된 서버로 속도도 느리고 보안도 뛰어나지 않다.

  • runserver 명령어는 단일 쓰레드로 작동하여 테스트 용도로 적당하나 많은 사람이 동시 접속하는 경우(request 요청이 많아질 경우) 제대로 페이지를 보여주지 못한다.

  • 파일의 내용이 수정되면 서버를 자동으로 reload 해주지만 파일을 감시하는 과정이나 재시작하는 과정이 느리고, 컴퓨터에 부하를 주기 때문에 파일이 자주 바뀔일이 없는 실제 서버에서는 파일 감시나 자동 재시작을 하지 않는것이 성능에 유리하다.

  • 그래서 gunicorn이나 uwsgi 같은 실서비스를 위한 서버들은 기본적으로 자동 재시작을 하지 않도록 설정되어 있다.

다음은 서버들의 간단한 성능 비교로 초당 요청 수를 뜻하며 높을수록 좋다.


WSGI란?
gunicorn

0개의 댓글