소켓(Socket)정의특징종류 : 서버 소켓과 클라이언트 소켓동작 방식 : 서버와 클라이언트 간의 통신 구조실시간 통신이 가능한 이유활용소켓 vs 웹소켓공통점차이점결론웹소켓정의/특징한계
소켓(Socket)
정의
- 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미
- 네트워크를 통해 데이터를 송수신하는 데 사용되는 소프트웨어 엔드포인트
- OS 커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스
특징
- 서로 다른 컴퓨터나 프로세스 간에 데이터를 주고받을 수 있는 인터페이스 역할을 함
- 특정 포트 번호와 연결되어 있음
- TCP에서 데이터 보낼 응용 프로그램을 식별할 수 있음
- 구성 요소
- 인터넷 프로토콜(TCP, UDP, raw IP)
- 로컬 IP 주소
- 로컬 포트
- 원격 IP 주소
- 원격 포트
종류 : 서버 소켓과 클라이언트 소켓

동작 방식 : 서버와 클라이언트 간의 통신 구조
- 소켓을 생성하고, 주소를 바인딩하고, 연결하고, 데이터를 송수신하며, 연결을 종료하는 과정
- 이를 위해 각 언어 및 프레임워크에서 소켓을 조작하는 API와 라이브러리가 제공됨
- 단순 도식화한 것

- 함수들로 구성한 것


실시간 통신이 가능한 이유
- 양방향 통신: 소켓을 사용하면 클라이언트와 서버 간에 양방향 통신이 가능함. 클라이언트는 서버에 요청을 보내고, 서버는 클라이언트에 응답을 보낼 수 있음. 이를 통해 실시간으로 데이터를 주고받을 수 있음.
- 지속적인 연결: 소켓은 TCP/IP 프로토콜을 기반으로 동작함. TCP는 연결 기반 프로토콜로, 클라이언트와 서버 간에 지속적인 연결을 유지함. 이 연결은 실시간 통신을 가능하게 함. 클라이언트나 서버가 언제든지 데이터를 전송할 수 있고, 상대방은 이를 즉시 수신할 수 있음.
- 이벤트 기반 통신: 소켓은 이벤트 기반으로 동작함. 클라이언트나 서버는 데이터 수신, 송신, 연결 종료 등의 이벤트를 감지하고 이에 대한 처리를 할 수 있음. 이를 통해 실시간으로 데이터를 주고받을 때 필요한 즉각적인 처리가 가능함.
- 다양한 프로토콜 지원: 소켓은 다양한 프로토콜을 지원함. TCP를 사용하면 신뢰성 있는 데이터 전송이 가능하며, UDP를 사용하면 빠른 속도로 데이터를 전송할 수 있음. 이렇게 다양한 프로토콜을 지원하기 때문에 실시간 통신에 적합한 환경을 구성할 수 있음.
활용
- 웹 서버와 클라이언트 간의 통신, 실시간 채팅 애플리케이션, 온라인 게임, 스트리밍 서비스, 실시간 주식 거래 사이트
소켓 vs 웹소켓
공통점
- IP와 포트를 통한 통신을 함
- 양방향 통신을 함
차이점
- 소켓은 TCP/IP 레이어(4계층)에서 작동하고, 웹 소켓은 HTTP 레이어(7계층)에서 작동함
- TCP에 기반한 소켓 통신은 단순히 바이트 스트림을 통한 데이터 전송이므로 바이트로 이루어진 데이터를 다룸, 웹 소켓 통신은 7계층에 기반해 메시지 형식의 데이터 다룸.
결론
사실 이 둘은 서로 상반되는 개념이 아니기 때문에 완전하게 차이점을 비교할 수는 없다. 웹에서도 TCP 소켓 통신으로 실시간 통신을 할 수는 있지만, 전송 계층의 원시 바이트 대신 애플리케이션 계층을 통해 메시지를 보내는 것이 개발 측면에서 더 적합하기 때문에 TCP 소켓통신에 기반하여 웹 소켓을 발전시킨 것이기 때문이다.
한 마디로 웹 소켓은 TCP 소켓과 구분되는 것이 아니라 TCP 소켓의 추상화된 형태이다.
따라서 “웹 소켓과 소켓은 전혀 다르다” 보다는 “소켓 통신에 기반하여 웹 소켓은 웹 어플리케이션에 맞게 발전한 형태로 소켓 통신을 한다” 라고 보면 좋을 것 같다.
웹소켓
정의/특징
- HTML5에서 소개된 기술로, 웹 브라우저와 서버 간의 양방향 실시간 통신을 제공
- HTTP는 실시간 통신을 할 수 없단 문제 해결하기 위해 나옴
- HTTP는 단방향적 구조(요청 보내면 응답이 옴)로 통신해서 TCP/IP 프로토콜을 사용하는 소켓처럼 계속 connection이 유지되는 실시간 통신을 할 수 없음
- 클라이언트와 서버 간의 통신을 단순화하고, 프로토콜을 자동으로 처리하여 개발자가 더 쉽게 실시간 기능을 구현할 수 있도록 해줌
한계
- HTML5 이전 기술로 구현된 서비스에선 사용 불가
- 대체제
- Soket.io, SockJS
- STOMP
- 참고)
https://kotlinworld.com/75 ← http와 차이점 궁금하다면 참고하기(본문엔 담지 않음)
