들어가며
개발자가 실시간 데이터 전송, 장비 연동, 서버 간 통신, 채팅 시스템 등을 구현할 때 반드시 만나게 되는 개념이 있습니다.
바로 **소켓(Socket)**입니다.
소켓은 네트워크 상에서 컴퓨터 간 통신을 가능하게 해주는 **프로세스 간 통신(IPC, Inter-Process Communication)**의 한 형태이며, TCP/IP 기반 통신의 가장 핵심적인 기술 중 하나입니다.
이 글에서는 소켓 통신의 개념, 구조, TCP와 UDP의 차이, 서버-클라이언트 간 동작 흐름을 살펴보며 📂 Network / Socket Communication 카테고리의 출발점을 마련하겠습니다.

소켓(Socket)이란?
소켓은 **네트워크 연결의 끝점(endpoint)**입니다.
즉, 두 컴퓨터 간 통신을 위해 서로 연결되는 '통신 인터페이스'라고 할 수 있습니다.
소켓 통신은 IP 주소 + 포트 번호 조합을 통해 서로 데이터를 주고받는 구조로 동작합니다.
✔ 소켓 = IP + Port + Protocol(TCP/UDP)로 구성된 연결 단위
TCP 소켓 vs UDP 소켓
항목 | TCP | UDP |
연결 방식 | 연결 기반 (3-way handshake) | 비연결 기반 (빠름) |
신뢰성 | 보장 (순서, 재전송) | 보장하지 않음 (순서 보장 없음) |
속도 | 느림 (신뢰성 확보 비용) | 빠름 (간단한 전송 구조) |
사용 예시 | 웹 서버, 파일 전송, DB 통신 | 스트리밍, 게임, 센서 데이터 |
실시간성이 중요할수록 UDP, 안정성이 중요할수록 TCP를 선택합니다.
소켓 통신 흐름 (TCP 기준)
- 서버 소켓 열기: 포트를 바인딩하여 대기 상태 유지 (ServerSocket)
- 클라이언트 요청: 서버 IP와 포트로 연결 요청 시도 (Socket)
- 3-way handshake: 연결 확립 (SYN → SYN/ACK → ACK)
- 데이터 송수신: 양방향으로 스트림 기반 데이터 주고받기
- 연결 종료: FIN/ACK을 통한 종료 핸드셰이크 진행
실무에서 소켓 통신이 필요한 상황들
분야 | 활용 예시 |
실시간 시스템 | 채팅, 알림, 게임 서버, 실시간 피드 |
장비 연동 | 프린터, 저울, 바코드 리더기 (Zipher 등) |
로컬 IPC | 클라이언트-서버 간 직접 통신 (ex. Redis 클라이언트) |
분산 시스템 | 서버 간 통신, 메시지 브로커 직접 연결 등 |
실무 포인트
- TCP 소켓은 연결 관리가 핵심 → 타임아웃, 재시도, keep-alive 설정 필요
- 포트 충돌, 방화벽, NAT 환경에서는 포트 바인딩 에러 고려해야 함
- 병렬 클라이언트 처리 시 스레드/비동기/이벤트 루프 구조 고려 필요
- 소켓이 닫히지 않으면 리소스 누수 발생 가능 → 명시적 close() 처리 필요
마치며 – 앞으로 다룰 Socket Communication 시리즈
📂 Network / Socket Communication 카테고리에서는 다음과 같은 실무 주제를 정리할 예정입니다:
- Java로 TCP 소켓 서버/클라이언트 구현하기
- 멀티 클라이언트 구조 (스레드 vs 비동기 NIO)
- 프린터/저울과의 TCP 기반 연동 구조 설계
- 소켓 타임아웃 및 재시도 로직 설계
- 웹소켓과의 차이점 (WebSocket vs Socket)
단순한 개념을 넘어 실전 통신을 이해하고 싶다면, 소켓부터 제대로 알아야 합니다. 지금부터 하나씩, 진짜 네트워크를 연결해봅시다!
뭔가 쓰는 중…
📌 다음 글 미리보기
👉 이벤트 루프와 논블로킹 구조
📚 socket통신 시리즈 전체 보기
👉 https://jobreview.tistory.com/category/network/socket_communication
댓글