1. 소켓이란?
소켓(Socket)은 네트워크를 통해 데이터를 주고받기 위한 통신의 출입구임.
-
소켓은 컴퓨터 간의 통신에서 데이터를 송수신할 수 있는 도구
주로 IP 주소 + 포트 번호로 식별
소켓을 이용해 실시간 통신, 채팅, 게임, 파일 전송 등 다양한 네트워크 서비스를 구현할 수 있음
소켓의 종류로는 TCP 소켓과 UDP 소켓이 있음.
| 구분 | TCP 소켓 | UDP 소켓 |
|---|---|---|
| 연결 방식 | 연결 지향 (3-way handshake) | 비연결 지향 |
| 데이터 전송 | 순서 보장, 손실 없음 | 순서 보장 안 됨, 손실 가능 |
| 속도 | 상대적으로 느림 | 빠름 |
| 신뢰성 | 높음 | 낮음 |
| 사용 예시 | 채팅, 파일 전송, 웹 서비스 | 실시간 스트리밍, 게임, 음성 통화 |
***********
*TCP 소켓*
***********
연결 과정 – 3-Way Handshake
TCP는 데이터 전송 전에 연결을 맺는 과정이 필요하다.
이를 3-way handshake라고 부름.
클라이언트 → 서버 : SYN (연결 요청)
서버 → 클라이언트 : SYN + ACK (요청 수락 및 응답)
클라이언트 → 서버 : ACK (응답 확인) → 연결 성립
이 과정을 거쳐 서버와 클라이언트가 신뢰할 수 있는 연결을 맺게 됨.
연결이 완료되면 데이터를 양방향으로 자유롭게 주고받을 수 있음.
그럼 TCP와 HTTP의 차이점은?
TCP
TCP는 전송 계층의 프로토콜로, 신뢰성 있는 양방향 연결을 제공함.
즉, 데이터를 보내고 받는 과정에서 "연결"을 형성하고, 데이터가 정확히 전송되었는지 확인하는 과정을 거친다.
이 과정에서 3-way handshake와 같은 연결 수립 과정이 필요하고, 데이터가 전달되었는지, 순서대로 도착했는지 등의 신뢰성 있는 보장을 제공함.
- 연결: 클라이언트와 서버는 연결을 맺은 후 데이터를 주고받음.
- 응답 확인: 송신한 데이터에 대해 수신 확인(ACK)을 받음.
HTTP
HTTP는 응용 계층의 프로토콜로, 주로 웹 페이지 요청과 같은 클라이언트-서버 간의 요청과 응답을 처리함.
HTTP는 stateless(상태 비유지) 프로토콜.
즉, 각 요청은 독립적으로 처리되고, 이전의 요청이나 응답 상태를 기억하지 않습니다. HTTP 통신이 이루어지기 전에 내부적으로 TCP 연결이 필요.
- 요청-응답: 클라이언트는 서버에게 요청을 보내고, 서버는 그에 대한 응답을 반환함.
- 상태 비유지: 이전 요청에 대한 정보는 서버나 클라이언트가 기억하지 않음.
즉, 요청이 끝나면 연결이 종료.
결론적으로,
TCP는 연결을 유지하는 데 초점을 맞추고, 신뢰성 있는 데이터 전송을 제공.
HTTP는 요청-응답 기반으로 동작하는 애플리케이션 프로토콜이며,
HTTP 통신을 위해서는 먼저 TCP 연결이 이루어짐.
TCP는 HTTP 요청-응답과 매우 비슷하다. HTTP도 결국 TCP 연결을 통해 데이터가 주고받기 때문에.
HTTP는 TCP 위에서 동작하는 하나의 프로토콜.
HTTP 통신을 하기 위해서도 내부적으로 TCP 연결(3-way handshake 포함)이 필요하다.
************
*UDP 소켓*
************
연결 과정 없는 통신
UDP는 TCP처럼 3-way handshake 없이 바로 데이터를 전송.
- 비연결 지향(Stateless) 프로토콜
- 데이터를 보내는 쪽은 그냥 보냄, 받는 쪽은 열어두고 기다림
- 연결을 맺지 않기 때문에 속도가 매우 빠름
- 하지만 데이터 손실, 순서 뒤바뀜 등의 문제가 발생할 수 있음
UDP의 데이터 흐름
보내는 쪽: [목적지 IP][목적지 포트][데이터]
받는 쪽: 해당 포트를 열어놓고 데이터 수신 대기
"UDP는 신뢰성이 낮다"는 말의 의미는?
데이터 손실: 중간에 사라져도 재전송 안 함
순서 보장 없음: 보낸 순서와 다르게 도착 가능
수신 확인 없음: 받았는지 확인하지 않음
예시로
TCP: “안녕” → “안녕 잘 받았어!” (수신 확인 O)
UDP: “안녕” → (그냥 보냄, 상대방이 못 받았어도 모름)
Http: "웹페이지 요청" → "웹페이지 응답"
TCP와 UDP 소켓 통신 방식 요약
| 항목 | TCP 소켓 | UDP 소켓 |
|---|---|---|
| 연결 방식 | 연결 지향 (3-way handshake) | 비연결 지향 |
| 데이터 전송 | 순서 보장, 신뢰성 있음 | 빠름, 순서/신뢰성 없음 |
| 수신 확인 | 있음 (ACK) | 없음 |
| 재전송 | 자동 재전송 | 없음 |
| 사용 예시 | 채팅, 메일, 파일 전송 | 게임, 영상, 음성통화 등 |
TCP소켓과 UDP소켓 요약
- 소켓은 실시간 양방향 통신을 위한 네트워크 연결 지점이다.
- TCP 소켓은 연결을 수립하고, 신뢰성 있게 데이터를 주고받는다.
- UDP 소켓은 연결 없이 빠르게 데이터를 전송하지만 신뢰성이 낮다.
- 사용 목적에 따라 적절한 소켓 방식을 선택해야 한다.
| 상황 | 추천 소켓 |
|---|---|
| 채팅, 웹 요청, 파일 전송 | TCP |
| 게임, 음성 통화, 영상 스트리밍 | UDP |
여기까지 소켓에 대해 알아봤다.
이제 웹소켓은 무엇이고 소켓과 차이점이 뭔가?
2. 웹소켓이란?
웹 브라우저와 서버 간에 지속적인 연결을 유지하면서 양방향 통신을 가능하게 해주는 프로토콜.
: 웹에서 실시간 양방향 통신을 가능하게 하는 응용 계층의 소켓기반 프로토콜.
- HTTP handshake 이후, WebSocket 연결로 업그레이드됨
- 한 번 연결하면 계속 연결 상태 유지
- 양방향 통신(Bidirectional) 가능
- 빠른 속도, 낮은 오버헤드, 실시간 통신에 적합
웹소켓(WebSocket)은 TCP 기반.
- WebSocket은 먼저 HTTP 프로토콜을 통해 연결을 시작(핸드셰이크)하고, 연결이 성립되면 TCP 위에서 지속적인 양방향 통신을 수행.
- 덕분에 빠르고 안정적인 데이터 송수신이 가능. (신뢰성 있는 전송 보장)

