안녕하세요. 오늘은 소켓 프로그램밍의 기초에 대해서 알아보려고 합니다.
소켓 프로그래밍이란?
소켓 프로그래밍은 네트워크를 통해 두 프로그램이 서로 데이터를 주고받을 수 있게 해주는 프로그램 기법이에요. 쉽게 말해, 인터넷을 통해 다른 컴퓨터와 대화를 나눌 수 있게 해주는 방법이라고 생각하면 되요.
소켓은 마치 전화기와 같아요. 우리가 전화를 걸 때 전화번호(IP 주소)와 내선번호(포트 번호)를 이용하듯이, 소켓도 IP주소와 포트 번호를 이용해 통신해요.
소켓의 종류
소켓에는 크게 두가지 종류가 있어요.
- TCP 소켓 : 연결지향적이고 신뢰성이 높아요. 마치 전화 통화처럼, 연결을 먼저 설정하고 대화를 나눠요.
- UDP 소켓 : 비연결 지향적이고 신뢰성은 낮지만 속도가 빨라요. 마치 편지를 보낸 것과 비슷해요.
대부분의 경우 TCP 소켓을 사용하는데, 이는 데이터의 안전한 전송을 보장하기 때문이에요.
소켓 프로그래밍의 기본 흐름
소켓 프로그래밍의 기본 흐름은 서버와 클라이언트 모델을 따라요. 간단히 설명하자면 이렇답니다.
1.서버 측 :
- 소켓생성
- 소켓에 주소 할당(바인딩)
- 연결 요청 대기(리스닝)
- 클라이언트의 연결 수락
- 데이터 송수신
- 연결 종료
2.클라이언트 측 :
- 소켓 생성
- 서버에 연결 요청
- 데이터 송수신
- 연결 종료
이제 각 단계를 자세히 살펴 볼까요?
서버 측 프로그래밍

1. 소켓 생성
먼저 서버 소켓을 만들어야 해요. 파이썬을 예로 들면 이렇게 생성할 수 있어요.
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
여기서 AF_INET은 IPv4를 사용한다는 뜻이고, SOCK_STREAM은 TCP 소켓을 사용한다는 뜻이에요.
2. 소켓에 주소 할당(바인딩)
이제 만든 소켓에 IP 주소와 포트 번호를 할당해야 해요.
server_address = ('localhost', 12345)
server_socket.bind(server_address)
'localhost'는 현재 컴퓨터를 의미하고, 12345는 포트 번호예요.
3. 연결 요청 대기(리스팅)
서버가 클라이언트의 연결 요청을 기다리도록 설정해요.
server_socket.listen(1)
괄호 안의 숫자는 동시에 받아들일 수 있는 연결 요청의 수예요.
4.클라이언트의 연결 수락
클라이언트가 연경을 요청하면 이를 수락해요:
client_socket, client_address = server_socket.accept()
5.데이터 송수신
이제 클라이언트와 데이터를 주고받을 수 있어요.
data = client_socket.recv(1024)
client_socket.send(b"Hello, Client!")
print(data)
6.연결 종료
통신이 끝나면 소켓을 닫아요.
client_socket.close()
server_socket.close()
클라이언트 측 프로그래밍
1.소켓 생성
클라이언트도 소켓을 만들어요
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
2.서버에 연결 요청
서버의 주소와 포트 번호를 이용해 연결을 요청해요.
server_address = ('localhost', 12345)
client_socket.connect(server_address)
3.데이터 송수신
서버와 데이터를 주고 받아요.
client_socket.send(b"Hello, Server!")
data = client_socket.recv(1024)
print(data)
4.연결 종료
통신이 끝나면 소켓을 닫아요.
client_socket.close()
주의할 점
소켓 프로그래밍을 할 때 몇 가지 주의할 점이 있어요.
- 에러 처리 : 네트워크 통신은 언제나 오류가 발생할 수 있어요. try-except 구문을 사용해 예외 처리를 하는 것이 좋아요.
- 버퍼크기 : recv() 함수의 인자로 주는 숫자(예 : 1024)는 한 번에 받을 수 있는 데이터의 최대 크기예요. 큰 데이터를 주고 받을 때는 여러 번 나눠서 전송해야 해요.
- 인코딩 : 문자열을 보낼 때는 바이트 형식으로 변환해야 해요. 예를 들어, "Hello".encode()' 처럼 사용하면 돼요.
- 포트번호 : 이미 사용 중인 포트 번호를 사용하면 오류가 발생해요. 1024 이상의 번호를 사용하는 것이 안전해요.
마무리
지금까지 소켓 프로그래밍의 기초에 대해서 알아봤어요. 처음에는 복잡해 보일 수 있지만, 실제로 해보면 그리 어렵지 않습니다. 소켓 프로그램밍은 채팅 어플리케이션, 온라인 게임, 웹 서버 등 다양한 분야에서 활용되고 있어요. 여러분도 이제 기초를 배웠으니, 간단한 채팅 프로그램을 만들어보면 좋을것 같네요. 실제로 코드를 작성하고 실행해보면서 배우는 것이 가장 효율적 입니다. 오류가 나더라도 좌절하지 마세요. 그 과정에서 많은 것을 배울 수 있습니다.
'IT > Python' 카테고리의 다른 글
[Python] 파이썬으로 네트워크 스캐너 구현하기 (0) | 2025.01.18 |
---|---|
[Python] 파이썬을 이용한 채팅 프로그램 만들기 (0) | 2025.01.18 |
[Python] 파이썬으로 시스템 모니터링 도구 만들기 (0) | 2025.01.17 |
[Python] 파이썬을 이용한 이메일 자동 발송 스크립트 작성하기 (0) | 2025.01.17 |
[Python] 파이썬을 이용한 PDF 파일 이용하기 (0) | 2025.01.16 |