[파이썬] 소켓 프로그래밍과 웹 서버 통신

소켓 프로그래밍은 컴퓨터 네트워크에서 데이터를 주고받는데 사용되는 기술입니다. 웹 서버 통신은 웹 서버와 클라이언트 간의 데이터 교환을 의미합니다. Python은 네트워크 프로그래밍에 유용한 기능들을 제공하므로, 소켓 프로그래밍과 웹 서버 통신을 손쉽게 구현할 수 있습니다.

소켓 프로그래밍 소개

소켓은 네트워크 상에서 정보를 주고받을 수 있는 개체입니다. 이를 통해 클라이언트와 서버 간의 통신이 가능해집니다. 소켓은 일련의 API를 제공하며, 사용자는 이를 활용하여 데이터를 전송하고 수신하는 등의 작업을 수행할 수 있습니다.

TCP 소켓 프로그래밍

TCP (Transmission Control Protocol)는 신뢰성 있는 전송 프로토콜로, 데이터 흐름을 보장하고 손실이 없도록 해줍니다. TCP 소켓 프로그래밍을 사용하여 클라이언트와 서버 간의 연결을 만들고 데이터를 주고받을 수 있습니다. 예를 들어, 다음은 Python에서 TCP 소켓을 사용하여 서버에 연결하고 데이터를 전송하는 예제 코드입니다.

import socket

# 서버 정보
server_ip = '127.0.0.1'
server_port = 8000

# TCP 소켓 생성
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 서버에 연결
client_socket.connect((server_ip, server_port))

# 데이터 전송
data = 'Hello, server!'
client_socket.send(data.encode())

# 서버로부터 데이터 수신
received_data = client_socket.recv(1024)
print(f"Received data: {received_data.decode()}")

# 소켓 닫기
client_socket.close()

UDP 소켓 프로그래밍

UDP (User Datagram Protocol)는 비연결성 프로토콜로, 데이터 전송을 보장하지 않습니다. UDP 소켓 프로그래밍을 사용하면 클라이언트와 서버 간의 빠른 데이터 전송이 가능해집니다. 예를 들어, 다음은 Python에서 UDP 소켓을 사용하여 서버에 데이터를 전송하는 예제 코드입니다.

import socket

# 서버 정보
server_ip = '127.0.0.1'
server_port = 8000

# UDP 소켓 생성
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 데이터 전송
data = 'Hello, server!'
client_socket.sendto(data.encode(), (server_ip, server_port))

# 소켓 닫기
client_socket.close()

웹 서버 통신

웹 서버 통신은 HTTP (Hypertext Transfer Protocol)를 사용하여 웹 서버와 클라이언트 간의 데이터 교환을 의미합니다. Python의 http.server 모듈을 사용하여 간단한 웹 서버를 구현하고, requests 모듈을 사용하여 클라이언트와 데이터를 주고받을 수 있습니다. 예를 들어, 다음은 Python으로 간단한 웹 서버를 만들고 클라이언트로부터 데이터를 수신하는 예제 코드입니다.

import http.server
import socketserver

# 서버 정보
server_address = ('', 8000)

# 웹 서버 핸들러
class MyRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write("Hello, client!".encode())

# 웹 서버 생성
with socketserver.TCPServer(server_address, MyRequestHandler) as httpd:
    print(f"Server running at http://{server_address[0]}:{server_address[1]}")
    httpd.serve_forever()

이제 웹 브라우저를 열고 http://localhost:8000에 접속하면 “Hello, client!”라는 문구를 확인할 수 있습니다.

마치며

Python은 소켓 프로그래밍과 웹 서버 통신을 구현하는데 매우 유용한 기능들을 제공합니다. 소켓 프로그래밍을 통해 네트워크 통신을 구현하고, 웹 서버 통신을 통해 웹 애플리케이션을 개발할 수 있습니다. 이를 활용하여 다양한 네트워크 기능을 구현하고 활용하는 것에 도전해 보세요!