파이썬 http.server 모듈을 빠르게 사용하기 위한 치트시트입니다. 한 줄로 파일 서버 실행, 커스텀 핸들러, 간단한 API 서버 만들기 등을 최소 예제로 정리합니다.
http.server는 간단한 HTTP 서버를 제공합니다. 정적 파일 서빙, 개발 테스트, 로컬 파일 공유 등에 유용합니다. (프로덕션용 아님)
언제 이 치트시트를 보나?
로컬에서 파일을 HTTP로 서빙하고 싶을 때
간단한 테스트 서버가 필요할 때
다른 기기에서 파일 접근이 필요할 때
한 줄로 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 현재 디렉토리를 8000 포트로 서빙python -m http.server
# 포트 지정python -m http.server 8080# 특정 디렉토리python -m http.server -d /path/to/directory
# 특정 IP에 바인딩python -m http.server --bind 0.0.0.0
# 모든 옵션python -m http.server 8080 --bind 0.0.0.0 -d ./public
최소 예제
1. 코드에서 서버 실행
1
2
3
4
5
6
7
8
9
importhttp.serverimportsocketserverPORT=8000# 간단한 파일 서버withsocketserver.TCPServer(("",PORT),http.server.SimpleHTTPRequestHandler)ashttpd:print(f"Serving at http://localhost:{PORT}")httpd.serve_forever()
fromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerclassMyHandler(BaseHTTPRequestHandler):defdo_GET(self):# 응답 상태self.send_response(200)# 헤더self.send_header('Content-type','text/html')self.end_headers()# 본문response=f"<h1>Hello! Path: {self.path}</h1>"self.wfile.write(response.encode())defdo_POST(self):# POST 데이터 읽기content_length=int(self.headers['Content-Length'])post_data=self.rfile.read(content_length)self.send_response(200)self.send_header('Content-type','application/json')self.end_headers()response=f'{{"received": {len(post_data)} bytes}}'self.wfile.write(response.encode())# 서버 실행server=HTTPServer(('localhost',8000),MyHandler)print("Server running on http://localhost:8000")server.serve_forever()
fromhttp.serverimportHTTPServer,BaseHTTPRequestHandlerimportjson# 간단한 데이터 저장소data={"items":[]}classAPIHandler(BaseHTTPRequestHandler):def_send_json(self,data,status=200):self.send_response(status)self.send_header('Content-type','application/json')self.send_header('Access-Control-Allow-Origin','*')# CORSself.end_headers()self.wfile.write(json.dumps(data).encode())defdo_GET(self):ifself.path=='/api/items':self._send_json(data)else:self._send_json({"error":"Not found"},404)defdo_POST(self):ifself.path=='/api/items':content_length=int(self.headers['Content-Length'])body=json.loads(self.rfile.read(content_length))data["items"].append(body)self._send_json({"status":"created"},201)else:self._send_json({"error":"Not found"},404)server=HTTPServer(('localhost',8000),APIHandler)server.serve_forever()
fromhttp.serverimportSimpleHTTPRequestHandlerimportsocketserverPORT=8000# ThreadingTCPServer: 각 요청을 별도 스레드에서 처리classThreadedHTTPServer(socketserver.ThreadingMixIn,socketserver.TCPServer):passwithThreadedHTTPServer(("",PORT),SimpleHTTPRequestHandler)ashttpd:print(f"Threaded server at port {PORT}")httpd.serve_forever()
6. 요청 정보 출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fromhttp.serverimportBaseHTTPRequestHandler,HTTPServerclassDebugHandler(BaseHTTPRequestHandler):defdo_GET(self):print(f"Path: {self.path}")print(f"Headers: {dict(self.headers)}")print(f"Client: {self.client_address}")self.send_response(200)self.send_header('Content-type','text/plain')self.end_headers()self.wfile.write(b"OK")# 로그 출력 비활성화deflog_message(self,format,*args):pass# 또는 커스텀 로깅HTTPServer(('',8000),DebugHandler).serve_forever()