본문으로 바로가기
dobidugi
목록으로
영상

Long Polling vs SSE vs WebSockets vs QUIC Simply Explained

7분
원문 보기 ↗
목차

YouTube에서 보기 | 영상 길이: 10분 43초

요약

이 영상은 두 기계 간의 데이터 교환을 위한 4가지 기법—Long Polling, Server-Sent Events(SSE), WebSockets, QUIC—을 각각의 동작 원리, 실제 코드 데모, 사용 사례, 장단점 순서로 비교 설명한다.


Long Polling

[00:16] Long Polling은 클라이언트가 HTTP 요청을 서버에 보내고, 서버가 새로운 정보가 생길 때까지(또는 타임아웃이 날 때까지) 요청을 열어 두는 방식이다.

동작 흐름:

  1. 클라이언트가 HTTP 요청 전송
  2. 서버가 데이터가 생기거나 타임아웃이 될 때까지 요청을 보류
  3. 데이터가 생기면 서버가 응답 전송 → 연결 닫힘
  4. 클라이언트가 응답을 받는 즉시 다시 요청 → 사이클 반복

코드 데모: Express 서버에 두 개의 엔드포인트를 구성한다. /poll 엔드포인트는 클라이언트를 Long Polling 대상으로 등록하고 고유한 클라이언트 ID를 부여하며, 메시지가 전송되거나 연결이 닫힐 때까지 응답 객체를 저장해둔다. /update 엔드포인트는 등록된 모든 클라이언트에게 메시지를 전송하고 연결을 닫는다. 클라이언트(HTML + JS)는 /poll에 요청하고, 메시지를 받으면 화면에 표시한 뒤 즉시 다시 /poll을 호출해 연결을 재확립한다.

사용 사례:

장점:

단점:


Server-Sent Events (SSE)

[02:48] SSE는 서버가 클라이언트로 업데이트를 단방향으로 push하는 단일 지속 HTTP 연결 방식이다.

동작 흐름:

  1. 클라이언트가 HTTP 연결을 맺고 서버의 이벤트 스트림을 구독
  2. JavaScript에서 new EventSource(url) 객체를 생성하면 연결 수립
  3. 서버는 이벤트가 발생할 때마다 UTF-8 인코딩 텍스트 형식으로 데이터를 전송
  4. 연결은 클라이언트가 구독을 끊거나 서버가 전송을 멈출 때까지 유지

코드 데모: Express 서버의 /events 엔드포인트가 SSE 연결을 열고, res.write()를 사용해 매초 현재 시각을 이벤트로 전송한다. 클라이언트가 연결을 끊으면 서버는 setInterval을 정리하고 연결을 닫는다. 브라우저 개발자 도구의 Network 탭에서 EventStream으로 매초 이벤트가 도착하는 것을 확인할 수 있다. 주의할 점은 SSE는 단방향이므로, 클라이언트에서 서버로 데이터를 보내려면 별도 채널이 필요하다.

사용 사례:

장점:

단점:


WebSockets

[05:15] WebSocket은 단일 장기 TCP 연결 위에서 클라이언트와 서버 간의 풀 듀플렉스(양방향) 실시간 통신을 제공하는 프로토콜이다.

동작 흐름:

  1. 클라이언트가 WebSocket 핸드셰이크를 시작 — HTTP 요청에 특정 업그레이드 헤더를 포함해 WebSocket 연결로 전환
  2. 연결이 수립되면 HTTP 오버헤드 없이 클라이언트와 서버 모두 실시간으로 메시지를 주고받을 수 있음
  3. 어느 쪽이든 통신이 더 이상 필요 없을 때 연결을 닫을 수 있음

코드 데모: Express HTTP 서버(3000 포트)가 정적 파일을 제공하고, 별도의 WebSocket 서버(3001 포트)가 소켓 연결을 처리한다. 클라이언트가 연결되면 서버는 수신된 메시지를 모든 연결된 클라이언트에게 브로드캐스트하고, 매초 “ping from server” 메시지를 keep-alive로 전송한다. 클라이언트는 WebSocket API로 3001 포트에 연결하고, 폼 제출로 메시지를 서버에 전송할 수 있다. 데모에서 클라이언트가 메시지를 보내면 서버가 수신하고, 다시 연결된 모든 클라이언트에게 브로드캐스트되는 것을 실시간으로 확인할 수 있다.

사용 사례:

장점:

단점:


QUIC

[07:55] QUIC(Quick UDP Internet Connections)는 Google이 개발한 트랜스포트 레이어 프로토콜로, TCP가 아닌 UDP 위에서 동작하며 HTTP/2와 HTTP/3의 성능을 개선하기 위해 설계되었다.

동작 원리:

실제 사례 - Uber: Uber는 QUIC를 도입하여 드라이버 위치, 가용성, 탑승 상태 업데이트의 반응성을 크게 향상시켰다. 특히 네트워크 환경이 좋지 않은 지역에서 성능 개선 효과가 두드러진다. (Uber Engineering Blog 링크 제공)

사용 사례:

장점:

단점:


4가지 방식 최종 비교

방식방향프로토콜 기반특징
Long Polling양방향(간접)HTTP서버가 응답 보류 후 응답, 연결 닫힘 반복
SSE단방향(서버→클라이언트)HTTP단일 지속 연결로 서버가 계속 push
WebSockets양방향(풀 듀플렉스)TCP (HTTP 업그레이드)단일 지속 연결로 실시간 양방향
QUIC양방향UDPTCP+TLS+HTTP/2 통합, 낮은 레이턴시

키워드

Long-Polling, Server-Sent-Events, WebSocket, QUIC, 실시간-통신, HTTP, TCP, UDP, 풀-듀플렉스, 멀티플렉싱, Head-of-Line-블로킹, 연결-마이그레이션



이전 글
DDD 개념 정리
다음 글
사용할수록 똑똑해지는 AI 비서 OpenClaw 대항마 Hermes Agent, 윈도우 VMware 환경에서 설치 가이드