개발정리

스프링 웹소켓 문서읽기 본문

스프링/스프링 프레임워크

스프링 웹소켓 문서읽기

coffee. 2024. 2. 9. 15:34

웹소켓

-웹 소켓 프로토콜은 클라이언트와 서버 사이의 양방향,전이중 통신을 설정하는 표준화된 방식을 제공합니다.

-이것은 HTTP와 다른 TCP프로토콜 입니다. 그러나 80번과 443번 포트 번호를 사용하며 HTTP 위에서 동작하도록 디자인 되었습니다.

 

-웹소켓은 웹소켓 프로토콜로 바꾸기 위해서 HTTP upgrade요청과 함께 시작 됩니다.

 

1번:upgrade헤더

2번:upgrade 커넥션 사용

보통의 200status 코드 대신,웹소켓을 사용하는 서버는 다음과 같은 output을 리턴 합니다.

 

1번:프로토콜 스위치

 

성공적인 핸드쉐이크 이후,http upgrade 요청 아래에서 메세지를 주고받기 위한  tcp socket이 열려있습니다.

 

 

HTTP VS WebSocket

비록 웹소켓이 http와 호환이 되고 http 요청과 함께 시작되도록 디자인 되었지만 두 프로토콜에 대해 이해하는것은 중요합니다.

 

HTTP와 REST에서 애플리케이션은 많은 URL들로 모델링 되었습니다.

애플리케이션과 상호작용 하기위해, 클라이언트들은 URL들로 접근합니다.

서버들은 요청들을 적절한 핸들러로 라우팅 합니다.

 

이와 대조적으로, 웹소켓 에서는 보통 최초 연결을 위한 오직 한가지 URL을 사용합니다.

그 이후,모든 애플리케이션 메세지들은 같은 TCP 연결 위에서 흐릅니다.

이러한 점은 전적으로 비동기,이벤트 드라이븐,메시징 아키텍처 와는 다릅니다.

 

웹소켓은 또한 저수준 전송 프로토콜입니다. HTTP와 달리 메시지의 내용에 어떠한 의미도 규정하지 않습니다.

그 뜻은 메시지를 클라이언트와 서버가 메시지 구문에 동의 하지않는한 라우팅 하고 처리하는 방법이 없다는 것 입니다.

 

웹소켓 클라이언트와 서버는 고수준 메시지 프로토콜의 사용을 협상 할 수 있습니다.(ex.STOMP) http 핸드쉐이크 요청의 sec-websocket-protocol 헤더를 통해서.

그러한 것 없이는 그들은 제시해야합니다. 그들 자신만의 규약을.

 

언제 웹소켓을 사용해야 할까

웹소켓은 동적이고 인터렉티브한 웹 페이지를 만들 수 있습니다. 하지만 많은 경우에,ajax와 http 스트리밍 또는 long polling이 간단하고 효과적인 해결책을 제공할 수 있습니다.

 

더보기

polling

-가장 기본적인 데이터 처리방식으로,특정 주기를 가지고 서버에 http request하는방식

 

polling방식은 언제 통신이 발생할지 예측이 불가능 하기 때문에 클라이언트가 평범한 http request를 일정한 주기로 

서버에 요청하여 이벤트 내용을 전달받는 방식

 

 

 

Long polling

-polling과 비슷한 기법이나 실시간으로 데이터를 처리할 수 있는 방식

 

Long polling은 클라이언트에서 서버로 일단 http request를 보내고 이 상태로 계속 기다리다가 서버에서 해당 클라이언트로 전달할 이벤트가 있다면 그 순간 response 메세지를 전달하며 연결이 종료 된다.

해당 작업이 완료된 이후에는 클라이언트에서 곧바로 다시 http request를 보내 서버의 다음 이벤트를 기다리게 되는 방식

 

 

Streaming

-일반적인 TCP connection과 비슷하며,클라이언트와 서버간 연결된 연결 통로로 데이터를 보내는 방식

 

streaming은 long polling 과 마찬가지로 처음에는 클라이언트에서 서버로 http request를 보낸다.

서버에서 클라이언트로 이벤트를 전달할 때,해당 요청을 끊지 않고 필요한 메세지만 보내기를 반복하는 방식

예를들어, 뉴스,이메일,소셜 피드는 동적인 업데이트가 필요합니다. 하지만 이것은 아마 시간이 좀 걸려도 괜찮죠

반대로 공동작업,게임,금융앱 은 실시간과 가깝게 동작해야 합니다.

 

 대기 시간은 결정 요인이 아닙니다.만약 메세지들의 크기가 상대적으로 작다면 스트리밍과 폴링 방식이 효과적인 해결책을 제공할 수 있습니다. 낮은 대기시간과 높은 빈도,그리고 높은 크기의 메세지는 웹소켓이 최고의 선택입니다.

 

참고 

https://velog.io/@hahan/Polling-Long-Polling-Streaming

 

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