3. Http vs Socket vs WebSocket
| HTTP | Socket(tcp/udp) | WebSocket | |
| 프로토콜 레벨 | 응용 계층 | 전송 계층 (TCP/UDP) | 응용 계층 (HTTP 기반 업그레이드) |
| 연결 유지 여부 | 요청 시마다 새 연결 | TCP는 연결 유지 / UDP는 비연결 | 한 번 연결하면 지속 유지 |
| 통신 방식 | 요청-응답 (클라이언트 → 서버) |
자유롭게 송수신 가능 (TCP/UDP에 따라 다름) |
양방향 (클라이언트 서버 자유롭게 전송) |
| 브라우저 사용 | 표준 | 직접 사용 어려움 (라이브러리 필요) | JavaScript에서 지원 |
| 실시간성 | 낮음 | TCP/UDP에 따라 다름 | 높음 |
| 사용 예시 | 웹페이지 로딩, API 호출 | 채팅, 스트리밍, IoT 등 네트워크 통신 전반 | 채팅 앱, 실시간 알림, 게임, 주식 등 |
'정리' 카테고리의 다른 글
| MA와 MSA 아키텍처 (0) | 2025.04.19 |
|---|---|
| SSO에 대해 알아보자 (1) | 2025.04.18 |
| index의 개념 (0) | 2025.04.16 |
| CICD와 무중단 배포 (0) | 2025.04.15 |
| java, spring 개념 정리 (0) | 2025.04.13 |