기존의 http, https 요청의 경우를 생각해보죠. 클라이언트에서 서버로 요청을 보내고 서버가 요청에 대한 응답을 하게 되죠. 이것을 단방향 통신이라고 합니다.
그러나 HTML5에서 웹 소켓이 새롭게 추가되면서 단방향 통신이 아닌 양방향 통신을 할 수 있게 됐습니다. 즉, 업데이트가 필요하진 요청을 보내지 않더라도 서버에서 알아서 클라이언트로 데이터를 보내주죠. 웹 소켓이 없었던 시절에는 polling 방식이라 해서 주기적으로 서버에 업데이트할 데이터가 있는지 요청을 보냈습니다. 듣기만 해도 매우 비효율적이죠??
웹 소켓은 http프로토콜과는 다르게 WS프로토콜을 사용합니다. http 프로토콜이 사용하는 포트와 공유가 되기때문에 다른 포트에 따로 연결해줄 필요는 없습니다.
제가 지금 공부하는 node.js에서는 ws 또는 socket.io 패키지를 통해서 WS프로토콜을 사용해 웹 소켓을 구현할 수 있습니다.
앞에서 웹 소켓은 클라이언트와 서버 사이의 양방향 통신을 말한다고 설명했죠. SSE는 서버에서 클라이언트로 데이터를 보내는 단방향 통신을 의미합니다. SNS 게시물을 가져오거나 할 때 굳이 양방향 통신을 할 필요가 없겠죠. 이럴때 SSE를 사용합니다. 당연히 웹 소켓으로 구현할 수도 있겠죠?
ws와 socket.io 패키지를 사용해보고 느낀점은 둘 다 이벤트 발생과 이벤트 리스너를 통해 클라이언트와 서버에서 어떤 로직을 처리한다는 점입니다.. node.js를 배우며 익숙해져있던 방식이었기 때문에 금방 적응할 수 있었습니다.
또한 실시간 채팅, 실시간 포스트 같은 기능을 어떻게 구현할 수 있을지 항상 궁금했었는데 웹 소켓을 활용한 방식이 하나의 방법으로 사용할 수 있다는 것을 깨달았습니다!
- 조현영『Node.js 교과서』, (주)도서출판 길벗(2019년 2월 2일), 웹소켓 이해하기