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

인터넷 상에서 정보를 공유하기 위해 웹 서버는 필수적입니다. 웹 서버는 클라이언트의 요청에 따라 웹 페이지나 파일을 전달하는 역할을 합니다. 이번 글에서는 파이썬의 소켓 프로그래밍을 이용하여 간단한 웹 서버를 개발하는 방법에 대해 알아보겠습니다.

필요한 모듈 가져오기

먼저, 소켓 프로그래밍을 위해 socket 모듈을 가져와야 합니다. 또한 HTTP 요청을 파싱하기 위해 http 모듈을 사용할 것입니다.

import socket
import http

소켓 생성

다음으로, 서버 소켓을 생성해야 합니다. 이 소켓은 클라이언트의 연결을 받아들이는 역할을 합니다.

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 8080))
server_socket.listen(1)

연결 수락

서버 소켓이 클라이언트의 연결을 받아들이면, 클라이언트와의 통신을 위한 새로운 소켓을 생성해야 합니다.

client_socket, addr = server_socket.accept()

HTTP 요청 처리

이제 클라이언트로부터 받은 HTTP 요청을 처리해야 합니다. http 모듈을 사용하여 요청을 파싱하고, 요청에 따라 적절한 응답을 생성합니다.

request_data = client_socket.recv(1024).decode('utf-8')
request_method = request_data.split(' ')[0]
request_path = request_data.split(' ')[1]

if request_method == 'GET':
    if request_path == '/':
        response_data = "HTTP/1.1 200 OK\n\nHello, World!"
    else:
        response_data = "HTTP/1.1 404 Not Found\n\nNot Found"
else:
    response_data = "HTTP/1.1 501 Not Implemented\n\nNot Implemented"

client_socket.sendall(response_data.encode('utf-8'))
client_socket.close()

서버 종료

모든 작업이 끝나면 서버 소켓을 닫아야 합니다.

server_socket.close()

이제 위의 코드를 실행하면 간단한 웹 서버가 실행됩니다. 이 웹 서버는 localhost:8080으로 접속할 수 있으며, 요청에 따라 “Hello, World!”를 반환하거나 404 또는 501 에러를 반환합니다.

위와 같이 소켓 프로그래밍을 통해 간단한 웹 서버를 개발할 수 있습니다. 물론, 이는 실제 환경에서 사용하기에는 많은 한계점이 있으며, 실제 웹 서버는 보안, 성능, 확장성 등을 고려해야 합니다. 하지만 이러한 기본적인 이해는 실제 웹 서버를 다뤄보는 데 도움이 될 것입니다.

참고 자료