- 0. Web Analytics 서비스를 시작한 이유Foundly
- 0. 기획 의도Grabbin
- 1. Grabbin을 만들기 까지 (feat. 5번의 뒤엎음) - Just memoGrabbin
- 1. 웹 분석 도메인에 대한 이해: 기본 지표Foundly
- 2. 사이트 등록 시 timezone을 받도록 설계한 이유Foundly
- 2. 어떤 기술을 사용할까?Grabbin
- 3. D1과 ClickHouse의 역할 분리Foundly
- 3. Multirepo vs Monorepo - 아키텍처 의사 결정Grabbin
- 4. Queue를 둔 이유: 분석 요청을 API 응답과 분리Foundly
- 4. 다양한 위젯 시스템을 효과적으로 확장하는 방법 - 아키텍처 의사 결정Grabbin
- 5. 분석 데이터 전송: fetch·sendBeaconFoundly
- 5. 서버 위치는 프론트/DB 중 어디에 가깝게? - 아키텍처 의사 결정Grabbin
- 6. collect.js 와 /collect: 서로 다른 Worker에서 처리하는 이유Foundly
- 6. 미디어 업로드: 서버 vs presigned URL - 아키텍처 의사 결정Grabbin
- 7. Query String으로 상태 관리: 라이브러리는 최후의 옵션Foundly
- 7. 응답은 기다리되, 경험은 즉각적으로 — UX 의사 결정 & 기능 설계Grabbin
- 8. Dynamic Width/Height View - UX 의사 결정Grabbin
- 8. 시간별 집계 테이블 설계: 일별·월별 테이블을 사용하지 않는 이유Foundly
- 9. 원본 이벤트/세션/시간별 집계 테이블을 나눈 이유Foundly
- 9. 이미지 크롭의 필요성 - UX 의사 결정 & 기능 설계Grabbin
- 10. 위젯 디테일 - UX 의사 결정Grabbin
- 10. 화면에서 session을 visit으로 부르기로 한 이유Foundly
- 11. 그 외 사소한 디테일 - UX 의사 결정Grabbin
- 11. 중복 이벤트/늦게 들어오는 이벤트의 처리Foundly
- 12. collect.js 실행 흐름 — 실제 시나리오와 상태 변화Foundly
- 12. 계정 삭제 - UX 의사 결정Grabbin
- etcFoundly
- Queue 배치 수집 미적용과 부분 실패 처리 정책 개선 및 테스트 결과Foundly
- route handler 사용 목적: 굳이 사용해야 할까?Grabbin
- 개발하면서 알게된 것들기록
- 새롭게 알게된 개념 정리Foundly
- 세션 체류 시간(Duration) 설계 실패 → 변경Foundly
- 이미지 업로드 & 고아 파일 정리 설계Grabbin