온라인 대기열 : 웹소켓 vs 폴링

jin·2026년 2월 19일

웹소켓과 폴링은 실시간 데이터 통신을 위한 기술이다.
웹소켓은 양방향 통신을 가능하게 하여 서버와 클라이언트 간에 실시간 데이터를 교환할 수 있게 한다.
폴링은 클라이언트가 n초 간격으로 주기적으로 서버에 요청을 보내 새로운 데이터가 있는지 확인하는 방법이다.

온라인 대기열을 구현할 때 크게 두가지 방식이 쓰이는 것 같다.

  1. Redis+폴링
    유저가 예매 버튼을 누르면 Redis의 Sorted Set에 유저 ID와 타임스탬프를 저장해서 순번을 매긴다. 클라이언트는 1~3초 간격으로 폴링을 보내 내 앞에 몇 명이 남았는지 확인한다.
    서버가 연결을 계속 유지할 필요가 없어 메모리 부담이 적고 redis의 원자적 연산 덕분에 순번 보장이 확실하다.

  2. 웹소켓
    대기 순번이 실시간으로 줄어드는 것을 시각적으로 부드럽게 보여줘야 할 때 유리하다
    대기열에 진입하는 순간 웹소켓 연결을 맺고 서버가 대기열 상태에 변할 때마다 푸시를 보낸다.
    다만 대기자 수대로 커넥션을 유지해서 Gateway 서버의 부하가 매우 커지고 연결이 끊겼을 때 재연결 및 상태 복구 로직이 복잡한 편이다.

profile
성장중

0개의 댓글