Websocket이란?
Transport protocol의 일종으로 쉽게 이야기하면 웹버전의 TCP 또는 Socket이라고 이해하면 된다.
서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술이다.
채팅이나 게임, 실시간 주식차트와 같이 실시간으로 요구되는 응용프로그램의 개발을 효과적으로 구현하는데 큰 역할을 한다.
사용이유
웹어플리케이션에서 기존의 서버와 클라이언트 간의 통신은 대부분 HTTP를 통해 이루어 졌으며 HTTP는 Request/response기반의 Stateless protocol이다.
즉, 서버와 클라이언트는 Request를 할때만 서버가 Response를 하는 방식으로 통신이 진행되는 한방향 통신이기 때문에 이후 Connection을 끊게 된다.
이 경우, 서버쪽 데이터가 업데이트 되더라도 클라이언트 쪽에는 화면은 Refresh하지 않는한 변경된 데이터가 업데이트 되지 않는 문제가 발생한다.
이런 문제는 일반적은 웹어플리케이션에서는 기존의 있던 임시방편인 Long polling이라던가 Ajax를 사용해도 어느정도 해결이 가능하지만 데이터의 빠른 업데이트가 아주 중요한 요소 중에 하나인 어플리케이션에서는 실시간 업데이트가 아주 중요하기 때문에 Web Socket이 아주 중요한 기술로 사용되고 있다.
Web Socket은 Stateful protocol이기 때문에 클라이언트와 한 번 연결이 되면 계속 같은 라인을 사용해서 통신하기 때문에 HTTP 사용시 필요없이 발생되는 HTTP와 TCP연결 트래픽을 피할 수 있다. 마지막으로 Web Socket은 HTTP와 같은 포트(80)을 사용하기에 기업용 어플리케이션에 적용할 때 방화벽은 재설정 하지 않아도 되는 장점이 있다.
작동원리
서버와 클라이언트 간의 WebSocket연결은 HTTP프로토콜을 통해 이루어진다.
만약 연결이 정상적으로 이루어 진다면 서버와 클라이언트 간에 WebSocket연결(TCP/IP)이 이루어지고 일정 시간이 지나면 HTTP연결은 자동으로 끊어진다.
기본적으로 웹소켓 API는 아주 간단한 기능들만을 제공하기 때문에 대부분의 경우 SockJS나 Socket.IO같은 오픈 소스 라이브러리를 많이 사용하고 있으며 메시지 포맷 또한 STOMP같은 프로토콜을 같이 이용한다.
HTTP와 WebSocket의 차이점
HTTP
HTTP는 stateless하기 때문에 BackEnd가 유저를 기억하지 못한다.
이 말은 즉슨 유저와 BackEnd 사이에 아무런 연결이 없다는 뜻이다.
서버는 유저가 누구인지 까먹는다. 그렇기 때문에 response를 보낼 때 서버가 일치하는 정보의 cookie를 이용하여 데이터를 전달한다. 이 속성을 stateless라고 한다.
response 후에 서버는 잊어버리고 서버는 오직 request를 받을 때만 response를 해준다. 이것이 바로 단방향 통신이다.
그렇기 때문에 HTTP 프로토콜에서는 request와 response의 반복 과정이 일어나고 real-time으로는 일어나지 않는다.
WebSocket
브라우저가 서버로 webSocket request를 보내면, 서버가 받거나 거절을 하거나 선택하는데 수락할 시에 연결이 성립된다. 그럼 이제 브라우저와 서버는 커뮤니케이션하게 된다.
즉, 연결되어있기 때문에 서버는 유저가 누구인지 기억할 수 있다. 서버가 유저에게 메세지를 보낼수도 있다.
서버는 request를 기다리지 않아도 되고 언제 어느때나 메세지를 보낼 수 있다. 유저도 마찬가지.
request, response 과정이 필요하지 않고, 그냥 실시간으로 반응이 되는 것이다. 이것이 바로 양방형 연결이다.
결정적인 차이는 프로토콜이다.
WebSocket 프로토콜은 접속 확립에 HTTP를 사용하지만, 그 후 통신은 WebSocket 독자의 프로토콜로 이루어진다.
또한, header가 상당히 작아 overhead가 적은 특징이 있다.
장시간 접속을 전제로 하기 때문에, 접속한 상태라면 클라이언트나 서버로부터 데이터 송신이 가능하다. 더불어 데이터의 송신과 수신에 각각 커넥션을 맺을 필요가 없어 하나의 커넥션으로 데이터를 송수신 할 수 있다.
참조
https://duckdevelope.tistory.com/19
WebSocket 이란?
WebSocket이란 Transport protocol의 일종으로 쉽게 이야기하면 웹버전의 TCP 또는 Socket이라고 이해하면 된다. WebSocket은 서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이.
duckdevelope.tistory.com
'Etc' 카테고리의 다른 글
[Docker] Docker의 개념과 핵심 용어 (0) | 2022.02.01 |
---|---|
[OS] Linux와 Ubuntu (0) | 2022.02.01 |
[Web] WebRTC란? (0) | 2022.01.13 |
[Jira] 협업툴 Jira 사용법 (0) | 2022.01.12 |
eclipse JAVA 프로젝트를 intellij에서 import 하기 (0) | 2021.09.26 |