파이썬 웹 서버 마스터하기: Simple부터 CGI까지 완벽 가이드

파이썬 웹 서버 포스트 참고 이미지

여러분, 웹 개발의 세계로 첫 발을 내딛으셨나요? 때론 복잡하고 어려워 보이는 이 길, 파이썬과 함께라면 생각보다 훨씬 즐거운 여정이 될 거예요. 오늘은 파이썬 웹 서버의 다양한 얼굴들을 만나볼 거예요. 간단한 파일 서버부터 동적 콘텐츠를 제공하는 CGI 서버까지, 파이썬으로 할 수 있는 모든 것을 파헤쳐 보겠습니다. 자, 이제 파이썬 웹 서버의 세계로 빠져볼까요?

파이썬 웹 서버의 종류

파이썬은 다양한 웹 서버 구현 방식을 제공합니다. 각각의 특징과 사용법을 자세히 알아보겠습니다.

1. SimpleHTTPRequestHandler

가장 간단하면서도 강력한 파이썬 웹 서버입니다. 주로 정적 파일을 서비스하는 데 사용되죠.

#simpleServer.py
from http.server import HTTPServer, SimpleHTTPRequestHandler
import os

def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
    server_address = ('', 8000)
    os.chdir('your_directory')  # 서비스할 디렉토리로 변경
    httpd = server_class(server_address, handler_class)
    print("서버가 http://localhost:8000/ 에서 실행 중입니다.")
    httpd.serve_forever()

if __name__ == '__main__':
    run()

윈도우 기준으로 cmd창에서 python simpleServer.py 명령어를 입력하여 이 코드를 실행하면, 지정한 디렉토리(your_directory)의 파일들을 웹으로 서비스합니다. 브라우저에서 http://localhost:8000으로 접속하면 파일 목록이 나타나죠.

2. BaseHTTPRequestHandler

좀 더 세밀한 제어가 필요할 때 사용합니다. 요청 처리 방식을 직접 정의할 수 있어요.

from http.server import HTTPServer, BaseHTTPRequestHandler

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b"<html><body><h1>Welcome to My Server!</h1></body></html>")

