Python 3에서 "python -m SimpleHTTPServer"의 동등한 기능 구현
python -m SimpleHTTPServer
명령은 Python 2에서 간단한 웹 서버를 실행하는 데 사용되었습니다. Python 3에서는 SimpleHTTPServer
모듈이 더 이상 사용되지 않으므로 이 명령은 작동하지 않습니다.
하지만 Python 3에서는 http.server
모듈을 사용하여 동일한 기능을 구현할 수 있습니다. 다음 코드는 Python 3에서 동일한 웹 서버를 시작하는 방법을 보여줍니다.
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Serving at http://localhost:{PORT}")
httpd.serve_forever()
서버 실행 방식 이해하기
위 코드는 다음과 같이 작동합니다.
http.server
모듈에서SimpleHTTPRequestHandler
클래스를 가져옵니다.socketserver
모듈에서TCPServer
클래스를 가져옵니다.PORT
변수에 서버 포트 번호를 할당합니다.Handler
변수에SimpleHTTPRequestHandler
클래스의 인스턴스를 할당합니다.socketserver.TCPServer
클래스를 사용하여 서버 소켓을 만듭니다. 첫 번째 인수는 서버 주소(빈 문자열은 모든 인터페이스를 의미), 두 번째 인수는Handler
클래스입니다.- 서버 소켓을
with
문으로 래핑하여 소켓이 자동으로 닫히도록 합니다. print
문으로 서버 시작 메시지를 출력합니다.httpd.serve_forever()
메서드를 호출하여 서버를 무한히 실행합니다.
HTTPServer와 HTTPServer 차이점
Python 3에는 http.server
모듈에 두 가지 서버 클래스가 있습니다:
HTTPServer
: HTTP 프로토콜을 사용하는 서버를 만듭니다.
HTTPS를 사용하려면 HTTPSServer
클래스를 사용하고 ssl
모듈을 가져와야 합니다.
추가 기능
위 코드는 기본적인 웹 서버를 구현하지만 다음과 같은 추가 기능을 추가할 수 있습니다:
- 특정 디렉토리만 제공하도록 설정
- 특정 파일 유형에 대한 MIME 유형 설정
- 인덱스 페이지 제공
- 오류 처리
Python 3에서 웹 서버 구현 예제 코드
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Serving at http://localhost:{PORT}")
httpd.serve_forever()
설명:
socketserver.TCPServer
클래스를 사용하여 서버 소켓을 만듭니다.
특정 디렉토리 제공
import http.server
import socketserver
PORT = 8000
DIRECTORY = "/path/to/directory"
Handler = http.server.SimpleHTTPRequestHandler
Handler.directory = DIRECTORY
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Serving at http://localhost:{PORT}")
httpd.serve_forever()
DIRECTORY
변수에 제공하려는 디렉토리 경로를 설정합니다.Handler.directory
속성을 사용하여 제공할 디렉토리를 설정합니다.
import http.server
import socketserver
PORT = 8000
DIRECTORY = "/path/to/directory"
class MyRequestHandler(http.server.SimpleHTTPRequestHandler):
def guess_type(self, path):
if path.endswith(".css"):
return "text/css", None
else:
return super().guess_type(path)
Handler = MyRequestHandler
Handler.directory = DIRECTORY
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Serving at http://localhost:{PORT}")
httpd.serve_forever()
MyRequestHandler
클래스를 만들어guess_type
메서드를 재정의합니다..css
파일의 MIME 유형을 "text/css"로 설정합니다.
import http.server
import socketserver
PORT = 8000
DIRECTORY = "/path/to/directory"
INDEX_PAGE = "index.html"
class MyRequestHandler(http.server.SimpleHTTPRequestHandler):
def index_string(self):
if self.path == "/":
with open(INDEX_PAGE, "rb") as f:
return f.read()
else:
return super().index_string()
Handler = MyRequestHandler
Handler.directory = DIRECTORY
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Serving at http://localhost:{PORT}")
httpd.serve_forever()
INDEX_PAGE
변수에 인덱스 페이지 파일 이름을 설정합니다./
경로에 대한 요청이 오면INDEX_PAGE
파일의 내용을 반환합니다.
오류 처리
import http.server
import socketserver
PORT = 8000
DIRECTORY = "/path/to/directory"
class MyRequestHandler(http.server.SimpleHTTPRequestHandler):
def handle_error(self, status, message):
if status == 404:
self.send_error(404, "File Not Found")
else:
super().handle_error(status, message)
Handler = MyRequestHandler
Handler.directory = DIRECTORY
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Serving at http://localhost:{PORT}")
httpd.serve_forever()
status
가 404(파일을 찾을 수
Python 3에서 "python -m SimpleHTTPServer"를 대체하는 방법
앞서 언급했듯이 http.server
모듈의 SimpleHTTPRequestHandler
클래스를 사용하여 Python 3에서 "python -m SimpleHTTPServer"의 동등한 기능을 구현할 수 있습니다.
WSGIServer 사용
SimpleHTTPRequestHandler
는 기본적인 웹 서버를 빠르고 쉽게 만들 수 있지만 더 많은 기능과 제어가 필요한 경우 WSGIServer
를 사용하는 것이 좋습니다. WSGIServer
는 Web Server Gateway Interface(WSGI)를 구현하는 Python 애플리케이션을 실행하는 데 사용됩니다.
WSGIServer를 사용하는 방법:
- WSGI 호환 프레임워크(예: Django, Flask) 설치
- 웹 애플리케이션 개발
WSGIServer
를 사용하여 애플리케이션 실행
CherryPy 사용
CherryPy
는 자체 내장 웹 서버와 함께 제공되는 객체 지향 웹 프레임워크입니다. 간단하고 빠른 웹 애플리케이션을 만들기에 적합합니다.
CherryPy를 사용하는 방법:
CherryPy
설치CherryPy
서버 시작
uWSGI 사용
uWSGI
는 고성능 웹 서버 및 WSGI 애플리케이션 서버입니다. Nginx, Apache와 같은 다른 웹 서버와 함께 사용할 수 있습니다.
uWSGI를 사용하는 방법:
uWSGI
설치uWSGI
구성 파일 작성uWSGI
서버 시작
각 방법 비교
방법 | 장점 | 단점 |
---|---|---|
SimpleHTTPRequestHandler | 간단, 빠르다 | 기능 제한적 |
WSGIServer | 더 많은 기능과 제어 제공 | 프레임워크 설치 필요 |
CherryPy | 간단하고 빠르다 | Nginx, Apache와 같은 다른 웹 서버와 통합 불가능 |
uWSGI | 고성능, Nginx, Apache와 통합 가능 | 복잡하고 설정 어려울 수 있음 |
선택 가이드
- 간단하고 빠른 웹 서버를 원한다면
SimpleHTTPRequestHandler
또는CherryPy
를 사용하십시오. - 더 많은 기능과 제어가 필요한 경우
WSGIServer
를 사용하십시오. - 고성능 웹 서버가 필요하고 Nginx 또는 Apache와 통합하려는 경우
uWSGI
를 사용하십시오.
python python-3.x httpserver