파이썬 네트워크 프로그래밍 소개

네트워크 프로그래밍은 네트워크를 통해 통신하는 소프트웨어를 작성하는 것을 포함합니다. 풍부한 라이브러리 세트를 갖춘 Python은 네트워크 애플리케이션을 개발하는 것을 비교적 간단하게 만듭니다. 이 문서에서는 Python 네트워크 프로그래밍에 대한 소개를 제공하며, 기본 개념을 다루고 시작하기 위한 예제를 제공합니다.

환경 설정하기

네트워크 프로그래밍에 뛰어들기 전에 Python이 설치되어 있는지 확인하세요. Python의 표준 라이브러리에 포함된 `socket` 라이브러리도 필요하므로 추가 설치가 필요하지 않습니다.

소켓 이해

소켓은 네트워크를 통해 데이터를 보내거나 받는 엔드포인트입니다. Python의 `socket` 라이브러리는 소켓을 사용하여 네트워크 통신을 위한 인터페이스를 제공합니다.

간단한 TCP 서버 생성

다음은 들어오는 연결을 수신하고 처리하는 기본 TCP 서버의 예입니다.

import socket

def start_server(host='localhost', port=12345):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(1)
    print(f'Server listening on {host}:{port}')

    while True:
        client_socket, address = server_socket.accept()
        print(f'Connection from {address}')
        client_socket.sendall(b'Hello, client!')
        client_socket.close()

if __name__ == "__main__":
    start_server()

간단한 TCP 클라이언트 생성

다음은 서버에 연결하고 메시지를 수신하는 클라이언트의 예입니다.

import socket

def connect_to_server(host='localhost', port=12345):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((host, port))
    message = client_socket.recv(1024)
    print('Received:', message.decode())
    client_socket.close()

if __name__ == "__main__":
    connect_to_server()

UDP 이해

UDP(User Datagram Protocol)는 네트워크 통신에 사용되는 또 다른 프로토콜입니다. TCP와 달리 UDP는 전달, 주문 또는 오류 검사를 보장하지 않습니다. 다음은 UDP 통신의 기본 예입니다.

UDP 서버

import socket

def start_udp_server(host='localhost', port=12345):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_socket.bind((host, port))
    print(f'UDP server listening on {host}:{port}')

    while True:
        message, address = server_socket.recvfrom(1024)
        print(f'Received message from {address}: {message.decode()}')
        server_socket.sendto(b'Hello, UDP client!', address)

if __name__ == "__main__":
    start_udp_server()

UDP 클라이언트

import socket

def send_udp_message(host='localhost', port=12345):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    client_socket.sendto(b'Hello, UDP server!', (host, port))
    message, _ = client_socket.recvfrom(1024)
    print('Received:', message.decode())
    client_socket.close()

if __name__ == "__main__":
    send_udp_message()

결론

Python의 `socket` 라이브러리는 네트워크 프로그래밍을 위한 견고한 기반을 제공하여 TCP와 UDP 애플리케이션을 모두 만들 수 있습니다. 기본 소켓 작업과 프로토콜을 이해하면 다양한 네트워크 애플리케이션과 서비스를 구축할 수 있습니다. Python의 네트워크 기능을 계속 탐색하여 더욱 정교하고 안정적인 네트워크 솔루션을 개발하세요.