Django 03 HTTPServer 및 BaseHTTPRequestHandler 클래스
안녕하세요 jju_developer입니다.
우리가 원하는 웹 서버를 만들기 위해서는 기반 클래스를 임포트 하거나 상속받아야 합니다.
이 처럼 기반이 되는 클래스가 바로 HTTPServer 및 BaseHTTPRequestHandler 클래스입니다.
오늘 볼 장고 세번째 시간 예제를 보면,
웹 클라이언트로부터 요청을 받고 "Jju Hello World"라는 문장을 되돌려주는 아주 간단한 웹 서버입니다.
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"Jju Hello World")
if __name__ == '__main__':
server = HTTPServer(('', 8888), MyHandler)
print("Started WebServer on port 8888...")
print("Press ^C to quit WebServer.")
server.serve_forever()
이렇게 쓰면 8888번의 포트를 띄울 수 있습니다.
8888번의 포트에 제가 쓴 글이 들어가 있습니다.
다음 볼 예제는 CGI 입니다.
위 커맨드 창으로 서버는 띄운 상태입니다.
- CGI 웹 서버 시험용 CGI 스크립트
form = cgi.FieldStorage()
name = form.getvalue('name')
email = form.getvalue('email')
url = form.getvalue('url')
print("Content-Type: text/plain")
print()
print("Welcome... CGI Scripts")
print("name is", name)
print("email is", email)
print("url is", url)
웹 서버가 사용자의 요청을 애플리케이션에 전달하고 애플리케이션의 처리 결과를
애플리케이션으로부터 되돌려 받기 위한,
즉 웹 서버와 애플리케이션 간에 데이터를 주고받기 위한 규격을 CGI(Common Gateway Interface)라고 합니다.
그다음 클라이언트 CGI를 보면
from urllib.parse import urlencode
url = "http://127.0.0.1:8888/cgi-bin/script.py"
data = {
'name': '쮸',
'email': 'ohhh@jjutistory.com',
'url': 'http://www.jjutistory.com',
}
encData = urlencode(data)
postData = encData.encode('ascii')
f = urlopen(url, postData) # POST
print(f.read().decode('cp949'))
- 맥/리눅스 : utf-8 / 한글 윈도우 : cp949

하지만 오류가 계속 납니다....

혹시나 권한 문제일까 봐 터미널에서 권한을 주어도 똑같네요...
혹시 아시는 분 댓글 부탁드립니다...🥲 윈도우는 잘 돌아갑니당..
CGI 방식은 요청이 들어올 때마다 처리를 위한 프로세스가 생성되는 방식이라서,
짧은 시간에 수천, 수만의 다량 요청을 받으면 서버의 부하가 높아 짐에 따라 프로세스가 멈추거나 다운될 수도 있기 때문에
이러한 CGI의 단점을 해결하고 파이썬 언어로 애플리케이션을 좀 더 쉽게 작성할 수 있도록
웹 서버와 웹 애플리케이션 간에 연동 규격을 정의한 것이 WSGI 규격입니다.
그래서 파이썬에서는 WSGI 규격만 맞추면 어떤 웹 서버에서도 파이썬 애플리케이션을 실행할 수 있는 것입니다.
파이썬에서는 WSGI(Web Server Gateway Interface) 규격이 정의되어 있고,
파이썬 애플리케이션을 실행하고자 하는 웹 서버는 이 규격을 준수해야 합니다.
WSGI는 웹 서버와 웹 애플리케 이션을 연결해 주는 규격으로,
장고(Django)와 같은 파이썬 웹 프레임워크를 개발하거나, 이런 웹 프레임워크를 아파치(Apache Httpd)와 같은
웹 서버와 연동할 때 사용합니다.
핵심은 웹서버와 애플리케이션 사이에 동작!
어쨌든 최종적으로 웹 애플리케이션 서버 WAS 서버가 등장하였는데!
여태껏 WAS의 등장 배경을 설명하기 위해서 cgi를 설명했던 것입니다.
결론은 장고가 바로 WAS의 기능을 해주는 것입니다.
다음에 장고 공부할때에는 다른 예제를 찾아봐야겠습니다....!
오늘도 수고하셨습니다.