CGI 방식은 요청 들어올 때 마다 프로세스가 생성되는 방식. 따라서 짧은 시간에 수천 수만의 다량 요청을 받으면 서버 부하가 높아져 프로세스가 멈추거나 다운된다는 단점이 있다.
이 단점을 해결하고 애플리케이션을 쉽게 작성할 수 있도록 웹 서버와 애플리케이션 간의 연동 규격을 정의한 것이 WSGI규격이다.
그래서 파이썬에서는 WSGI규격만 맞추면 어떤 웹 서버에서도 파이썬 애플리케이션을 실행할 수 있다.
WSGI규격에 따라 애플리케이션을 개발할 떄 중요한 사항 두가지
1. 개발이 필요한 애플리케이션을 함수 또는 클래스의 메소드로 정의하고 애플리케이션 함수의 인자는 다음과 같이 정의한다.
def application_name(environ, start_response):
enviorn : HTTP 환경변수
start_response : 반드시 호출하는 함수
2. start_response 함수 역시 인자 정해져 있다.
start_response(status, headers)
status : '200 OK' 등
headers : 응답 헤더 Content-Type >...
3. 애플리케이션 함수의 리턴값은 바디에 해당하는 내용이어야 한다.
from wsgiref.simple_server import make_server
def my_app(environ, start_response):
status = '200 OK'
headers = [('Content-Type', 'text/plain')]
start_response(status, headers)
response = [b"This is a sample WSGI Application"]
return response
if __name__ == '__main__':
print("Started WSGI Server on port 8888... ")
server = make_server('', 8888, my_app)
server.serve_forever()
WSGI 서버를 만들때 중요한 사항
1. wsgiref.simple_server모듈은 make_server() 및 serve_forever()메소드 등 API를 제공
2. my_app()과 같은 애플리케이션 로직을 호출 가능한 함수나 메소드로 정의하여 make_server()인자로 넘겨주어 WSGI 웹 서버를 만든다.
이는 애플리케이션 프로그램과 웹 서버 프로그램을 독립적으로 작성할 수 있게 해주는 WSGI규격의 중요한 원칙에 해당
3. my_app() 함수가 WSGI 규격을 준수하는 애플리케이션 코드입니다. 이 애플리케이션 함수에서 응답을 위한 헤더 및 바디를 구성해서 반환해준다.
(venv) C:\Users\user\PycharmProjects\Pytwebpractice\mysite>python my_wsgiserver.py
Started WSGI Server on port 8888...
127.0.0.1 - - [12/Sep/2020 22:56:06] "GET / HTTP/1.1" 200 33
127.0.0.1 - - [12/Sep/2020 22:56:07] "GET / HTTP/1.1" 200 33
역시 똑같이 실행하면 This is a sample WSGI Application이라고 html적힌다.
'파이썬' 카테고리의 다른 글
애플리케이션 설게하기 - PK와 FK (0) | 2020.09.19 |
---|---|
Template 화면 UI 정의 (0) | 2020.09.18 |
정규표현식에 사용되는 문자의 의미. (0) | 2020.09.13 |
Django's MTV pattern 과 코딩 순서 (0) | 2020.09.13 |
my_HTTPServer / python -m http.server 8888/ cgi 서버 (0) | 2020.09.12 |
http.client 모듈 예제 download-image from google (0) | 2020.09.10 |
파이썬 urlopen()함수 예제 - Request 클래스로 요청 헤더 지정 (0) | 2020.09.10 |
[장고&파이썬웹] urllib.request 모듈 예제 재작성 (0) | 2020.09.06 |