피드로 돌아가기
Dev.toFrontend
원문 읽기
단일 HTML 파일 기반의 No-Build 아키텍처와 Rate Limiting 해결 전략
How I Built a Modern Dashboard for GoatCounter - Rate Limiting, World Maps, and a Single HTML File
AI 요약
Context
GoatCounter의 기본 대시보드가 제공하는 시각화 기능의 부재를 해결하기 위한 커스텀 대시보드 구축 사례임. 서버리스 환경 및 개인정보 보호를 위해 별도의 백엔드 없이 브라우저에서 API로 직접 통신하는 구조를 지향함.
Technical Solution
- Build Step 제거를 위해 React와 Recharts를 CDN으로 로드하고 Babel Standalone을 통한 In-browser JSX 컴파일 방식 채택
- Token-bucket 방식의 API Rate Limit(4 req/s) 대응을 위해 순차적 요청 큐(Strict-sequential Queue)와 요청 간 500ms 간격 유지 로직 구현
- 초기 로딩 지연을 방지하고자 IntersectionObserver를 활용한 4단계 Lazy Loading 계층 설계
- D3.js의 무거운 런타임 오버헤드를 피하기 위해 TopoJSON을 미리 SVG Path로 변환한 정적 JS 파일(27KB)을 별도 로드하여 렌더링 최적화
- Babel의 재컴파일 비용을 줄이기 위해 대용량 맵 데이터 파일을 Babel 처리 대상에서 제외한 일반 Script 태그로 분리
실천 포인트
- API Rate Limit가 엄격한 외부 서비스 연동 시 Promise.all 대신 순차적 큐와 Lazy Loading 조합 검토 - 정적 자산의 런타임 계산 비용이 높을 경우, 빌드 타임에 전처리(Pre-projection)하여 정적 파일로 제공하는 전략 고려 - 초소형 도구 개발 시 CDN 기반의 No-Build 스택을 활용한 배포 복잡도 최소화 방안 검토