실시간 데이터 전송 기술 정리 | Polling, Long-Polling, SSE, WebSocket

2025. 4. 18. 00:23·공부하기/ETC

최근 실시간 알림 기능을 구현하면서 공부했던 실시간 데이터 전송에 대표적인 기술들을 정리해본다.


출처 : https://medium.com/@asharsaleem4/long-polling-vs-server-sent-events-vs-websockets-a-comprehensive-guide-fb27c8e610d0

1. Polling

주기적으로 서버에 요청을 보내 업데이트를 확인하는 방식

  • 클라이언트에서 서버로 계속해서 request를 전송한다.
  • 서버는 반복되는 request에 응답하면서, 전달할 이벤트가 있는 경우 전달한다.

▶︎ 장점

  • 구현이 간단하다. (기본 HTTP만 지원되면 구현 가능)

▶︎ 단점

  • 불필요한 요청이 많아지므로 서버 부하가 증가한다.
  • 새 이벤트가 발생하자마자 확인할 수는 없어 지연(Latency)이 존재한다.
  • 다수 클라이언트가 있을 경우 네트워크 오버헤드가 증가한다.

매우매우 간단하게 실시간 (비슷한) 서비스를 구현해볼 수 있는 방식

 


2. Long Polling

클라이언트가 서버에 요청을 보내고, 서버는 새로운 데이터가 있을 때까지 연결을 유지한 후 응답을 보내는 방식

  • 클라이언트에서 서버로 request를 전송한다.
  • 서버는 이벤트가 생길 때까지 기다렸다가 전달할 이벤트가 생긴 경우 그 때 응답하여 연결을 해제한다.
  • 응답을 받은 클라이언트는 즉시 새로운 request를 전송한다.

초창기 Facebook 채팅을 구현할 때 Long Polling 방식을 썼다고 한다.

  • 메시지를 기다릴 때 Long Polling 사용
  • 메시지가 생기면 응답하고, 클라이언트는 바로 다시 요청
  • 실시간성은 확보하면서도 서버 부하를 줄임
더 관심 있다면 여기 참고

▶︎ 장점

  • Polling 보다는 진화한 방식으로, 이벤트가 없을 때는 대기하기 때문에 불필요한 요청이 줄어든다.
  • 데이터 도착 시 즉시 응답하므로 실시간성이 높다.
  • 브라우저 호환성이 우수하다.

▶︎ 단점

  • 서버 리소스 소모가 크다. (연결 유지)
  • 연결 타임아웃 처리 등 복잡성이 존재한다.

단순한 구현이 필요하고, 실시간성이 중요하며, 복잡한 대안을 쓰기 전 솔루션이라고 볼 수 있다.


3. SSE (Server-Sent Events)

서버가 클라이언트에게 단방향으로 실시간 이벤트를 푸시하는 방식

  • 하나의 long-lived HTTP 연결을 맺는다.
  • 서버측에서 이벤트가 생길 때마다 연결된 클라이언트에 전달한다.

▶︎ 장점

  • 브라우저 지원이 좋다.
    • 대부분의 최신 브라우저에서 지원한다.
      • Chrome, Firefox, Safari, Edge 지원
      • Internet Explorer 미지원
    • 브라우저에서 제공하는 EventSource API를 통해 구현된다.
  • HTTP 기반이라 인프라 변경이 적다.
  • 저수준의 자동 재연결을 지원한다.
    • EventSource는 서버와의 연결이 끊어지면 자동으로 재연결을 시도한다.

▶︎ 단점

  • 단방향이므로 양방향 통신이 필요할 경우 부적합하다.

최근 실시간 알림, 모니터링 대시보드, 피드 업데이트 등에 많이 쓰인다.


4. Web socket

클라이언트와 서버가 하나의 연결을 통해 양방향 통신을 주고받는 방식

  • 하나의 지속적 TCP 연결을 맺는다.
  • 연결된 클라이언트와 서버가 서로 메세지를 전송한다.

▶︎ 장점

  • 양방향 통신을 지원한다. (full-duplex)
  • 하나의 TCP 연결로 실시간 데이터 송수신이 가능하다.
  • 지연시간이 최소화된다.

