[python] 소켓 프로그래밍을 이용한 HTTP 서버 개발

이번 포스팅에서는 Python을 사용하여 간단한 HTTP 서버를 만드는 방법에 대해 알아보겠습니다.

HTTP와 소켓 프로그래밍

HTTP는 웹 서버와 클라이언트 간의 통신을 위한 프로토콜입니다. 소켓 프로그래밍을 통해 HTTP 요청과 응답을 수신하고 전송할 수 있습니다.

간단한 HTTP 서버 구현

다음은 Python의 소켓 모듈을 이용하여 간단한 HTTP 서버를 구현하는 예제 코드입니다.

import socket

def main():
    host = ''  # 모든 인터페이스에서 요청을 받아들이기 위해 빈 문자열을 사용합니다.
    port = 8080  # 사용할 포트 번호를 지정합니다.

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 소켓 생성
    server_socket.bind((host, port))  # 호스트와 포트를 바인딩합니다.
    server_socket.listen(1)  # 클라이언트의 연결 요청을 기다립니다.

    print(f'HTTP 서버가 {port} 포트에서 실행 중입니다.')

    while True:
        client_socket, client_address = server_socket.accept()  # 클라이언트 연결 대기
        request = client_socket.recv(1024).decode()  # 클라이언트로부터 요청을 받습니다.
        print(f'요청 받음:\n{request}')

        # 응답 전송
        response = 'HTTP/1.1 200 OK\n\nHello, World!'  # 간단한 응답
        client_socket.sendall(response.encode())  # 클라이언트에게 응답을 전송합니다.

        client_socket.close()  # 연결 종료

if __name__ == '__main__':
    main()

실행 및 테스트

위 코드를 실행한 후 웹 브라우저에서 http://localhost:8080을 입력하여 접속하면 “Hello, World!” 메시지가 표시됩니다.

추가적인 기능

간단한 예제이지만 여기에는 HTML 파일을 응답으로 보내거나, 요청에 따라 다른 응답을 반환하도록 서버를 확장하는 등의 추가적인 기능을 구현할 수 있습니다.

이렇게 Python의 소켓 프로그래밍을 이용하여 간단한 HTTP 서버를 만들 수 있습니다. HTTP와 소켓 프로그래밍에 대한 이해를 토대로 더 복잡하고 실용적인 서버를 개발할 수 있을 것입니다.

참고 자료