웹 서버를 구축할 때 사용되는 WSGI
이러한 WSGI가 무엇이고, 왜 사용하는 지 알아보자.
python에서 사용되는 Web Application과 Web Server간의 통신 규약(프로토콜).
WSGI 프로토콜을 사용한 python의 WAS 서버
ex.) waitress, Gunicorn, uWSGI와 같은 예가 있다.
WAS, WSGI에 대한 자세한 사항은 여기를 참고하라.
먼저 WSGI를 왜 쓰는지 알기 위해서, WSGI를 사용하지 않는 경우를 먼저 알아보자.
아래는 간단한 "hello"를 반환하는 Python 코드로 작성된 Flask 서버이다.
소스코드를 살펴보면 현재 WSGI 부분이 주석처리 되어있다.
이처럼 WSGI를 사용하지 않고, 서버를 동작시키면 어떻게 될까?
웹 페이지에 접근해보면 접속은 잘 된다.
소스코드를 실행시킨 터미널의 상황은 어떨까?
다음과 같은 경고 메세지(WARNING)이 출력되어 있는 것을 확인할 수 있다.
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
이 서버는 개발용 서버이며, 상업용 배포 환경에서는 사용하지 말라는 것을 확인할 수 있다.
그 대신 WSGI 서버를 사용하라고 나와 있다.
이제 WSGI 서버를 사용해 보자.
더이상 아무런 경고 메세지가 출력되지 않는다.
앞에서 봤 듯, Flask 서버를 동작시킬 때
내장된 Flask의 서버를 그대로 사용할 시, ❗이 서버는 개발용 서버이며, 상업용 배포 환경에서는 사용하지 마세요. WSGI 서버를 쓰세요.
를 확인하였다.
쉽게 말하면 말 그대로 개발용이라, 성능이나 보안적인 측면이 좋지 않다.
자세한 이유는 다음과 같다.
성능 문제
파이썬 내장 서버는 간단하고 경량이지만, 실제 트래픽을 감당하기에는 처리속도가 부족하다.
보안 문제
파이썬 내장 서버는 간단한 로컬 테스트 목적으로 설계되었기 때문에, 보안 측면에서 취약하다.
기능 부족
파이썬 내장 서버는 기본적인 웹 서버 기능만 제공한다.
실제 프로덕션 환경에서는 추가적인 기능이 필요한 경우가 많은데, 정적 파일 제공, 리버스 프록시, 로드 밸런싱 등과 같은 기능을 제공하는 외부 웹 서버나 WAS를 사용하는 것이 일반적이다.