Polling / Long Polling / WebSocket / Server Sent Event정리

2023. 6. 22. 12:44·Computer Science/WEB

서버의 event를 클라이언트로 보내는 4가지 방법



polling

  • 클라이언트가 평범한 http request를 서버로 계속 날려서 이벤트 내용을 전달받는 방식이다.
  • 가장 쉬운 방법이지만 클라이언트가 계속적으로 request를 날리기 때문에 클라이언가 많아지면 서버의 부담이 급증하게 된다. 또한 http request connection을 맺고 끊는것 자체가 부담이 많은 방식이다. 그리고 클라이언트에서 실시간정도의 빠른 응답을 기대하기도 어렵다.
  • polling은 http 오버헤드가 발생한다는 단점이 있다.
  • 하지만 일정하게 갱신되는 서버 데이터의 경우 유용하게 사용할 수 있는 방식이다. (ex. 대시보드 갱신)
※ 참고

Http Overhead 란?

정보의 신뢰성 판단을 위해, 보내지는 헤더 같은 정보 때문에 오히려 데이터량이나 처리시간이 증가하는걸 말한다.
 

HTTP Overhead 란?

오버헤드 란? 오버헤드(overhead)가 됐다라는 말은, 처리 시간 및 메모리 등이 추가적으로 사용되는 현상을 말한다. 처리 시간이 추가된다는 것을 예로 들면, A라는 처리를 실행한다면 3초 걸린다고

s-y-130.tistory.com

 

 

long-polling

  • 서버 측에서 접속을 열어두는 시간을 길게하는 방식.
    • 클라이언트에서 서버로 http request를 날린다.
    • 서버에 응답에 대한 사용 가능한 데이터가 없으면 계속 기다리다가 서버에서 해당 클라이언트로 전달할 이벤트가 있다면 그순간 response 메시지를 전달하면서 연결이 종료된다.
    • 클라이언트에서는 곧바로 다시 http request를 날려서 서버의 다음 이벤트를 기다리게 되는 방식이다.
  • 일반 polling 방식보다는 서버의 부담이 줄겠지만 클라이언트로 보내는 이벤트들의 시간간격이 좁다면 polling 과 별 차이가 없게 되며, 다수의 클라이언트에게 동시에 이벤트가 발생될 경우에는 곧바로 다수의 클라이언트가 서버로 접속을 시도하면서 서버의 부담이 급증하게 된다.
  • hang걸린것 처럼 응답을 보류하기 때문에 hang get 이라고도 불린다.
  • 특성상 구현을 위해 무한 iframe에 script tag를 추가하는 것과 같은 꼼수가 필요하다.


websocket

  • 양방향 채널을 이용해 채팅방 처럼 양방향 통신이 가능하다.
  • 기존 http요청 응답 방식은 요청한 그 클라이언트에만 응답이 가능했는데, websocket 프로토콜을 통해 웹소켓 포트에 접속해 있는 모든 클라이언트에게 이벤트 방식으로 응답한다
  • 최초 접속이 일반 http request를 통해 hand-shaking 과정을 통해 이루어 지기 떄문에, 기존의 80, 443 포트로 접속을 하므로 추가로 방화벽을 열지 않고도 양방향 통신이 가능하고, http 규격인 CORS적용이나 인증 등의 과정을 기존과 동일하게 가져갈 수 있는것이 장점이다.
  • 단, websocket 프로토콜을 처리하기 위해 전이중 연결과 새로운 웹소켓 서버가 필요하다.

 


SSE (Server-Sent Events)

  • HTML5 표준안이며 어느 정도 웹소켓의 역할을 하면서 더 가볍다.
  • websocket 과 같이 양방향이 아닌 server -> client 단방향이기에 서버의 event 나 message를 client 로 push 하는 작업에 유용하게 사용될 수 있다.
  • 양방향이 아니기에 요청 시 ajax로 쉽게 이용할 수 있다.
  • 재접속 처리 같은 대부분의 저수준 처리가 자동으로 지원된다.
 

Server Sent Events 정리

SSE - Server Sent Events 란? SSE는 서버의 데이터를 실시간으로, 지속적으로 Streaming 하는 기술 이다. SSE는 웹 표준으로써 IE를 제외한 모든 브라우저에서 지원되며, IE역시 polyfill을 통해 지원이 가능하

s-y-130.tistory.com

 

 


참고

  • https://tecoble.techcourse.co.kr/post/2022-10-11-server-sent-events/
  • https://velog.io/@dev_jazziron/Polling-Long-Polling-SSE-WebSocket
'Computer Science/WEB' 카테고리의 다른 글
  • DNS 개념 & 동작
  • Server Sent Events 정리
  • Cross Origin Resource Sharing, CORS란?
  • Access Token & Refresh Token 원리
s_y_130
s_y_130
  • s_y_130
    About SY
    s_y_130
  • 전체
    오늘
    어제
    • 분류 전체보기 (429) N
      • JAVA (54)
        • 더 자바 8 (0)
        • JAVA (41)
        • JAVA (JVM) (13)
      • Computer Science (86)
        • CS Basic (7)
        • OOP (11)
        • Design Pattern (16)
        • Network (8)
        • HTTP (6)
        • WEB (22)
        • OS (16)
      • DataBase (29)
        • DB theory (15)
        • MySQL (14)
        • Redis (0)
      • Collection Framework (1)
        • 구현 (1)
      • Data Structure (14)
        • Linear (9)
        • Non-Linear (5)
      • Algorithm (19)
        • Basic (12)
        • 응용 (2)
        • 완전 탐색(Brute Force) (1)
        • 다익스트라 (1)
        • Algorithm Problem (3)
      • Spring (102) N
        • 스프링 핵심 원리 - 기본편 (9)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 (11)
        • 스프링 DB 1편 - 데이터 접근 핵심 원리 (6)
        • 스프링 DB 2편 - 데이터 접근 활용 기술 (10)
        • 스프링 핵심 원리 - 고급편 (13)
        • 스프링 부트 - 핵심 원리와 활용 (9)
        • Spring Security 6.x (2) N
        • Spring Cloud로 개발하는 MSA (1)
        • 재고시스템으로 알아보는 동시성이슈 해결방법 (4)
        • 개념 (27)
        • 테스트 (0)
        • Annotation (1)
        • Error Log (2)
      • TEST (0)
        • 부하 테스트 (0)
        • Practical Testing: 실용적인 테스트.. (0)
      • JPA (40)
        • 자바 ORM 표준 JPA 프로그래밍 (12)
        • 1편- 실전! 스프링 부트와 JPA 활용 (7)
        • 2편- 실전! 스프링 부트와 JPA 활용 (4)
        • 실전! 스프링 데이터 JPA (6)
        • 실전! Querydsl (6)
        • 개념 (5)
      • 백엔드 부트캠프[사전캠프] (35) N
        • TIL (12)
        • 문제풀이 (23) N
      • Open Source (0)
      • Book Study (1)
        • Morden Java in Action (1)
        • Real MySQL 8.0 Vol.1 (0)
        • TDD : By Example (0)
      • AWS (0)
        • EC2 (0)
      • git (2)
      • AI (22)
        • Machine Learning (17)
        • Deep Learning (0)
        • TensorFlow (1)
        • PyTorch (1)
        • YOLO (1)
        • Data Analysis (0)
        • Ai code Error (1)
        • Numpy (1)
      • MY (0)
      • WEB (15)
        • Django (3)
        • WEB 개념 (1)
        • React (1)
        • Maven (10)
      • Python (6)
      • 기초수학 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_y_130
Polling / Long Polling / WebSocket / Server Sent Event정리
상단으로

티스토리툴바