소켓(Socket)
정의
•
네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미
•
네트워크를 통해 데이터를 송수신하는 데 사용되는 소프트웨어 엔드포인트
•
OS 커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스
특징
•
서로 다른 컴퓨터나 프로세스 간에 데이터를 주고받을 수 있는 인터페이스 역할을 함
•
특정 포트 번호와 연결되어 있음
◦
TCP에서 데이터 보낼 응용 프로그램을 식별할 수 있음
•
구성 요소
◦
인터넷 프로토콜(TCP, UDP, raw IP)
◦
로컬 IP 주소
◦
로컬 포트
◦
원격 IP 주소
◦
원격 포트
종류 : 서버 소켓과 클라이언트 소켓
동작 방식 : 서버와 클라이언트 간의 통신 구조
•
소켓을 생성하고, 주소를 바인딩하고, 연결하고, 데이터를 송수신하며, 연결을 종료하는 과정
•
이를 위해 각 언어 및 프레임워크에서 소켓을 조작하는 API와 라이브러리가 제공됨
•
단순 도식화한 것
•
함수들로 구성한 것
실시간 통신이 가능한 이유
활용
•
웹 서버와 클라이언트 간의 통신, 실시간 채팅 애플리케이션, 온라인 게임, 스트리밍 서비스, 실시간 주식 거래 사이트
소켓 vs 웹소켓
공통점
•
IP와 포트를 통한 통신을 함
•
양방향 통신을 함
차이점
•
소켓은 TCP/IP 레이어(4계층)에서 작동하고, 웹 소켓은 HTTP 레이어(7계층)에서 작동함
•
TCP에 기반한 소켓 통신은 단순히 바이트 스트림을 통한 데이터 전송이므로 바이트로 이루어진 데이터를 다룸, 웹 소켓 통신은 7계층에 기반해 메시지 형식의 데이터 다룸.
결론
사실 이 둘은 서로 상반되는 개념이 아니기 때문에 완전하게 차이점을 비교할 수는 없다. 웹에서도 TCP 소켓 통신으로 실시간 통신을 할 수는 있지만, 전송 계층의 원시 바이트 대신 애플리케이션 계층을 통해 메시지를 보내는 것이 개발 측면에서 더 적합하기 때문에 TCP 소켓통신에 기반하여 웹 소켓을 발전시킨 것이기 때문이다.
한 마디로 웹 소켓은 TCP 소켓과 구분되는 것이 아니라 TCP 소켓의 추상화된 형태이다.
따라서 “웹 소켓과 소켓은 전혀 다르다” 보다는 “소켓 통신에 기반하여 웹 소켓은 웹 어플리케이션에 맞게 발전한 형태로 소켓 통신을 한다” 라고 보면 좋을 것 같다.
웹소켓
정의/특징
•
HTML5에서 소개된 기술로, 웹 브라우저와 서버 간의 양방향 실시간 통신을 제공
•
HTTP는 실시간 통신을 할 수 없단 문제 해결하기 위해 나옴
◦
HTTP는 단방향적 구조(요청 보내면 응답이 옴)로 통신해서 TCP/IP 프로토콜을 사용하는 소켓처럼 계속 connection이 유지되는 실시간 통신을 할 수 없음
•
클라이언트와 서버 간의 통신을 단순화하고, 프로토콜을 자동으로 처리하여 개발자가 더 쉽게 실시간 기능을 구현할 수 있도록 해줌
한계
•
HTML5 이전 기술로 구현된 서비스에선 사용 불가
•
대체제
◦
Soket.io, SockJS
◦
STOMP