프로젝트 소개

sightings는 TypeScript로 작성된 경량 쿠키 없는 페이지뷰 분석 라이브러리입니다. 사용자의 디바이스에 어떤 것도 기록하지 않고—쿠키, localStorage, 지문 채크 모두 없음—방문을 추적하며 모든 데이터를 직접 사용자_own 데이터베이스에 저장합니다. 디자인은 각 방문을 신원이 연관되지 않은 "시선"으로 처리합니다: 방문이 관찰됐다는 것이지요. 방문자 식별은 IP, 사용자 에이전트, 비밀 키, UTC 일자에서 유래한 솔트 SHA-256 해시로, 128비트로 truncated되어 매일 순환됩니다. 라이브러리는 엄격한 데이터 경계를 강제합니다: 허용 목록 외부의 쿼리 파라미터는 거부되고, referrer는 도메인명만 저장하며, 커스텀 이벤트 페이로드는 없습니다—비콘 본체에 임의 필드를 추가하면 새 지표로 기록하는 대신 400 오류가 반환됩니다. 대부분의 도구가 혼동하는 두 가지 트래픽 절반을 구분합니다. 인간 방문자는 탐색당 단하나의 `sendBeacon` 요청을 보내며 서버 사이드에서 카운트됩니다. 크롤러와 AI 에이전트(gptbot, claudebot, perplexitybot, telegram-preview 등)는 클라이언트 측 JavaScript를 실행하지 않으므로, 사용자 에이전트 문자열 자체가 아닌 계열 이름 분류를 통해 미들웨어에서 감지하고 카운트됩니다. 이로써 AI 모델이 실제로 콘텐츠를 크롤링했는지 측정하는 것이 실무적으로 가능해집니다. 코어 패키지는 표준 Request/Response 쌍과 Web Crypto가 있는 곳이라면 어디서든 실행됩니다—Node, Deno, Bun, Vercel Edge, Cloudflare Workers. 공식 통합으로는 `@sightings/next`(Next.js App Router 핸들러 및 미들웨어)와 `@sightings/prisma`(스키마 모델을 갖춘 Prisma 어댑터)가 있습니다. 커스텀 스토리지 어댑터는 단일 `record()` 메서드와 선택적으로 `summary()` 메서드를 제공함으로써 구현할 수 있습니다. 주요 구성 옵션은 기본 API 경로, 경로 수준 감추기(예: `/admin` 및 `/invite` 하위 트리 드롭), 쿼리 파라미터 허용 목록(`utm_*`와 `ref` 기본값), 크롤러 계열 감지, 방문자 해시 창(기본 일간, 또는 시간 단위), IP 및 국가 헤더 우선순위, 에러 처리 등을 제어합니다. 내장 `api.summary()` 쿼리 인터페이스는 봇/인간 필터링과 함께 날짜 범위 이상의 집계 뷰를 제공합니다. SSR 컨텍스트, 비HTTP 프레임워크, 백필 작업을 위해 직접 녹화 메서드도 노출됩니다. 저장소는 세 패키지에 걸친 잠금 버전 관리를 위해 changesets를 사용하며, CI를 통해 provenance 연결된 tarball을 배포합니다. 카테고리: data | 하위 카테고리: analytics-bi