pile·
프론트엔드·vercel-blogVercel Blog·

Black Friday-Cyber Monday 실시간 대시보드 구축기

Vercel이 자사의 Black Friday-Cyber Monday(BFCM) 실시간 대시보드를 어떻게 구축했는지 설명한다. 테라바이트 단위 데이터를 실시간으로 처리하면서도 수많은 방문자에게 부드러운 UI를 제공하는 게 핵심 과제였고, Next.js ISR + KV 캐싱 + 클라이언트 사이드 숫자 애니메이션으로 해결했다.

핵심 포인트
  • 10초 폴링 + ISR 5초 캐시로 DB 요청을 동시 방문자 수와 무관하게 1회/5초로 제한했다.
  • 테라바이트 DB를 매번 전체 조회하는 대신 5분 롤링 윈도우 + Upstash KV 누적 합산으로 쿼리 비용을 대폭 줄였다.
  • 숫자가 뚝뚝 바뀌는 UX를 requestAnimationFrame 기반 rate-of-change 애니메이션으로 부드럽게 만들고, 실제 값과 오차가 나면 rate를 동적으로 보정해 정확도를 유지했다.
  • ISR 덕분에 트래픽이 수배 늘어도 DB 부하는 일정하게 유지됐다.
상세 정리
  • 배경: 매년 BFCM 기간 수백만 명이 Vercel 인프라 실시간 지표를 공개 대시보드에서 동시에 보는 상황에서 최신 데이터를 효율적으로 제공해야 했다.
  • 폴링 아키텍처: 클라이언트가 10초마다 서버에 업데이트 요청. WebSocket 대신 단순 폴링을 선택해 확장성을 높이고 구현 복잡도를 낮췄다.
  • 초기 문제: BFCM 시작 시점부터 현재까지 전체 구간을 집계하면 시간이 지날수록 쿼리 비용이 기하급수적으로 증가했다.
  • 롤링 윈도우 + KV 합산: 최근 5분만 DB에서 조회하고, Upstash KV에 저장된 누적 카운트와 합산하는 방식으로 전환해 쿼리 비용을 일정하게 유지했다.
  • ISR 캐시 적용: Next.js `export const revalidate = 5` 설정으로 5초에 한 번만 DB를 조회하고, 그 사이 모든 방문자는 캐시 응답을 받는다. 동시 접속자가 아무리 늘어도 DB 부하가 증가하지 않는다.
  • 애니메이션 설계: 10초마다 숫자가 점프하면 UX가 나빠진다. 서버 사이드에서 초당 변화율을 계산해 내려주고, 클라이언트에서 requestAnimationFrame으로 매 프레임 조금씩 증가시켜 자연스럽게 보이게 했다.
  • 정확도 보정 메커니즘: rate 기반 증가를 하다 보면 실제 값과 오차가 누적된다. 퍼센트 차이를 계산해 오차가 임계값을 넘으면 rate를 동적으로 재조정해 정확도를 유지했다. 코드로 직접 구현 예시가 포함돼 있다.
  • 결과: 초당 수만 건 트래픽 상황에서도 DB 부하 안정 유지 + 부드러운 실시간 숫자 업데이트 제공.
왜 읽나대용량 실시간 대시보드에서 ISR 캐싱 + 폴링 + 클라이언트 애니메이션을 조합해 DB 비용과 UX 품질을 동시에 잡고 싶은 Next.js 개발자에게.
vercel-blog
Vercel Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 프론트엔드·LINE EngineeringLINE Engineering·

    AI로 웹 엔지니어 없이 LINE 앱 안에서 그룹 영상 통화 서비스 만들기

    LINE Planet 팀의 PM과 Android 엔지니어 두 명이 웹 전문 엔지니어 없이 LINE 앱 내에서 그룹 영상 통화 서비스를 개발한 과정을 다룬다. LIFF(LINE Front-end Framework)와 LINE Planet SDK를 활용해 React/Vite 기반 웹 앱을 구성했고, Firebase Cloud Functions로 별도 서버 인프라 없이 구현을 완료했다.

    #react#webrtc#firebase+2
  2. 프론트엔드·vercel-blogVercel Blog·

    Vercel과 Shopify의 Hydrogen 전면 재설계

    Vercel과 Shopify가 Hydrogen을 오픈소스·런타임 무관 프레임워크로 전면 재설계했다. 기존 Hydrogen은 빠른 헤드리스 스토어프런트 배포를 지원했지만 플랫폼 종속성이 있었고, 새 버전은 Svelte, Nuxt, Next.js 등 어느 JavaScript 프레임워크에서도 동작한다. 3레이어 아키텍처(코어/클라이언트/서버)로 재구성하면서 각 레이어가 명확한 역할을 분담한다.

    #react#nextjs#i18n+2
  3. 프론트엔드·토스 SLASH토스 SLASH·

    es-toolkit: 사내 소형 라이브러리에서 글로벌 프로젝트로

    토스 프론트엔드 팀이 사내 공유 유틸리티 라이브러리를 발전시켜 만든 es-toolkit이 주간 npm 다운로드 2,000만 건을 넘기며 글로벌 오픈소스 프로젝트로 자리 잡은 과정을 다룬다. lodash의 구조적 한계를 넘어 현대 웹 개발 환경에 최적화된 유틸리티 라이브러리를 처음부터 설계한 경험을 정리한다.

    #lodash#open-source#tree-shaking+2