Python WSGI server와 관련된 공부

궁금증의 시작

  • HTTP request를 HTTP web server가 어떻게 처리를 하는 것일까?
  • web server란 무엇인가?
  • CGI란 왜 필요한가?
  • 만약 동시에 두개의 request가 들어 온다면, 동시에 두개를 처리하는 것일까? 아니면, 하나씩 처리해 나가는 것인가?
  • request를 하나씩 처리해 나간다면, 동시에 많은 요청이 들어온다면 어떻게 해야 빠르게 처리해야 하는가?
  • WSGI란 무엇인가?

웹 서버 ( Web Server ) 란 무엇인가?

위키피디아에 영문으로 번여된 것이 가장 잘 설명된 것 같아 보인다. 네이버에 백과사전에 있는 설명은 뭔가 부족한 느낌이다. 아니면 너무 짧게 줄여 놓아서 뭔말인지 모르게 해 놓은 듯하다.

Web Server를 간단히 요약을 하자면,

인터넷을 통해서 요청된 웹 컨텐츠 ( 이미지, html, 등 )의 전달을 도와 주는 하드웨어와 소프트웨어를 말한다.

웹 서버는 주로 웹사이트를 호스팅 할때 사용하지만, 이메일 서버, FTP 서버, 데이터 저장 등과 같은 다른 용도로도 사용된다고 한다.. 더 자세한 것들로 많이 있지만, 웹서버 공부가 아니니 우선 잠시 접어두자.

CGI ( Common Gateway Interface ) 는 왜 필요한가?

웹 서버가 하는 일은 static contents, 즉 내용에 변화가 없는, 그냥 있는 그대로의 것을 전달하는 역활을 한다. 만약 HTTP request가 전달될때마가 현재시간을 돌려보내주어야 한다면 ( dynamic content ), 다른 무엇인가 request에 맞게 content를 만들어 주는 누군가에게 요청을 전달해야 한다. 우리는 이 request에 따라서 content를 만들어 주는 것을 program이라 부른다. 여기서 CGI는 웹서버와 content를 만드는 program 사이에서 interface ( 규칙 ) 을 제공한다. Interface가 필요한 이유는 웹서버가 다양하고 program 또한 다양하기 때문이다.

 WSGI ( Web Server Gateway Interface )란 무엇인가 ?

WSGI ( “whiskey”  – 휘스키 라고 발음) 는 web server와 파이썬으로 작성된 web application 또는 framework들간의 인터페이스를 정의해 놓은 규칙이다. PEP333 

왜 WSGI가 만들어지게 되었는가?

사용자가 파이썬으로 작성된 web application framework의 선택이 web server의 선택의 제한을 두게 되었다. 물론 그 반대로 web server의 선택이 web application framework의 선택에 제한을 두게 되었다. 그 이유는 web application이 특정한 하나의 API, 예를들어 CGI, FastCGI, mod_python 를 지원하게끔 만들어졌기 때문이다.

어떤 WSGI Server를 사용해야 하는가?

uwsgi 현재로서 대세인 것으로 보인다. 위에 링크되어 있는 wsgi server에 벤치마킹을 보더라도 uwsgi 가 단연 최선의 선택이라고 보여진다. 일반적으로 production에서는 uwsgi만을 사용해서 서비스를 제공하지 않는다. 그 보다 앞에 Nginx Server를 두므로서 Static Content는 Nginx Server가 핸들링 하도록 하고, 나머지 Request는 Reverse Proxying 을 통해셔 uwsgi 에게 전달하여 사용하게 된다.

 

Leave a Reply