hayu's 개발 일지

[TIL]240402 Polling, Long Polling, Websocket, SSE 본문

프레임워크/spring

[TIL]240402 Polling, Long Polling, Websocket, SSE

hayu00 2024. 4. 2. 21:19

Polling

  • 클라이언트가 평범한 HTTP Request를 서버로 계속 요청해 이벤트 내용을 전달받는 방식이다. 
  • 가장 쉬운 방식이지만 클라이언트가 지속적으로 Request를 요청하기 때문에 클라이언트의 수가 많아지면 서버의 부담이 급증한다. 
  • HTTP Request Connection을 맺고 끊는 것 자체가 부담이 많은 방식이고, 클라이언트에서 실시간 정도의 빠른 응답을 기대하기 어렵다. 
  • 일정하게 갱신되는 서버 데이터의 경우 유용하게 사용할 수 있는 방법이다. 

Long Polling

  • Long Polling(롱 폴링)은 클라이언트가 서버에게 요청을 보내고, 서버가 즉시 응답하지 않고 일정 시간 동안 연결을 유지한 채로 대기하다가 새로운 데이터 또는 이벤트가 발생하면 응답을 반환하는 방식의 통신 기법이다.
  • 일반 polling 방식보다는 서버의 부담이 덜하지만 클라이언트로 보내는 이벤트들의 시간간격이 좁으면 polling과 크게 다르지 않게 된다. 
  • 다수의 클라이언트에게 동시에 이벤트가 발생하면 Long Polling은 서버에 대한 부하를 유발할 수 있고, 연결을 유지하는 동안 클라이언트와 서버 간의 리소스 소비가 발생한다.   

Websocket

  • HTML5 표준 기술로, 클라이언트와 서버 간의 양방향 통신을 열고, 실시간으로 데이터를 교환하는 방식이다.
    • 단방향 통신 : TV, 라디오
  • 지연 시간이 낮고 효율적이다.
  • 단일 TCP 연결을 유지하기 때문에 메모리 및 네트워크 사용이 효율적이다.
    • open connection 을 유지해줘야 하기 때문에 따로 chat server 를 만들어서 관리한다.

웹소켓의 동작 방식

  • 웹소켓은 양방향 통신이기 때문에 연속적인 데이터 전송의 신뢰성 보장을 위해 Handshake 과정을 진행한다.
  • 기존의 다른 TCP 기반의 프로토콜은 TCP layer에서의 Handshake를 통해 연결을 수립하는 반면, 웹소켓은 HTTP 요청 기반으로 Handshake과정을 거쳐 연결을 수립한다.
  • Handshake 과정을 통해 연결이 수립되면 응용 프로그램 계층 프로토콜이 HTTP에서 웹소켓으로 업그레이드된다.

→ 업그레이드가 되면 웹소켓 연결이 닫힐 때 까지 웹소켓 프로토콜을 사용하여 데이터를 주고 받는다. (새로고침이나 창 닫기 등의 이벤트 발생 시 닫힌다.)

 

HTTP Server-Sent Events (SSE)

  • HTML5 표준 기술로, 서버에서 클라이언트로 단방향 연결을 열고 새로운 데이터를 이벤트 스트림 형식으로 전송하는 방식이다.
  • 웹소켓의 역할을 비슷하게 하면서 더 가볍다.
  • 재접속 처리가 자동으로 지원된다. 
  • 양방향 통신을 지원하지 않는다.

 

참고 자료

- https://dev-gorany.tistory.com/212

- https://tecoble.techcourse.co.kr/post/2021-08-14-web-socket/

- https://doozi0316.tistory.com/entry/WebSocket%EC%9D%B4%EB%9E%80-%EA%B0%9C%EB%85%90%EA%B3%BC-%EB%8F%99%EC%9E%91-%EA%B3%BC%EC%A0%95-socketio-Polling-Streaming

- https://dev-gorany.tistory.com/212

 

'프레임워크 > spring' 카테고리의 다른 글

[TIL]240412 Spring Scheduler  (0) 2024.04.12
[TIL]240409 Dirty Checking  (0) 2024.04.09
[TIL]240401 Websocket(웹소켓)  (0) 2024.04.01
[TIL]240326 Dto의 toEntity  (0) 2024.03.26
[TIL]240321 엔티티(Entity) 연관관계 매핑(2)  (0) 2024.03.21