---
title: "ClickNest: Go 바이너리 하나로 돌리는 셀프호스팅 AI 웹 애널리틱스"
published: 2026-02-26T22:15:38.000Z
canonical: https://jeff.news/article/187
---
# ClickNest: Go 바이너리 하나로 돌리는 셀프호스팅 AI 웹 애널리틱스

외부 의존성 제로(Postgres, Redis, Kafka 없음)로 Go 바이너리 하나에 DuckDB와 SQLite를 임베딩한 셀프호스팅 웹 애널리틱스. LLM이 DOM 컨텍스트를 읽고 이벤트에 사람이 읽을 수 있는 이름을 자동으로 붙여줌.

- **ClickNest**는 셀프호스팅 웹 애널리틱스 도구인데, 핵심 컨셉이 "AI가 이벤트 이름을 자동으로 지어줌"이라는 거임. `button.click #submit-form` 같은 날것의 이벤트 대신 "유저가 결제 페이지에서 '주문하기' 버튼 클릭"이라고 알아서 읽기 좋게 바꿔줌
- 작동 원리는 이런 식임: 이벤트가 발생하면 DOM 컨텍스트(태그, id, 클래스, 부모 경로, URL)에서 핑거프린트를 계산하고, 백그라운드 워커가 해당 핑거프린트에 이름이 있는지 확인함. 없으면 DOM 컨텍스트(+ 선택적으로 GitHub 소스코드)를 기반으로 프롬프트를 만들어서 설정된 LLM(OpenAI, Anthropic, Ollama 중 선택 가능)에게 이름을 생성시킴. 이벤트 저장은 즉시 되고, 이름은 비동기로 나중에 붙음
- **외부 의존성이 진짜 제로**임. Postgres 없음, Redis 없음, Kafka 없음. Go 바이너리 하나에 DuckDB(이벤트 저장)와 SQLite(메타데이터)가 임베디드로 들어감. 프론트엔드도 SvelteKit 정적 빌드를 `go:embed`로 박아넣음
- SDK는 TypeScript로 2KB 미만(gzipped)이고, 스크립트 태그 하나 넣으면 클릭, 페이지뷰, 폼 입력, 제출을 자동 캡처함. 수동 태깅이 필요 없다는 게 가장 큰 장점

## 기능이 생각보다 많음

- 애널리틱스 쪽: 오토캡처, JS 에러 트래킹(스택 트레이스 포함), 퍼널 분석, 경로 분석, 리텐션 코호트, 히트맵, UTM/리퍼러 어트리뷰션, 커스텀 대시보드, 자연어 AI 채팅 쿼리
- 그로스 쪽: 리드 스코어링(페이지 방문 수, 이벤트 횟수 등 규칙 기반 점수 누적), CRM 웹훅(점수 임계값 초과 시 자동 푸시), AI 기반 캠페인 A/B 테스트, ICP(이상적 고객 프로필) 분석까지 있음
- 플랫폼 쪽: 피처 플래그(롤아웃 % 설정 가능), 메트릭 알림, 멀티 프로젝트, CSV 내보내기, 백업/복원까지 지원

## 리소스 사용량과 비용

- 유휴 상태 RSS가 약 30MB, 가벼운 부하에서 75MB, 일반적인 중소 앱에서 100-200MB 수준임. DuckDB가 데이터 파일을 메모리 맵핑하기 때문에 RSS가 전체 데이터 볼륨이 아니라 쿼리 복잡도에 비례함
- 하루 1만 이벤트 기준 월 약 50MB 디스크, 10만이면 500MB 정도. 비용은 개인 사이트 기준 월 $4, 중소 앱 $6, AI 네이밍까지 쓰는 큰 앱이 $12 수준
- Fly.io 프리 티어(shared-cpu-256MB 3개 + 3GB 볼륨)로 무료 운영도 가능함

> [!NOTE]
> 라이선스는 AGPL-3.0이라서 네트워크 서비스로 수정본을 운영하면 소스 공개 의무가 있음. 사내 도구로 쓸 때 참고할 것

- Go 1.25+, Node 20+ 필요하고, Docker Compose로 `docker compose up -d` 한 줄이면 끝남

## 핵심 포인트

- AI가 DOM 컨텍스트와 소스코드를 읽어 이벤트에 사람이 읽을 수 있는 이름을 자동 생성
- Go 바이너리 하나에 DuckDB+SQLite 임베딩, 외부 의존성 제로
- 유휴 상태 RSS 30MB, 월 $4부터 운영 가능, Fly.io 프리티어로도 가능
- 퍼널·리텐션·히트맵·피처플래그·리드스코어링 등 기능이 예상 외로 풍부

## 인사이트

GA 대안을 찾는 개인/소규모 팀한테 매력적인 선택지. AI 이벤트 네이밍이 수동 태깅의 고통을 실제로 줄여줄 수 있을지가 관건.
