웹소켓이해하기
웹소켓이란 말을 들으면 socket.io 를 먼저 떠올리는 경우가 많습니다. 하지만 socket.io 는 웹소켓을 활용한 라이브러리 웹 소켓 그 자체는 아닙니다.
웹 소켓은 HTML에서 새로 추가된 스펙으로 실시간 양방향 데이터 전송을 위한 기술입니다. HTTP와 다르게 Ws라는 프로토콜을 사용합니다. 따라서 브라우저와 서버가 WS 프로토콜을 지 원하면 사용할 수 있습니다. 최신 브라우저는 대부분 웹 소켓을 지원하고, 노드는 ws 나 Socket. io 같은 패키지를 통해 웹 소켓을 사용할 수 있습니다. 웹 소켓이 나오기 이전에는 HTTP 기술을 사용하여 실시간 데이터 전송을 구현했습니다. 그중 한 가지가 폴링(poling)이라고 불리는 방식입니다. HTTIP가 클라이언트에서 서버로 향하는 단방향 통신이므로 주기적으로 서버에 새로운 업데이트가 없는지 확인하는 요청을 보내 있다면 새로운 내용을 가져오는 단순무식한 방법이었습니다. 그러다 HTMLS가 나오면서 웹 브라우저와 웹 서버가 지속적으로 연결된 라인을 통해 실시간으로 데이터를 주고받을 수 있는 웹 소켓이 등장하였습니다. 처음에 웹 소켓 연결이 이루어지고 나면 그 다음부터는 계속 연결된 상태로 있어 따로 업데이트가 있는지 요청을 보낼 필요가 없습니다. 업데이트할 내용이 생겼다면 서버에서 바로 클라이언트에 알려줍니다. HTTP 프로토콜과 포트를 공유할 수 있으므로 다른 포트에 연결할 필요도 없습니다. 폴링 방식에 비해 성능도 매우 개선되 었습니다. 참고로 서버센트 이벤트(Server Sent Events, 이하 SSE)라는 기술도 등장했습니다. EventSour ce라는 객체를 사용하는데요. 처음에 한 번만 연결하면 서버가 클라이언트에 지속적으로 데이터를 보내 줍니다. 웹 소켓과 다른 점은 클라이언트에서 서버로는 데이터를 보낼 수 없다는 점입니다. 즉, 서 버에서 클라이언트로 데이터를 보내는 단방향 통신입니다. 웹 소켓만이 진정한 양방향 통신입니 다. 양방향 통신이므로 SSE에서 할 수 있는 것은 웹 소켓으로도 모두 다 할 수 있습니다. 하지만 주식 차트 업데이트나 SNS에서 새로운 게시물 가져오기 등 굳이 양방향 통신을 할 필요가 없는 경우도 많습니다. 서버에서 일방적으로 데이터를 내려주기만 하면 되기 때문이죠. 다음 장에서 경 매 시스템을 만들 때 SSE 기술을 사용해볼 것입니다.