여행 일정 공유사이트를 만들며 

여러명이서 실시간으로 편집상태를 공유하는 기능이 있으면 좋겠다고 생각했고, 

이를 위해 웹소켓을 연동하게 되었다.

일정 편집 공유 페이지

 

 

기본 HTTP는 stateless하기 때문에 서버에 변경사항이 생겨도 클라이언트에서 요청을 하지 않으면 변경사항이 적용되지 않는 반면 WebSocket은 지속적으로 connection을 유지하기 때문에 실시간으로 변경사항이 적용된다!

 

웹소켓의 이런 특징을 이용해 실시간 편집기능을 구현할 수 있다.

 

그리고 WebSocket 은 HTTP를 통해 최초 연결(핸드세이크)되며
이후 일정 시간이 지나면 HTTP연결은 자동으로 끊어지고 WebSocket Connection은 유지된다

 

다만 웹소켓은 stateful 프로토콜로서 connection을 항상 유지해야하기 때문에 트래픽이 많은 경우 서버에 부담이 될 수 있다는 점을 유의해야 한다!!

 

 

보통 polling , long polling과 비교가 많이 되기에 세개의 특징을 알아보쟈

 

 

 

📌polling

클라이언트가 서버로 주기적으로 request를 날려서 이벤트내용을 확인하도록 하는 것

클라이언트가 많아지면 서버에 부담이 되며, 실시간성도 아니다. 

 

📌 long polling

클라이언트가 서버로 request를 보내되, 서버에서는 이벤트내용이 있을때까지 기다렸다가(long) 응답을 내려주는 것.

클라이언트는 응답을 받으면 서버로 다시 요청을 보내둔다. 즉, 이벤트내용을 통지받을때까지 커넥션을 물고있는 것이다. 

요청량은 줄어드나, 이벤트가 계속 발생한다면 polling방식과 비슷한 단점이 발생한다.

 

📌 WebSocket 

HTTP 환경에서 양방향 통신을 지원하기 위한 프로토콜FH HTML5 표준에도 들어갔다.

HTTP 프로토콜을 기반으로 하므로 기존 요청-응답처럼 80(or 443)에서 Handshake 후

ws(or wss)로 프로토콜을 변환해서 커넥션을 맺는다.

이렇게 맺어진 커넥션은 종료(유저가 페이지를 나가는 경우 등) 될 때까지 통신한다.

 

 

다음 포스팅에서는 프로젝트 코드에 직접 적용하는 방법을 작성할 예정이다

 

 

 

참고자료

https://docs.spring.io/spring-framework/docs/4.3.18.RELEASE/spring-framework-reference/html/websocket.html

https://velog.io/@bagt/Spring%EC%97%90%EC%84%9C-%EC%9B%B9-%EC%86%8C%EC%BC%93WebSocket-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

복사했습니다!