Web Socket

강지원·2022년 2월 23일
0
post-thumbnail

1. Web Socket 사용 이유

http 통신만으로 모든 데이터를 가져와 처리하던 과거완 다르게
복잡해진 현재의 서비스를 더 수월하게 제공하기 위함이다.

http 통신이 안 좋다는 것이 아니다.
여전히 서버와 통신을 하기 위해서 http 방식으로 통신을 하는 것은 기본이고,
나 또한 항상 http 방식에 따른 통신을 해왔다.

하지만 실시간으로 데이터를 전달받아야 하는 기능이 있다면?

기존의 http 통신을 몇 초마다 한 번씩 요청하고,
그에 대한 응답을 받으면 된다.
그렇지만 매번 서버에 요청을 한다는 것이 비효율적이라고 느꼈다.

매번 클라이언트 측에서 데이터를 요청하는 것 보다
서버에서 자동으로 데이터를 보내주도록 만들어 주는 것이
효율적이지 않을까라는 생각이 들었고
여기서부터 웹소켓에 대한 공부가 필요했다.


2. Web Socket 사용 방법

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

웹소켓 API(=ws)를 그대로 사용하기 보단 대부분의 경우 SockJS나 Socket.IO같은 오픈 소스 라이브러리를 많이 사용하고 있다.


3. Web Socket의 문제점

  1. 프로그램 구현에 보다 많은 복잡성을 초래할 수 있다.
    웹 소켓은 Stateful protocol이기에 서버와 클라이언트 간의
    연결을 항상 유지해야 하며 만약 비정상적으로 연결이 끊어졌을때
    적절하게 대응해야 한다.

http는 요청에 대해서 성공인지 실패인지를 확실하게 알려준다.
하지만 웹소켓은 요청에 대한 응답을 확인해봐야 하기 때문에
응답에 대한 코드를 작성하며 프로그램 구현에 복잡성을 불러올 수 있다.

  1. Socket 연결에 따른 비용의 부담이 커진다.
    실시간 데이터를 다루는 등의 트래픽 양이 많은 서버는 자원과
    서버 운영에 대한 비용의 부담이 커질 수 밖에 없다.

  2. 구버전 웹 브라우저에서는 지원하지 않는다.
    (but, SockJS - Fallback option을 제공)


Reference
MDN WebSocket
WebSocket blog
WebSocket blog

profile
'Why' better than 'Yes'

0개의 댓글