🟣

Network: 소켓(Socket)과 웹소켓

작성일자
May 21, 2023
태그
CS
프로젝트
책 종류

소켓(Socket)

정의

  • 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미
  • 네트워크를 통해 데이터를 송수신하는 데 사용되는 소프트웨어 엔드포인트
  • OS 커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스

특징

  • 서로 다른 컴퓨터나 프로세스 간에 데이터를 주고받을 수 있는 인터페이스 역할을 함
  • 특정 포트 번호와 연결되어 있음
    • TCP에서 데이터 보낼 응용 프로그램을 식별할 수 있음
  • 구성 요소
    • 인터넷 프로토콜(TCP, UDP, raw IP)
    • 로컬 IP 주소
    • 로컬 포트
    • 원격 IP 주소
    • 원격 포트

종류 : 서버 소켓과 클라이언트 소켓

notion image

동작 방식 : 서버와 클라이언트 간의 통신 구조

  • 소켓을 생성하고, 주소를 바인딩하고, 연결하고, 데이터를 송수신하며, 연결을 종료하는 과정
  • 이를 위해 각 언어 및 프레임워크에서 소켓을 조작하는 API와 라이브러리가 제공됨
  • 단순 도식화한 것
    • notion image
  • 함수들로 구성한 것
    • notion image
      notion image

실시간 통신이 가능한 이유

  1. 양방향 통신: 소켓을 사용하면 클라이언트와 서버 간에 양방향 통신이 가능함. 클라이언트는 서버에 요청을 보내고, 서버는 클라이언트에 응답을 보낼 수 있음. 이를 통해 실시간으로 데이터를 주고받을 수 있음.
  1. 지속적인 연결: 소켓은 TCP/IP 프로토콜을 기반으로 동작함. TCP는 연결 기반 프로토콜로, 클라이언트와 서버 간에 지속적인 연결을 유지함. 이 연결은 실시간 통신을 가능하게 함. 클라이언트나 서버가 언제든지 데이터를 전송할 수 있고, 상대방은 이를 즉시 수신할 수 있음.
  1. 이벤트 기반 통신: 소켓은 이벤트 기반으로 동작함. 클라이언트나 서버는 데이터 수신, 송신, 연결 종료 등의 이벤트를 감지하고 이에 대한 처리를 할 수 있음. 이를 통해 실시간으로 데이터를 주고받을 때 필요한 즉각적인 처리가 가능함.
  1. 다양한 프로토콜 지원: 소켓은 다양한 프로토콜을 지원함. 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