socket 모듈은 「네트워크 통신(TCP·UDP)의 가장 저수준」을 다루는 표준 라이브러리입니다.
HTTP, FTP 같은 모든 상위 프로토콜이 결국 socket 위에서 동작합니다.
직접 쓸 일은 적지만 네트워크의 토대를 이해하는 데 중요합니다.
TCP 클라이언트 기본.
import socket.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM).
s.connect(("example.com", 80)).
s.send(b"GET / HTTP/1.0\r\n\r\n").
data = s.recv(4096).
s.close().
HTTP 요청을 가장 원시적인 형태로 보내는 셈입니다.
TCP 서버 기본.
server = socket.socket(); server.bind(("localhost", 8000)); server.listen(); conn, addr = server.accept(); data = conn.recv(1024); conn.send(b"Hello"); conn.close().
「듣고(listen) → 받고(accept) → 주고받기」의 순서.
UDP는 「연결 없는」 단순 메시지.
socket.SOCK_DGRAM 사용.
신뢰성은 떨어지지만 빠르고 가벼워 게임·DNS·실시간 영상 같은 곳에 쓰입니다.
TCP가 「전화 통화(연결 후 대화)」라면 UDP는 「엽서 보내기(주소만 적어 던지기)」와 같습니다.
직접 socket을 다루는 일은 드물지만 알아 두면 좋은 이유.
1) 「HTTP·WebSocket이 어떻게 동작하는지 이해」.
2) 「특수 프로토콜 직접 구현」(자체 게임 서버 등).
3) 디버깅 시 「네트워크 레이어가 정확히 어디서 막혔는지」 진단.
보통은 requests·websockets 같은 상위 라이브러리를 쓰지만, 그것들이 결국 socket 위에 있다는 점은 알아 두면 좋습니다.
한 줄 요약
socket은 TCP·UDP 네트워크 통신의 가장 저수준을 다룹니다.
HTTP·FTP 등이 모두 socket 위에 있고, TCP는 신뢰성, UDP는 속도가 강점입니다.
더 알아볼 것
- asyncio.start_server — 비동기 TCP 서버
- WebSocket — socket 위의 양방향 통신
- SocketServer 모듈