WebServer, WSGI, WAS

이현우·2022년 7월 6일
2

Flask Server

 Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
  • Flask 서버를 실행하게 되면 Production환경에서는 사용하지 말라는 문구를 볼 수 있다. 대신에 WSGI 서버를 사용하라고 한다. Flask는 기본적으로 Werkzeug를 사용함.
  • 왜 Flask 내장 서버를 사용하지 말아야 할까?
    - 기본적으로 한번의 둘 이상의 요청을 처리하지 않는다.
    - 서버 확장이 힘들다.

웹 아키텍처

Web Server

  • 클라이언트가 요청한 웹 컨텐츠를 전달. 정적인 콘텐츠(HTML pages, files, images, videos 등) 요청을 처리한다. Apach HTTP Server, Nginix 등이 있다.
  • WAS의 부담을 줄이기 위해 웹서버를 별도로 운영.

Apache

  • 메모리 부족: connection이 연결될 때마다 프로세스를 생성
  • 무거운 프로그램: 확장성이 좋다는건 곧 리소스가 않다는 걸 의미
  • CPU 부하 증가: 많은 connection 요청이 들어오면 context switching을 많이 하기에 CPU 부하가 증가
  • 수많은 컴퓨터가 보급됨에 따라 서버에 동시에 연결 된 connection이 많을때 더이상 새로운 connection을 생성하지 못하게 되었다. 그로인해 Nginx가 등장하게 된다.

Nginx

  • 설정에 따라 master process는 worker process를 생성하고 worker는 소켓을 통해 요청을 받아 connection을 생성하고 이벤트를 처리한다.
  • 이벤트는 queue형식으로 worker에게 전달되어 처리된다.

성능비교


WSGI(Web Server Gateway Interface)

  • WSGI는 웹 서버와 통신하기 위한 일종의 통신 규약이며 주로 파이썬으로 구성된 Web application과 웹 서버의 통신을 위해 사용된다. Bjoern, CherryPy, Meinheld, uWSGI, Gunicorn, mod_wsgi 등이 있다.

WSGI의 등장

  • 클라이언트로부터 오는 HTTP 요청을 파이썬 스크립트가 요구하는 데이터 형식으로 변환하고 응답을 돌려줄 때도 파이썬 데이터를 HTTP 형식으로 바꿔주는 작업이 필요한데, 이 때 파이썬 앱 서버가 동작하는 기본적인 방식이 CGI(Common Gateway Interface)이다. 그런데 CGI 방식은 한 가지 문제점이 있었다. 요청이 들어올 때마다 파이썬 스크립트를 처음부터 실행한다는 것이었다. 이로인해 WSGI가 등장하게 되었다.
  • WSGI 방식은 요청을 받으면 필요한 로직 하나만 실행한 후 결과를 응답하는 식으로 동작함으로써 동적인 콘텐츠에 대한 요청에 빠르게 응답할 수 있게 되었다.

WAS(Web Application Server)

  • 웹 서버에서 처리하지 못하는 동적 컨텐츠를 처리해 웹 서버에게 응답한다. 주로 비즈니스 로직을 수행한다. Django, Flask 등이 있다.

정리

  • WSGI는 왜 필요한가?
    - 웹 앱에 HTTP 요청을 전달하고 응답을 되돌려주는 일을 할 WSGI server의 역할을 하기 위해서
  • Web server는 왜 필요한가?
    - reverse proxy server, load balancer 등의 역할을 수행하기 위해서
  • Django/Flask는 왜 필요한가?
    - WSGI compatible server를 알아서 제공하고 기본적인 부분이 구현되어 있어 필요한 기능을 사용하기 위해서
  • 그럼 그냥 프레임워크 서버를 웹 서버로 사용하면 되지 않을까?
    - 그래도 안될 건 없다. 하지만 보통은 그러지 않는다. 프레임워크가 제공하는 서버는 실제 트래픽에 대응할 수 없고 여러부분에서 빈약하기 때문이다.
  • WSGI만 사용해도 돼? 응.
    - 다만 Web Server가 제공하는 기능을 사용할 수 없을 뿐이다.
  • Web Server만 사용해도 돼? 응.
    - WSGI가 제공하는 기능을 사용할 수 없을 뿐이다.

Reference

Playground
Ahzick
개발자가 되고 싶은 준개발자
jimin_lee.log

0개의 댓글