-
소켓 프로그래밍💻 computer science/🌐 network 2025. 8. 6. 17:55
🔍 소켓이란?
소켓(Socket) 컴퓨터 네트워크에서 데이터를 주고받기 위한 통신 종단점(endpoint)입니다.
서버와 클라이언트가 특정 포트를 통해 양방향 통신을 가능하게 하며 소켓이 각 애플리케이션에 통신 인터페이스를 제공합니다.
- 엔드포인트: IP 주소 + 포트 번호의 조합이 소켓의 고유 식별자
- 일반적으로 TCP/IP, UDP/IP 등 표준 네트워크 프로토콜을 사용
✅ 소켓이 하는일
역할 설명 양방향 데이터 송수신 소켓을 통해 서버와 클라이언트가 데이터를 주고받습니다. 네트워크 통신 추상화 소켓은 복잡한 네트워크 계층(IP, TCP/UDP 등)을 추상화하여 비교적 간단하게 통신 기능을 구현할 수 있도록 도와줍니다. IP 주소 및 포트 식별 소켓은 어떤 IP 주소의 어떤 포트로 통신할 것인지를 지정하고 이를 통해 여러 애플리케이션이 동시에 네트워크를 사용할 수 있게 합니다. 연결 관리(서버) 서버는 클라이언트의 접속 요청을 수락할 때마다 새로운 소켓을 생성하고 이를 통해 다수의 클라이언트와 동시에 통신할 수 있습니다. 🤖 소켓 종류
소켓은 주로 통신 프로토콜에 따라 두 가지 종류로 나뉩니다.
1️⃣ 스트림 소켓
- 프로토콜: 주로 TCP 사용
📖 특징
연결 지향 방식으로 데이터 전송의 신뢰성과 순서를 보장합니다.
데이터를 바이트 스트림 형태로 전송하며 데이터 손실이나 손상 시 재전송하여 완전한 데이터 전달을 보장합니다.
2️⃣ 데이터그램 소켓
- 프로토콜: 주로 UDP를 사용
📖 특징
비연결 지향(Connectionless) 방식입니다.
데이터 전송의 신뢰성이나 순서를 보장하지 않습니다.
데이터를 패킷(데이터그램) 단위로 전송하며 각 패킷은 독립적으로 처리됩니다.
연결 설정 과정이 없어 빠르지만 패킷이 유실되거나 순서가 뒤바뀔 수 있습니다.
🏃 소켓 통신 과정 (TCP / IP)
Server Socket
- 통신 연결 요청을 받아들이는 Socket
Client Socket
- 통신 연결 요청을 보내는 Socket

https://recipes4dev.tistory.com/153 ✅ Server Socket
1️⃣ 서버 소켓 생성 -
socket()네트워크 통신을 위한 빈 소켓(socket)을 생성합니다.
- 아직 특정 주소와 포트에 할당되지 않은 상태
2️⃣ 바인딩 -
bind()⭐생성된 소켓에 서버의 IP 주소와 포트 번호를 부여하여 네트워크 상의 고유한 '주소'를 할당합니다.

https://recipes4dev.tistory.com/153 🚀 이 작업이 필요한 이유
네트워크 주소 부여
- 서버는 여러 클라이언트의 요청을 기다려야 하는데 클라이언트가 어디로 요청을 보내야 할지 알아야 합니다.
- bind()는 소켓에 서버의 IP 주소와 서비스를 제공할 포트 번호를 결합해 클라이언트가 서버를 찾아올 수 있는 고유한 경로를 만들어 줍니다.
혼란 방지
- 만약 여러 서버 프로세스가 동일한 포트 번호를 사용하려 한다면 운영체제는 어떤 프로세스가 특정 포트로 들어온 데이터를 처리해야 할지 알 수 없습니다.
- bind()는 이 문제를 해결하기 위해 운영체제가 포트 번호를 사용하여 각 소켓을 유일하게 식별하고 관리할 수 있도록 합니다.
3️⃣ 연결 요청 대기 -
listen()바인딩된 소켓을 연결 요청 대기 상태로 전환합니다.
- 클라이언트로부터의 연결 요청을 받을 준비 완료!
listen() 함수는 동시에 처리할 수 있는 최대 클라이언트 연결 요청 수를 설정합니다
4️⃣ 연결 수락 -
accept()listen() 상태에서 클라이언트의 연결 요청이 오면 accept() 함수가 이를 수락합니다.
accept()는 요청을 수락함과 동시에 실제 데이터 통신에 사용할 새로운 소켓을 생성합니다.
- 새로운 소켓이 클라이언트와 1:1로 연결되어 데이터를 주고받게 됩니다.
5️⃣ 데이터 송수신 -
send()/recieve()accept()를 통해 생성된 새로운 소켓을 사용하여 클라이언트와 데이터를 주고받습니다.
6️⃣ 소켓 종료 -
close()통신이 끝난 후 소켓을 닫아 리소스를 반환합니다.
서버는 통신을 마친 소켓을 닫고 다시 accept()를 통해 다른 클라이언트의 연결을 기다릴 수 있습니다.
✅ Client 소켓
1️⃣ 소켓 생성 -
socket()- 서버와 통신할 소켓을 생성합니다.
클라이언트 소켓의 포트 번호는 보통 운영체제가 자동으로 할당합니다.
2️⃣ 연결 요청 -
connect()생성된 소켓을 이용해 서버의 IP 주소와 포트 번호로 연결을 요청합니다.
connect()함수는 서버의listen()과accept()과정에 응답해 연결이 성공적으로 이루어지면 통신 준비가 완료됩니다.3️⃣ 데이터 송수신 -
send()/recieve()연결된 소켓을 통해 서버와 데이터를 주고받습니다.
4️⃣ 소켓 종료 -
close()통신이 끝난 후 소켓을 닫아 리소스를 반환합니다.
📚 Ref.
https://www.ibm.com/docs/ko/i/7.6.0?topic=communications-socket-programming
https://docs.oracle.com/javase/tutorial/networking/sockets/definition.html
https://tyrionlife.tistory.com/781
https://velog.io/@rhdmstj17/소켓과-웹소켓-한-번에-정리-1
https://learn.microsoft.com/ko-kr/dotnet/api/system.net.sockets.socket?view=net-9.0
'💻 computer science > 🌐 network' 카테고리의 다른 글
웹 서버와 WAS (0) 2025.09.17 HTTP Request / Response 구조 (0) 2025.08.06 네트워크 통신 방식 - 유니캐스트, 브로드캐스트, 멀티캐스트 (0) 2025.08.06 HTTPS (0) 2022.10.09 TCP / UD (0) 2022.10.09