[파이썬] 소켓 프로그래밍 소개

소켓 프로그래밍은 컴퓨터 네트워크 상에서 프로세스간 통신을 위해 사용되는 일반적인 방법론입니다. 이 방법론은 클라이언트와 서버 간의 양방향 통신을 구현하는 데 매우 효과적이며, 다양한 프로그래밍 언어에서 지원됩니다.

Python은 소켓 프로그래밍을 쉽게 구현할 수 있는 기능을 제공하고 있으며, 네트워크 응용프로그램을 개발하는 데 널리 사용됩니다.

소켓(Socket)이란?

소켓은 컴퓨터 네트워크 상에서 데이터를 송수신하기 위한 인터페이스입니다. 소켓은 IP 주소와 포트 번호를 이용하여 양방향 통신을 제공합니다. 클라이언트와 서버 간의 통신을 위해 각각 소켓을 생성하고, 이를 통해 데이터를 주고받을 수 있습니다.

파이썬 소켓 프로그래밍

Python의 내장 모듈인 socket을 사용하여 소켓 프로그래밍을 간편하게 구현할 수 있습니다. 이 모듈은 TCP 소켓과 UDP 소켓을 모두 지원하며, 다음과 같은 단계로 소켓 연결과 통신을 구현할 수 있습니다:

  1. 소켓 생성: socket.socket() 함수를 사용하여 클라이언트 소켓 또는 서버 소켓을 생성합니다.

  2. 서버 바인딩: 서버 소켓의 경우, bind() 함수를 사용하여 IP 주소와 포트 번호를 할당합니다.

  3. 연결 대기: 서버 소켓은 listen() 함수를 사용하여 클라이언트의 연결 요청을 대기합니다.

  4. 클라이언트 연결: 클라이언트는 connect() 함수를 사용하여 서버에 연결을 시도합니다.

  5. 데이터 송수신: send()recv() 함수를 사용하여 데이터를 송수신합니다. TCP 소켓은 연결 지향성이므로 데이터를 전송하기 전에 반드시 연결을 설정해야 하고, UDP 소켓은 연결 없이 데이터를 주고받습니다.

  6. 연결 종료: 통신을 마치면 close() 함수를 사용하여 소켓 연결을 종료합니다.

예제 코드

다음은 Python을 사용하여 간단한 TCP 클라이언트와 서버를 구현하는 예제 코드입니다. 클라이언트는 서버에 접속하여 메시지를 보내고, 서버는 해당 메시지를 수신하여 출력합니다.

서버 코드 (server.py)

import socket

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

print('서버가 시작되었습니다. 클라이언트의 연결을 대기합니다...')

while True:
    client_socket, addr = server_socket.accept()
    print(f'클라이언트가 접속했습니다: {addr}')

    data = client_socket.recv(1024)
    print(f'수신한 데이터: {data.decode()}')

    client_socket.sendall('Hello, Client!'.encode())
    print('메시지를 보냈습니다')

    client_socket.close()

클라이언트 코드 (client.py)

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 1234))

message = 'Hello, Server!'
client_socket.sendall(message.encode())

data = client_socket.recv(1024)
print(f'서버로부터 받은 메시지: {data.decode()}')

client_socket.close()

위 코드를 실행하면 클라이언트가 서버에 접속하고, 서버는 클라이언트로부터 메시지를 수신하여 출력한 뒤에 해당 클라이언트에게 ‘Hello, Client!’라는 메시지를 보냅니다.

소켓 프로그래밍은 네트워크 기반 애플리케이션 개발에서 필수적인 기술입니다. 파이썬의 소켓 모듈을 사용하면 손쉽게 네트워크 통신을 구현할 수 있습니다. 다양한 예제와 자세한 문서를 참고하여 소켓 프로그래밍에 대한 이해를 높이고, 응용 프로그램 개발에 활용해보세요.