74일차

그루트·2021년 11월 27일
0

Socket.io를 이용한 실시간 양방향 통신 구현

HTTP 프로토콜 특징


http은 Connectionless하고 Stateless 한 프로토콜입니다. 즉, 계속 브라우저와 서버가 연결된 상태를 유지 하지 않는 다는 것입니다. 각각의 요청은 모두 무관한 독립적인 트랜잭션으로 취급합니다. 따라서 Real-Time Communication(실시간 양방향 통신)의 한계를 가지고 있습니다. http 서버는 클라이언트의 요청에 대한 응답만을 하기때문에 서버가 먼저 클라이언트로 데이터를 전송할 수 없습니다.

WebSocket 프로토콜


WebSocket은 사용자의 브라우저와 서버 사이의 양방향 연결 채널을 구성하는 html5의 프로토콜입니다. 이름에서도 알수 있듯, 소켓을 이용하여 자유롭게 서버와 클라이언트 사이의 데이터를 주고 받을 수 있습니다. 또한 stateless한 http에 비해 오버헤드가 적으므로 유용하게 사용될 수 있습니다.

WebSocket과 Polling 비교


Polling은 클라이언트가 일정 주기마다 서버에 요청을 보내 새로운 변경사항이 있는지 확인 합니다. 이 방식은 서버측에 변화가 없더라도 일정 주기마다 요청을 보내 확인을 해야 하므로 불필요한 트래픽이 낭비됩니다. 그러나 WebSocket 방식은 서버와 브라우저 간의 실시간 양방향 통신환경을 가질 수 있어, 서버가 먼저 데이터를 전송할 수 있습니다.

WebSocket 장단점


장점

WebSocket을 이용하면 서버와 클라이언트 사이의 양방향 통신이 가능합니다. WebSocket 프로토콜로의 Upgrade이후에는, 클라이언트의 요청 없이도 서버가 먼저 클라이언트에게 데이터를 전송할 수 있습니다.

단점

하지만 WebSocket을 모든 브라우저에서 지원하는 것은 아닙니다. 이를 해결하기 위해 아래에서 Socket.io에 대해 알아보도록 하겠습니다.

폴링(POLLING)이란?

실시간 웹 구현의 한계성!!

웹은 태생 자체부터 실시간을 위해 필수적인 지속되는 연결(persistent connection)을 가질 수 없다.
클라이언트에서 서버에 접속하면 응답하고 연결이 끊어진다. (HTTP의 특징)
때문에 안타깝게 현재 웹에서 운용되는 실시간 서비스들은 대부분 실시간이 아니다. (10초 단위 30초 단위라고 말할 수는 있을지는 몰라도 실시간은 아니다.)

실시간은 아니더라고 그렇게 보이는 리얼타임 웹 모델에 대해 알아보자.

위키피디아의 폴링 정의:
"폴링(polling)이란 하나의 장치(또는 프로그램)이 충돌 회피 또는 동기화 처리 등을 목적으로 다른 장치(또는 프로그램)의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 송수신 등의 자료처리를 하는 방식을 말한다."

즉 현존 하는 대부분의 실시간 처럼 보이는 웹사이트 들은 클라이언트가 서버에게 일정한 주기를 가지고 응답을 주고받는 폴링 방식을 사용한다.

이는 AJAX polling 이라고도 불리는데 주로 AJAX 호출을 사용하기 때문이다.

폴링의 문제점

  1. 폴링의 주기가 짧으면 서버의 성능에 부담이 간다.
  2. 주기가 길면 실시간성이 떨어진다.
profile
i'm groot

0개의 댓글