▶︎ 단점

  • 초기 연결 비용이 높다.
    • 클라이언트와 서버 모두 핸드셰이크 로직을 구현해야 한다.
  • 인프라 구성이 복잡해진다.
    • 프록시/방화벽 통과를 위해 별도 설정이 필요하다.

실시간 채팅, 게임 서버 등에 적합하다.


정리

방식 한 줄 설명 장점 단점 사용 예시
Polling 주기적으로 서버에 요청을 보내 업데이트를 확인하는 방식 구현이 간단하다 (기본 HTTP 지원만으로 가능) 불필요한 요청 많음,
지연 존재,
네트워크 오버헤드
간단한 테스트 또는 비실시간 데이터 조회 (거의 사용되지 않음)
Long Polling 클라이언트가 요청을 보내고, 서버는 데이터가 생길 때까지 기다렸다 응답하는 방식 불필요한 요청 줄어듦,
실시간성 높음,
브라우저 호환성 우수
서버 리소스 소모,
확장성 한계,
타임아웃 처리 복잡
초기 Facebook 채팅,
실시간 알림의 중간 솔루션
SSE (Server-Sent Events) 서버가 클라이언트에게 단방향으로 실시간 이벤트를 푸시하는 방식 브라우저 지원이 좋고,
HTTP 기반이라 인프라 변경이 적다.
자동 재연결 지원
단방향 통신만 가능,
IE 미지원
실시간 알림, 대시보드, 피드 업데이트
WebSocket 클라이언트와 서버가 하나의 연결을 통해 양방향 통신을 주고받는 방식 양방향 통신,
지연시간 최소,
실시간 송수신
초기 핸드셰이크 필요,
인프라 복잡,
프록시/방화벽 설정 필요
실시간 채팅, 게임 서버, 협업 툴

 

🔗 Reference

  • Polling and Long-Polling: Essential Techniques for Real-Time Web Applications
  • EventSource
  • Long Polling vs Server-Sent Events vs WebSockets: A Comprehensive Guide
저작자표시 비영리 변경금지 (새창열림)

'공부하기 > ETC' 카테고리의 다른 글

RAG와 벡터 데이터베이스  (0) 2026.01.14
Unique한 값이 필요할 때 사용하는 UUID, UUID란?  (0) 2025.03.19
JWT 찐하게 이해하기 👀 | JWT 구성과 인증 원리  (0) 2025.03.13
Servlet 이해하기 (Web Server, WAS, Servlet)  (0) 2025.01.22
도메인 로직(Domain Login)이 뭔데?  (2) 2024.11.11
'공부하기/ETC' 카테고리의 다른 글
  • RAG와 벡터 데이터베이스
  • Unique한 값이 필요할 때 사용하는 UUID, UUID란?
  • JWT 찐하게 이해하기 👀 | JWT 구성과 인증 원리
  • Servlet 이해하기 (Web Server, WAS, Servlet)
다섯자두
다섯자두
All I need is 💻 , ☕️ and a dash of luck
  • 다섯자두
    subbni
    다섯자두
  • 전체
    오늘
    어제
    • 전체 글 (88) N
      • 개발 이야기 (0)
      • 만들어보기 (17)
        • FromBookToBook (5)
        • Spring (5)
        • Node.js & React (3)
        • TroubleShooting (4)
      • 공부하기 (71) N
        • Network (3)
        • Cloud (1)
        • Database (5)
        • Java (13)
        • Javascript (0)
        • Spring (9)
        • React (18)
        • Algorithm (8)
        • 자료구조 (7)
        • ETC (7) N
      • 회고 (0)
  • 블로그 메뉴

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

    • velog
  • 공지사항

  • 인기 글

  • 태그

    알림 기능
    로그인
    outbox
    티스토리챌린지
    실시간 데이터 전송 기술
    springboot
    mysql
    Til
    outbox 패턴
    알고리즘
    서명알고리즘
    JPA
    재시도 로직
    java
    pdf 프리뷰 실패
    자료구조
    network
    최단거리
    SQS
    redis
    SSE
    pdf 자동 다운로드
    프로젝트
    Database
    Spring
    aws
    SQL
    Express
    HTTP
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
다섯자두
실시간 데이터 전송 기술 정리 | Polling, Long-Polling, SSE, WebSocket
상단으로

티스토리툴바