웹 서버 라이브러리 📂

jurin·2021년 5월 22일
0

웹 서버 프로그램을 작성할 때는 직접 파이썬 라이브러리를 사용해서 개발하기 보다는 웹 프레임워크를 사용해서 개발하는 경우가 많다. 프레임워크는 개발자가 웹 서버 프로그램을 개발하기 쉽도록 저수준의 기능을 이미 만들어 놓은 기반 프로그램으로 웹 서버 프로그램 개발자는 프레임워크를 활용하여 응용 로직만 개발하면 되기 때문에 훨씬 효율적이다.

간단한 웹 서버

웹 서버의 역할은 http 통신에서 클라이언트의 요청을 받고 이를 처리하여 그 결과를 되돌려주는 것이다.

웹 서버를 만드는 가장 기본적인 방법

  1. http.server 모듈을 임포트한다.
  2. BaseHTTPRequestHandler를 상속받아 원하는 로직으로 핸들러 클래스를 정의한다.
  3. 서버의 IP, PORT 및 핸들러 클래스를 인자로 하여 HTTPServer 객체를 생성한다.
  4. HTTPServer 객체의 serve_forever() 메소드를 호출한다.
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 클래스나 적절한 핸들러 클래스를 상속받아 그 기능을 확장해 나가면 된다.

HTTPServer 및 BaseHTTPRequestHandler 클래스

이 두 기반 클래스에는 HTTP 프로토콜을 처리해주는 기능이 있어서 기반 클래스를 상속받으면 따로 HTTP 프로토콜 관련 로직을 코딩하지 않아도 된다.

아까의 코드를 실행시키면 8888 포트로 요청을 기다리는 메시지가 나타난다. 이처럼 웹 서버가 정상적으로 실행되었다면 브라우저를 열고 http://127.0.0.1:8888을 접속한다.

SimpleHTTPRequestHandler

앞에서는 MyHandler라는 핸들러를 코딩했는데 SimpleHTTPRequestHandler을 사용하면 별도의 코딩 없이도 즉시 웹 서버를 실행할 수 있다.

핸들러에는 do_GET() 및 do_HEAD() 메소드가 정의 되어 있어서 GET 및 HEAD 방식을 처리할 수 있다.

CGIHTTPRequestHandler

do_POST() 메소드가 정의되어 있어서 POST 방식을 처리할 수 있다.

CGI 웹 서버가 CGI 스크립트를 정상적으로 처리하는 지 확인하기 위해선 2가지 준비 작업이 필요하다.
1. 서버에서 실행되는 스크립트가 필요하다.
2. POST 방식으로 요청보낼 웹 클라이언트가 필요하다. 웹 브라우저로는 POST 요청을 보낼 수 없기 때문이다.





출처: Django로 배우는 파이썬 웹 프로그래밍(기초) - 김석훈님

profile
anaooauc1236@naver.com

0개의 댓글