해피 코딩!

WS, WAS - Nginx, uWSGI 본문

Django

WS, WAS - Nginx, uWSGI

지속가능한 성장을 2020. 11. 23. 18:30

틀리다고 생각하시는 부분을 지적해주세요! 피드백을 환영합니다!

WS (Web Server)

  • 정적인 파일을 제공하는 서버, HTTP을 통해 제공

  • 프록시( 프록시 서버는 서버 요청에 대한 내용들을 저장), 보안 등을 제공하며

  • 정적인 파일로 처리가 가능하다면, WAS(Web Application Server)를 통하지 않고 빠른 처리가 가능하다.

  • 정적인 파일로는 웹 페이지(html, css, js- 요청에 대한 응답이 로직 없이 제공되는 같은 값일 경우), 이미지(png, jpg), 문서 등이 있습니다.

Reverse Proxy

  • 프록시 서버를 인터넷 리소스, 인트라넷 리소스 앞에 위치.

  • Proxy는 일반적으로, 여러 서버간 부하 분산, 서로 다른 웹 사이트의 컨텐츠 표시, HTTP 이외 프로토콜 통해 WAS에 요청 전달 등이 있다.

  • Nginx 리버스 프록시의 용도는 로드벨런싱 제공

    • Nginx는 요청을 프록시 할 때 요청을 지정된 프록시 서버로 보내고 응답을 가져온 다음, 클라이언트로 제공한다.
    • HTTP 서버 또는 비 HTTP서버(django)로 프록시 할 수 있다.

Nginx

차세대 웹 서버로 불린다. 더 적은 자원으로 더 빠르게 데이터를 서비스 할 수 있다.

Apache : 요청마다 스레드 혹은 프로세스 생성 및 처리

Nginx : 요청마다 비동기 처리

nginx, wsgi 통신은 기본적으로 socket 방식을 사용한다. HTTP 방식을 사용할 수 있지만 통신에서 로스가 많이 발생하는 단점이 있다. 그에 비해서 wsgi app은 서버 안쪽에서 서버의 요청을 django 어플리케이션에 중계하는 역할을 하기 때문에 무거운 HTTP 요청을 보다는 socket이라는 전송방식을 사용한다. (HTTP에 비해서 훨씬 가볍게 설정이 가능)

Nginx 구성 중 설정 요소

  • nginx.conf nginx와 그 모듈들이 작동하는 방식에 대한 설정 파일입니다. sites-enabled안에 각각 서버에 대한 conf파일들을 만들고 이 안에 첨부하여 웹서버를 운영할 수 있습니다. conf 파일안을 보시면 http, server, location, upstream과 같이 나누어져 있는데 이를 블록이라 하며 server는 가상 서버 혹은 일반 서버를 호스팅 할 때 사용되며 location의 경우 특정 폴더 밑 파일에 대한 경로를 지정해주고 upstream의 경우 Reverse Proxy 설정을 위해서 사용됩니다.

  • sites-available 설정을 저장하는 곳이며, 이곳에서 만든 설정은 Nginx에 반영이 되지 않는다. 반영하기 위해서는 sites-enabled에 설정파일을 복사하거나 심볼릭 링크를 건다.

  • sites-enabled nginx.conf에 첨부해서 실제로 서버를 운영할 설정 파일들이 들어있는 폴더입니다. sites-available에서 작성한 설정을 적용하는 app.nginx가 있습니다.

Nginx + uWSGI + Django

Django에는 기본적으로 주어지는 웹서버가 있어서 manage.py runserver를 이용하여 웹서버를 구동할 수 있다. 하지만, Django 내에서 제공하는 서버는 개발할 때 쓰이는 조그마한 디버깅용 웹서버이기 때문에 실제 서비스를 배포할 때에는 다른 웹서버(Nginx or Apache)를 통해 배포하는 것이 좋다.

WSGI

WSGI란 Web Server Gateway Interface의 약자로, 웹서버(Nginx)에서 받은 요청이 서버 쪽에서 처리가 필요한 경우, wsgi가 서버사이드 애플리케이션을 실행하여 담당하게 된다. 이 WSGI 규격에 맞춘 코드를 실행해주는 프로그램이 uWSGI다. 이 외에 Gunicorn 같은 프로그램 또한 wsgi 규격 웹 애플리케이션을 배포할 때 쓰인다.

WSGI는 웹 서버와 웹 애플리케이션의 인터페이스를 위한 파이썬 프레임워크

요약

  • 웹서버(Nginx)는 클라이언트와 http 통신에 특화되어 있는 서비스 ( 정적 요청을 서버단에서 처리를 해준다.)

  • Nginx를 실제 동작하는 소스는 sites-availabled이다. 이것은 sites-enabled에서 심볼릭 링크로 가져온다.

  • wsgi는 동적 서비스를 django와 연결해서 함 boiler plate code에서는 uWSGI를 통해서 Web server와 Web application(django)간 데이터를 통신한다.

  • uwsgi가 다른 웹 서버(gunicorn, cheerypi, Bjoern)들에 비해 굉장히 무겁다(자원 소모도 많고, ram, cpu의 사용량이 높다). 바꾸자

참고하면 좋을 사이트

'Django' 카테고리의 다른 글

Django form 정리  (0) 2021.01.14
Django의 쿼리와 데이터베이스 레이어  (4) 2020.12.18
Django를 사용하게 된 이유  (0) 2020.12.15
pytest를 사용하는 이유  (0) 2020.11.23
Django 구성에 대한 이해  (0) 2020.11.23
Comments