안녕하세요 징키입니다 :)
오늘은 웹소켓 사용하기 시리즈 중 첫 번째인 웹소켓에 대한 이해를 공유하려고 합니다.
WebSocket이란?
- 웹소켓은 지속적인 연결을 통해 브라우저와 서버 사이의 데이터를 교환하는 연결 방식이다.
- 웹소켓은 처음 연결 시 HTTP 통신을 통해 handshake*를 하게 된다.
- 패킷의 형태로 양방향 데이터 전달이 추가적인 HTTP 요청 없이 가능하다.
- 웹소켓은 실시간 데이터 교환이 이루어져야 하는 채팅, 온라인 게임이나 주식 거래 시스템과 같은 서비스에 유용하다.
Handshake
Websocket과 HTTP
HTTP와 Websocket을 비교하는 것이 맞을까요?
Websocket을 검색하면 HTTP와 Websocket을 비교하는 글이 많이 볼 수 있습니다.
그래서! 이 둘을 비교하는 것이 적절한지 확인하기 위해 국내외 Websocket과 관련된 글을 읽어봤습니다.
그리고, HTTP와 Websocket을 비교하는 것은 적절하지 않은 것 같다는 결론을 내렸습니다
이유는 Websocket도 handshake 과정에서 HTTP를 사용하기 때문입니다.
연결을 성공한 뒤에는 TCP 연결이 클라이언트-서버의 연결을 끊지 않고 유지합니다. 결과적으로 Websocket은 한번의 TCP 연결 통해 데이터를 주고받게 됩니다.
그래서 HTTP를 기반으로 통신하는 REST와 비교하는 것이 맞다고 생각했습니다.
Websocket과 REST의 차이
구분 | WebSocket | REST |
퍼포먼스 | 웹소켓은 오버헤드가 낮다. 지연시간이 적다. 데이터를 지속적으로 주고 받아야 하는 경우에 적합하다. |
웹소켓에 비해 오버헤드가 높다. CRUD 요청에 적합하다. |
HTTP사용 | Handshake를 할때 HTTP를 사용한다. | 서버 요청 시 HTTP를 사용한다. |
통신 | 이벤트 기반, 양방향 통신이다. | 요청 기반, 단방향 통신이다. |
연결 상태 | stateful | stateless |
TCP 연결 | 한 번의 TCP 연결을 통해 데이터를 주 받는다. | 서버에 요청과 응답을 받기 위해 매번 새로운 TCP 연결이 발생한다. |
Websocket과 REST는 각각의 특징을 가지고 있습니다.
그렇기 때문에, 사용할 어플리케이션의 특성에 따라 Websocket과 REST를 적절히 쓰는 것이 중요합니다.
참고
https://javascript.info/websocket
https://medium.com/nerd-for-tech/websockets-vs-rest-a876a5c3ffd
https://meongae.tistory.com/93
https://ably.com/topic/websocket-vs-rest