본문 바로가기
개발정보

웹소켓

by 잉여개발자 2022. 6. 6.

웹소켓? 

TCP 연결에 완전한 이중 통신 채널을 제공하는 컴퓨터 프로토콜이다. 

 

서버와 클라이언트 간의 웹소켓 연결은 HTTP 프로토콜을 통해 이루어지는데, 연결이 정상적으로 이루어진다면 
서버와 클라이언트 간에 웹소켓 연결(TCP/IP)이 이루어지고 일정 시간이 지나면 HTTP 연결은 자동으로 끊어진다. 

 

서버와 클라이언트 간의 효율정인 양방향 통신과 데이터 전송을 위해서 사용된다. 

일반적으론 클라이언트에서 Request를 보내면 서버에서 Response로 응답하는 StateLess 관계로 알고 있다. 

즉, HTTP 통신클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신 방식

하지만, 웹소켓StateFull하다. 

매번 요청을 보내는 것이 아닌 한 번의 요청으로 HandShake 과정을 거치고 연결을 유지해서 양방향 통신과 

데이터 이동이 가능하게 되는 것이다. 

 

웹소켓의 특징 

양방향 통신

  • 데이터 송수신을 동시에 처리할 수 있다. 
  • 클라이언트와 서버가 서로 원할 때 데이터를 주고받는다. 

실시간 네트워킹 

  • 웹 환경에서 연속된 데이터를 빠르게 노출한다. 
  • 여러 단말기에서 데이터를 빠르게 교환한다. 
    ex) 채팅, 주식, 비디오 데이터

적은 Overhead

  • Header가 상당히 작아서 OverHead가 적다. 

낮은 부하

  • HTTP Polling과 같은 반이중 방식에 비해 낮은 부하를 사용한다. 

웹소켓의 종류

socket.io

인터넷 익스플로러 구버전 사용자는 웹소켓으로 작성된 웹페이지를 볼 수 없다. 

이런 문제를 해결하기 위해서 socket.io는 웹페이지가 열리는 브라우저가 웹소켓을 지원하면 일반 웹소켓 방식으로, 

지원하지 않으면 http를 이용해 웹소켓을 흉내내는 방식으로 통신을 지원한다. 

 

sockjs

spring에서 구버전 브라우저 문제를 해결하기 위한 방법으로 sockjs를 제공한다. 

서버 개발시 일반 웹소켓으로 통신할지 sockjs 호환으로 통신할지 결정할 수 있다. 

 

stomp

단순 텍스트 지향 메시징 프로토콜이다. spring에 종속적이고, 구독 방식으로 사용하고 있다. 

 

Nodejs를 이용할 땐 socket.io를 주로 사용하고, spring을 사용할 땐 stomp, sockjs를 주로 사용한다. 

반응형

'개발정보' 카테고리의 다른 글

힙 메모리 단편화  (1) 2022.09.16
Github 동작 원리  (0) 2022.09.14
Side Effect  (1) 2022.05.16
Singleton 패턴  (2) 2022.05.04
바인딩  (2) 2022.05.02

댓글