파이썬

간단 wsgi server 까지

mcdn 2020. 9. 12. 23:04
반응형

 

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적힌다. 

 

 

반응형