[파이썬] socket 소켓 애플리케이션 테스트하기

이번 블로그 포스트에서는 Python을 사용하여 Socket 프로그래밍을 테스트하는 방법에 대해 알아보겠습니다.

Socket은 네트워크 통신을 위해 사용되는 프로그램 간 인터페이스로, 클라이언트와 서버 간 데이터 통신을 가능하게 해주는 중요한 요소입니다. 이를 테스트하기 위해서는 서버와 클라이언트 사이에 데이터를 주고받는 기본적인 소켓 애플리케이션을 작성해야 합니다.

클라이언트 소켓 코드 작성하기

먼저, 클라이언트 소켓 코드를 작성해보겠습니다. 아래의 예제 코드는 서버에 연결하여 메시지를 보내는 클라이언트 측 소켓 프로그램입니다.

import socket

# 서버의 IP 주소와 포트 번호
ip_address = "127.0.0.1"
port = 1234

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

# 서버에 연결
client_socket.connect((ip_address, port))

# 메시지 전송
message = "Hello, Server!"
client_socket.send(message.encode())

# 서버로부터 응답받기
response = client_socket.recv(1024)
print("서버로부터 받은 응답:", response.decode())

# 클라이언트 소켓 종료
client_socket.close()

위의 코드는 socket 모듈을 사용하여 클라이언트 소켓을 생성하고, 서버에 연결하는 간단한 예제입니다. ip_addressport 변수에 서버의 IP 주소와 포트 번호를 입력한 후, connect() 함수를 사용하여 서버에 연결합니다. 그리고 send() 함수를 사용하여 메시지를 서버로 전송하고, recv() 함수를 사용하여 서버로부터 응답을 받습니다.

서버 소켓 코드 작성하기

이제는 서버 측 소켓 코드를 작성해보겠습니다. 아래의 예제 코드는 클라이언트로부터 메시지를 받아서 응답하는 간단한 서버 프로그램입니다.

import socket

# 서버의 IP 주소와 포트 번호
ip_address = "127.0.0.1"
port = 1234

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

# IP 주소와 포트 번호 바인딩
server_socket.bind((ip_address, port))

# 클라이언트의 접속 대기
server_socket.listen(1)

print("서버가 시작되었습니다.")

while True:
    # 클라이언트로부터 연결 요청 수락
    client_socket, addr = server_socket.accept()
    print("클라이언트가 접속되었습니다:", addr)

    # 클라이언트로부터 메시지 받기
    message = client_socket.recv(1024)
    print("클라이언트로부터 받은 메시지:", message.decode())

    # 응답 보내기
    response = "Hello, Client!"
    client_socket.send(response.encode())

    # 클라이언트 소켓 종료
    client_socket.close()

위의 코드는 socket 모듈을 사용하여 서버 소켓을 생성하고, 클라이언트의 연결을 기다리는 간단한 예제입니다. 마찬가지로 ip_addressport 변수에 서버의 IP 주소와 포트 번호를 입력한 후, bind() 함수를 사용하여 IP와 포트 번호를 설정합니다. 그리고 listen() 함수로 클라이언트의 연결을 대기하고, accept() 함수로 클라이언트의 연결 요청을 수락합니다. 연결이 수락되면 클라이언트와의 통신을 위한 소켓이 생성되고, recv() 함수로 클라이언트로부터 메시지를 받습니다. 그리고 send() 함수를 사용하여 클라이언트에게 응답을 보냅니다.

실행 및 테스트

클라이언트와 서버 소켓 코드를 작성한 후, 다음 단계를 따라 실행하고 테스트해보세요.

  1. 다음과 같이 터미널을 실행합니다.
    $ python server.py
    
  2. 새로운 터미널 탭을 열고, 다음과 같이 클라이언트를 실행합니다.
    $ python client.py
    
  3. 클라이언트 프로그램은 서버에게 “Hello, Server!” 메시지를 보내고, 서버는 클라이언트에게 “Hello, Client!”라는 응답을 보냅니다.

이상으로 Socket (소켓) 애플리케이션을 테스트하는 방법에 대해 알아보았습니다. Socket 프로그래밍은 네트워크 통신을 위한 핵심 개념이므로, 효율적이고 안정적인 애플리케이션을 개발하는 데 도움이 될 것입니다. 항상 테스트와 디버깅을 통해 에러를 최소화하고, 원활한 통신을 위한 노력이 필요합니다.