728x90
네트워크 통신을 공부하다 보면 가장 먼저 마주치는 벽이 바로 소켓(Socket)이죠. 쉽게 비유하자면 소켓은 "네트워크상의 두 프로그램이 대화를 나누기 위해 사용하는 전화기" 혹은 "데이터가 드나드는 연결 구멍"이라고 이해하시면 됩니다.
1. 소켓(Socket)이란?
컴퓨터 네트워크에서 소켓은 통신의 종착점(Endpoint)을 의미합니다.
우리가 친구에게 전화를 걸 때 상대방의 전화번호를 알아야 하듯, 네트워크 통신에서는 IP 주소(어느 컴퓨터인지)와 포트(Port) 번호(그 컴퓨터의 어떤 프로그램인지)가 필요합니다. 이 두 가지 정보가 결합되어 하나의 소켓을 형성합니다.
주요 특징
- 추상화: 복잡한 네트워크 하부 계층(TCP/IP 등)을 몰라도, 소켓 API를 통해 데이터를 주고받을 수 있게 해줍니다.
- 양방향성: 데이터를 보낼 수도, 받을 수도 있는 통로입니다.
2. 왜 사용하는가?
단순히 웹서핑을 하는 것(HTTP)을 넘어, 우리는 실시간으로 데이터를 주고받아야 할 때가 많습니다.
- 실시간 통신: 카카오톡 같은 채팅 앱, 온라인 게임처럼 지연 시간이 적고 즉각적인 데이터 교환이 필요할 때 필수적입니다.
- 연결 지향성: 한 번 연결을 맺으면 끊기 전까지 계속 통신할 수 있어, 반복적인 연결 설정 비용을 줄일 수 있습니다.
- 범용성: 운영체제나 프로그래밍 언어에 상관없이 표준화된 방식으로 통신할 수 있게 해줍니다.
3. 어떻게 사용하는가? (흐름도)
소켓 통신은 보통 클라이언트(요청자)와 서버(응답자) 모델로 작동합니다. 일반적인 TCP 소켓의 흐름은 다음과 같습니다.
서버 측 (Server)
- socket(): 소켓을 생성합니다.
- bind(): 생성한 소켓을 특정 포트 번호와 결합합니다.
- listen(): 클라이언트의 접속 요청을 기다리는 상태로 전환합니다.
- accept(): 접속 요청을 수락하고, 통신을 위한 새로운 전용 소켓을 만듭니다.
- read/write: 데이터를 주고받습니다.
클라이언트 측 (Client)
- socket(): 소켓을 생성합니다.
- connect(): 서버의 IP와 포트 번호로 연결을 시도합니다.
- write/read: 데이터를 주고받습니다.
- close(): 통신이 끝나면 소켓을 닫습니다.
요약
| 구분 | 설명 |
|---|---|
| 정의 | 네트워크 통신의 끝단(IP + Port) |
| 목적 | 프로그램 간의 실시간/양방향 데이터 교환 |
| 핵심 요소 | IP 주소, 포트 번호, 프로토콜(TCP/UDP) |
소켓은 현대 인터넷의 근간이 되는 기술입니다.
728x90
'기술 학습' 카테고리의 다른 글
| express로 socket 사용 방법 (0) | 2026.02.09 |
|---|---|
| 소켓(Socket)과 패킷(Packet)의 관계 (0) | 2026.02.09 |
| Java 비동기 (0) | 2026.02.05 |
| TypeScript는 싱글 스레드 (0) | 2026.02.05 |
| NestJS와 Spring에 연관성 (0) | 2026.02.05 |