전체 보기
🟣

Network: 소켓(Socket)과 웹소켓

작성일자
2023/05/21
태그
CS
프로젝트
책 종류
1 more property

소켓(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
참고)
https://kotlinworld.com/75 ← http와 차이점 궁금하다면 참고하기(본문엔 담지 않음)