웹 서버 프로그램을 작성할 때는 직접 파이썬 라이브러리를 사용해서 개발하기 보다는 웹 프레임워크를 사용해서 개발하는 경우가 많다. 프레임워크는 개발자가 웹 서버 프로그램을 개발하기 쉽도록 저수준의 기능을 이미 만들어 놓은 기반 프로그램으로 웹 서버 프로그램 개발자는 프레임워크를 활용하여 응용 로직만 개발하면 되기 때문에 훨씬 효율적이다.
웹 서버의 역할은 http 통신에서 클라이언트의 요청을 받고 이를 처리하여 그 결과를 되돌려주는 것이다.
from http.server import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response_only(200, 'OK')
self.send_header('Content-Type', 'text/plain')
self.end_headers()
self.wfile.write(b"Hello World")
if __name__ == '__main__'
server = HTTPServer(('', 8888), MyHandler)
print("Started WebServer on port 8888...")
print("Press ^C to quit WebServer.")
server.serve_forever()
이를 기본으로 해서 HTTPServer 클래스나 적절한 핸들러 클래스를 상속받아 그 기능을 확장해 나가면 된다.
이 두 기반 클래스에는 HTTP 프로토콜을 처리해주는 기능이 있어서 기반 클래스를 상속받으면 따로 HTTP 프로토콜 관련 로직을 코딩하지 않아도 된다.
아까의 코드를 실행시키면 8888 포트로 요청을 기다리는 메시지가 나타난다. 이처럼 웹 서버가 정상적으로 실행되었다면 브라우저를 열고 http://127.0.0.1:8888을 접속한다.
앞에서는 MyHandler라는 핸들러를 코딩했는데 SimpleHTTPRequestHandler을 사용하면 별도의 코딩 없이도 즉시 웹 서버를 실행할 수 있다.
핸들러에는 do_GET() 및 do_HEAD() 메소드가 정의 되어 있어서 GET 및 HEAD 방식을 처리할 수 있다.
do_POST() 메소드가 정의되어 있어서 POST 방식을 처리할 수 있다.
CGI 웹 서버가 CGI 스크립트를 정상적으로 처리하는 지 확인하기 위해선 2가지 준비 작업이 필요하다.
1. 서버에서 실행되는 스크립트가 필요하다.
2. POST 방식으로 요청보낼 웹 클라이언트가 필요하다. 웹 브라우저로는 POST 요청을 보낼 수 없기 때문이다.
출처: Django로 배우는 파이썬 웹 프로그래밍(기초) - 김석훈님