def run(server_class=HTTPServer, handler_class=MyHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    print("서버가 http://localhost:8000/ 에서 실행 중입니다.")
    httpd.serve_forever()

if __name__ == '__main__':
    run()

이 서버는 모든 GET 요청에 대해 간단한 HTML 페이지(Welcome to My Server! 표시)를 응답으로 보냅니다. 1번에서처럼 실행 및 확인 해보시면 됩니다.

3. CGIHTTPRequestHandler

CGI(Common Gateway Interface) 스크립트를 실행할 수 있는 서버입니다. 동적 콘텐츠 생성에 사용되죠.

from http.server import HTTPServer, CGIHTTPRequestHandler
import os

def run(server_class=HTTPServer, handler_class=CGIHTTPRequestHandler):
    server_address = ('', 8000)
    handler_class.cgi_directories = ['/cgi-bin']
    os.chdir('your_web_root')  # 웹 루트 디렉토리로 변경
    httpd = server_class(server_address, handler_class)
    print("CGI 서버가 http://localhost:8000/ 에서 실행 중입니다.")
    httpd.serve_forever()

if __name__ == '__main__':
    run()

이 서버를 사용하려면 ‘cgi-bin’ 디렉토리를 만들고 그 안에 CGI 스크립트를 넣어야 합니다. 자, 이제 CGI 스크립트에 대해 자세히 알아볼까요?

CGI 스크립트 작성하기

CGI 스크립트는 동적 콘텐츠를 생성하는 프로그램입니다. 파이썬으로 CGI 스크립트를 작성해 봅시다.

  1. 먼저 ‘cgi-bin’ 디렉토리를 만듭니다.
  2. 그 안에 ‘hello.py’ 파일을 만들고 다음 내용을 입력합니다:
#!/usr/bin/env python3
print("Content-Type: text/html")
print()
print("<html>")
print("<head><title>Hello CGI</title></head>")
print("<body>")
print("<h1>Hello, CGI World!</h1>")
print("</body>")
print("</html>")
  1. 이 파일에 실행 권한을 부여합니다 (Unix 시스템의 경우)
   chmod +x cgi-bin/hello.py

이제 브라우저에서 http://localhost:8000/cgi-bin/hello.py에 접속하면 “Hello, CGI World!”라는 메시지를 볼 수 있습니다.

코드 세부해설

CGI 스크립트의 각 라인을 자세히 살펴볼까요?

#!/usr/bin/env python3

  • 셔뱅(shebang) 라인으로, 이 스크립트를 실행할 인터프리터를 지정합니다.

print("Content-Type: text/html")

  • HTTP 헤더를 출력합니다. 이 경우 콘텐츠 타입이 HTML임을 알려줍니다.

print()

  • 빈 줄을 출력하여 헤더와 본문을 구분합니다.

나머지 print()

  • HTML 내용을 생성합니다.

이 간단한 스크립트로 동적 웹 페이지를 만들 수 있습니다. 데이터베이스 연동, 폼 처리 등 더 복잡한 작업도 가능하죠.

파이썬 웹 서버 포스트 기반 AI 생성그림
( 파이썬 웹 서버 포스트 기반 AI 생성그림 )

WSGI 서버

WSGI(Web Server Gateway Interface)는 Python 웹 애플리케이션과 웹 서버 간의 표준 인터페이스를 정의합니다. WSGI를 사용하면 웹 서버와 Python 웹 애플리케이션을 쉽게 연결할 수 있습니다.

다음은 wsgiref 모듈을 사용한 간단한 WSGI 서버 예제입니다.

from wsgiref.simple_server import make_server

def simple_app(environ, start_response):
    status = '200 OK'
    headers = [('Content-Type', 'text/plain')]
    start_response(status, headers)
    response_body = 'Hello, World!'
    return [response_body.encode('utf-8')]

# WSGI 서버 생성
server = make_server('localhost', 8000, simple_app)
print("Serving on port 8000...")

# 서버 시작
server.serve_forever()

이 코드는 다음과 같은 구성요소로 이루어져 있습니다.

  1. simple_app: WSGI 애플리케이션 함수로, HTTP 요청을 처리하고 응답을 생성합니다.
  2. make_server: WSGI 서버를 생성하는 함수입니다.
  3. server.serve_forever(): 서버를 시작하고 요청을 계속 처리합니다.

실행 결과

이 코드를 실행하면 다음과 같은 출력이 콘솔에 나타납니다.

Serving on port 8000...

이는 서버가 성공적으로 시작되어 8000번 포트에서 요청을 기다리고 있음을 나타냅니다.

서버 테스트

위 코드 실행 후 웹 브라우저에서 http://localhost:8000에 접속하면 “Hello, World!” 메시지가 표시됩니다. 이는 simple_app 함수가 모든 요청에 대해 이 메시지를 반환하도록 설정되어 있기 때문입니다.

WSGI 서버의 동작 원리

  1. 클라이언트로부터 HTTP 요청이 들어오면 WSGI 서버가 이를 받습니다.
  2. 서버는 요청 정보를 environ 딕셔너리에 담아 WSGI 애플리케이션(simple_app)에 전달합니다.
  3. start_response 함수를 통해 상태 코드와 헤더를 설정합니다.
  4. WSGI 애플리케이션은 응답 본문을 반환합니다.
  5. 서버는 이 응답을 클라이언트에게 전송합니다.

이러한 방식으로 WSGI 서버는 웹 서버와 Python 애플리케이션 사이의 중개자 역할을 수행하며, 표준화된 인터페이스를 제공하여 다양한 웹 프레임워크와 서버 간의 호환성을 보장합니다.

파이썬 웹 서버 단점과 장점

파이썬 웹 서버는 많은 장점이 있습니다

  • 구현이 간단하고 빠름
  • 파이썬의 풍부한 라이브러리 활용 가능
  • 학습 곡선이 완만함

하지만 단점도 있죠.

  • 대규모 트래픽 처리에는 부적합
  • 보안 설정이 기본적으로 미흡

그럼에도 불구하고, 개발 단계나 소규모 프로젝트에서는 파이썬 웹 서버가 훌륭한 선택이 될 수 있습니다.

여러분, 이제 파이썬 웹 서버의 기초부터 CGI 스크립트 작성까지 배워보셨습니다. 어떠신가요? 생각보다 어렵지 않죠? 이제 여러분만의 웹 서버를 만들어 볼 차례입니다.

파이썬 웹 서버는 단순한 도구가 아닙니다. 여러분의 창의성을 세상과 연결하는 강력한 매개체죠. 지금 당장 파이썬 웹 서버를 실행해보세요. 여러분만의 웹 세상이 펼쳐질 거예요!

끝으로, 웹 개발의 여정은 끝이 없습니다. 계속해서 배우고, 실험하고, 성장하세요. 여러분의 다음 프로젝트가 세상을 놀라게 할지도 모릅니다. 화이팅입니다!!!

참고로, 웹 서버 관련 지식을 습득하셨으니 이제 본격적으로 웹사이트 만들기 정보도 한번 습득해보시는건 어떨까요? 파이썬 장고 웹사이트 만들기: 초보자를 위한 가이드 포스트를 통해서 한번 확인해보세요~!

유사한 게시물