[파이썬] socket Pickle과 소켓 사용하기

이번 블로그 포스트에서는 Python에서 Socket과 Pickle을 사용하여 소켓 통신을 어떻게 구현하는지 살펴보겠습니다. 소켓 통신을 통해 데이터를 주고받는 것은 네트워크 프로그래밍에서 매우 중요합니다. Pickle은 Python 객체를 직렬화하고 역직렬화하는 데 사용됩니다.

소켓(Socket) 사용하기

Python에서 소켓(Socket) 프로그래밍을 위해 socket 모듈을 사용할 수 있습니다. 소켓은 네트워크 상에서 데이터를 주고받기 위한 인터페이스를 제공하는 객체입니다. 다음은 간단한 예제 코드입니다:

import socket

# 서버 소켓 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 서버 소켓을 특정 주소와 포트에 바인딩
server_socket.bind(('localhost', 1234))

# 클라이언트의 연결을 받기 위해 소켓을 수신 대기 상태로 설정
server_socket.listen()

# 클라이언트의 연결을 수락
client_socket, client_address = server_socket.accept()

# 데이터 수신
data = client_socket.recv(1024)

# 수신한 데이터 출력
print(data.decode())

# 소켓 닫기
client_socket.close()
server_socket.close()

위의 예제에서는 소켓을 생성하고, 특정 주소와 포트에 바인딩하여 클라이언트의 연결을 받습니다. 연결이 수락되면 데이터를 수신하고 출력합니다. 마지막으로 소켓을 닫아 연결을 종료합니다.

Pickle 사용하기

Python의 Pickle 모듈은 객체를 바이트 스트림으로 직렬화하고 역직렬화하는 데 사용됩니다. 네트워크를 통해 객체를 주고받을 때 특히 유용합니다. 다음은 Pickle을 사용하여 객체를 직렬화하고 역직렬화하는 예제 코드입니다:

import pickle

# 객체 직렬화
data = {'name': 'John', 'age': 30}
serialized_data = pickle.dumps(data)

# 객체 역직렬화
deserialized_data = pickle.loads(serialized_data)

# 역직렬화한 객체 출력
print(deserialized_data)

위의 예제에서는 Python 사전 객체를 직렬화하고, Pickle을 사용하여 바이트 스트림으로 변환합니다. 이후 다시 Pickle을 사용하여 바이트 스트림을 역직렬화하고, 원래 객체를 얻습니다.

소켓 통신과 Pickle 연동

이제 소켓과 Pickle을 함께 사용하여 객체를 주고받는 예제를 살펴보겠습니다. 이를 통해 네트워크를 통해 객체를 손쉽게 전송할 수 있습니다.

import socket
import pickle

# 서버 소켓 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 1234))
server_socket.listen()

# 클라이언트의 연결 수락
client_socket, client_address = server_socket.accept()

# 객체 생성
data = {'name': 'John', 'age': 30}

# 객체 직렬화
serialized_data = pickle.dumps(data)

# 직렬화된 데이터 송신
client_socket.send(serialized_data)

# 소켓 닫기
client_socket.close()
server_socket.close()

위의 예제에서는 서버 소켓을 생성하고, Pickle을 사용하여 데이터 객체를 직렬화합니다. 직렬화된 데이터는 소켓을 통해 클라이언트에게 전송됩니다.

import socket
import pickle

# 클라이언트 소켓 생성
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('localhost', 1234))

# 데이터 수신
serialized_data = client_socket.recv(1024)

# 직렬화된 데이터 역직렬화
deserialized_data = pickle.loads(serialized_data)

# 역직렬화한 데이터 출력
print(deserialized_data)

# 소켓 닫기
client_socket.close()

클라이언트 측에서는 서버에 연결된 후 소켓을 통해 데이터를 수신하고, Pickle을 사용하여 역직렬화합니다. 연결된 객체를 출력합니다.

이렇게 소켓과 Pickle을 사용하여 데이터를 주고받으면, 네트워크를 통해 객체를 쉽게 전송할 수 있습니다. 이는 분산 시스템 또는 클라이언트-서버 애플리케이션 개발에 매우 유용합니다.

이것으로 Python에서 소켓과 Pickle을 사용하는 방법에 대해 알아보았습니다. 소켓 통신과 Pickle을 함께 사용하면 네트워크 프로그래밍을 간편하게 개발할 수 있습니다. 적절한 사용 사례에 따라 소켓과 Pickle을 적극적으로 활용해 보세요.