nginx, uwsgi

Shortdary·2020년 7월 15일
0

메인개념

Web Server

인터넷에서 온 요청을 처리해주는 (image, html, css etc.) 리소스를 그대로 보내주는 서버이다.

Common Gateway Interface (CGI)

웹 서버에서 어플리케이션을 작동시키기 위한 인터페이스이다. 웹서버 <-> 어플리케이션 사이의 통신규격이라 보면 되는것 같다.

Web Application Server (WAS)

웹서버와 CGI를 합친것이라고 보면 됨.



부가개념

nginx가 무야

웹 서버, 리버스 프록시, 캐싱 등을 해주는 소프트웨어. 보통 리버스 프록시를 생각한다고 본다.

front proxy vs reverse proxy

프론트 프록시는 클라이언트 측에서 origin 서버로 요청을 보낸다.
리버스 프록시는 네트워크의 끝자락에서 요청을 가로채서 origin 서버로 요청을 보낸다.

둘의 차이는?

프론트 프록시는 origin 서버가 특정한 클라이언트와 통신하는걸 막는거고
리버스 프록시는 클라이언트가 origin서버와 직접 통신하는걸 막는것이다.

uWSGI는 뭐냐?

우선 WSGI는 Web Server Gateway Interface의 줄임말이다.
웹서버와 웹어플리케이션과 어떻게 통신하는지 / 웹어플리케이션이 어떻게 같이 묶여서 하나의 요청을 처리하는가의 스펙이다. (여기의 웹 어플리케이션은 장고)

구글링을 해본결과 uWSGI는 파이썬 코드를 통하는 동적인 부분만 있으면 사용을 해도 문제가 없고, 다량의 정적 파일같은 것들을 사용하면 nginx를 사용하라고 한다.

더 찾아보니 nginx는 WSGI 스펙을 지원하지 않는다라고 한다. (WSGI는 파이썬을 위해 설계된거니까 그런갑다.)
uWSGI는 호스팅 서비스 빌드를 위한 풀 스택 개발에 초점을 둔 응용 소프트웨어이다. (여기서 헷갈리지 않게 uwsgi는 uWSGI가 다른 서버와 통신하기 위한 프로토콜이다.)

일반적으로 웹 서버(Apache, Nginx)는 톰캣, PHP, Django, Node.js 등의 앞단에 배치되어 프록시, 보안, 정적 파일 제공 등의 역할을 합니다.
그런데 웹 서버는 PHP, Python, JavaScript 등의 언어를 해석할 능력이 없기 때문에 프로그래밍 언어를 해석할 수 있는 인터페이스, 즉 CGI가 필요합니다.
WSGI는 python 애플리케이션과 웹 서버가 통신하기 위해 정의된 표준 인터페이스 스펙입니다.
CGI와 WSGI는 웹 요청을 처리할 수 있는 표준 인터페이스 프로그램이라는 점에서 같지만, CGI는 WSGI보다 low level에 있습니다.

그러니까 결론은
요청 -> 웹서버(nginx) -> WSGI서버(uWSGI) -> 장고 인것이다.

왜 쓰냐?

웹서버 리버스프록시를 쓰면 origin 서버가 노출되지 않는다. 보안적으로 좋다는 것
또 외부에서 요청이 많아지면 웹서버쪽에서 로드 밸런싱을 자동으로 처리해준다. 성능적으로 좋다는 것

profile
흐엥

0개의 댓글