KarmoLab에 도구를 스무 개쯤 만들어 놓고 나서야 깨달았다. 누가 무엇을 쓰는지 볼 방법이 없었다.
다음에 무엇을 만들지, 어떤 설명이 안 먹히는지가 전부 그 데이터에 달려 있는데 눈이 없는 상태였다. 그래서 계측을 붙였고, 그 도구가 GoatCounter다.
GoatCounter가 뭔가
한 사람(Martin Tournoij)이 만든 방문자 통계 서비스다. 하는 일은 단순하다. 페이지에 스크립트 한 줄을 넣으면 방문 수를 세어 준다.
<script data-goatcounter="https://<계정>.goatcounter.com/count"
async src="https://gc.zgo.at/count.js"></script>
특이한 점은 안 하는 것에 있다.
- 쿠키를 안 쓴다. 그래서 쿠키 동의 배너가 필요 없다
- 개인을 식별하지 않는다. IP를 저장하지 않고, 방문자를 구별할 때도 「IP + 브라우저 정보 + 날짜」를 해시로 뭉갠 값을 하루만 쓰고 버린다
- 광고 사업이 아니다. 데이터를 팔 유인이 없다. 비영리·오픈소스이고 개인 용도는 무료
- 가볍다. 스크립트가 3KB 남짓이다. 구글 애널리틱스는 그 수십 배다
세어 주는 것은 딱 필요한 만큼이다. 페이지별 방문 수, 유입 경로(어디서 눌러 들어왔는지), 검색어, 국가, 브라우저·화면 크기, 그리고 직접 정의한 이벤트.
왜 구글 애널리틱스가 아니었나
이 블로그는 원래 둘 다 쓰고 있었다. 그런데 KarmoLab에 새로 붙일 때는 GoatCounter만 골랐다.
이유는 약속 때문이다. KarmoLab 도구들은 페이지마다 이렇게 써 두었다.
입력한 내용은 브라우저 안에서만 처리되며 어디에도 저장·전송되지 않습니다.
글자수를 세든 해시를 뽑든 계산은 전부 사용자 브라우저에서 끝난다. 서버로 아무것도 안 보낸다. 그렇게 써 놓고 방문자를 광고 회사에 실어 보내는 스크립트를 얹으면, 문장은 거짓이 아니어도 태도가 앞뒤가 안 맞는다.
「이 도구는 당신 데이터를 안 가져갑니다」와 「대신 당신이 여기 왔다는 사실은 광고 회사가 압니다」는 같이 놓기 민망한 문장이다.
붙이면서 신경 쓴 것
1. 보내는 것은 도구 이름과 동작 이름뿐
계측이 알려주는 건 이 정도다.
/karmolab/t/charcount/ ← 글자수 세기 페이지를 열었다
use/charcount/copy ← 거기서 결과를 복사했다
입력한 글, 붙여넣은 JSON, 올린 이미지는 어느 것도 실리지 않는다. 계측이 발화하는 지점을 「결과를 얻은 순간」 한 곳으로 모으고, 그 함수에 값 자체를 넘기지 않는 구조로 만들었다.
2. 「열어봤다」와 「썼다」를 구분
방문 수만 세면 착각하기 쉽다. 100명이 들어왔는데 아무도 안 쓰고 나갔을 수도 있다. 그건 도구가 나쁜 게 아니라 설명이 검색 결과와 다른 걸 약속한 경우일 때가 많다.
그래서 복사·저장·변환처럼 실제로 결과를 손에 넣은 순간에만 따로 이벤트를 남겼다. 두 숫자의 차이가 크면 그 도구는 고칠 데가 있다는 뜻이다.
여기서 얻은 부수 효과가 하나 있다. 복사 코드가 도구마다 흩어져 있었는데(클립보드 API 호출 + 실패 시 대체 경로 + 알림 토스트가 아홉 군데에 복제돼 있었다), 계측 지점을 한 곳으로 모으려다 보니 자연히 공용 함수 하나로 합쳐졌다. 측정하려고 만든 자리가 중복을 걷어냈다.
3. 내 접속은 세지 않는다
로컬 개발 환경과 데스크톱 앱에서는 스크립트를 아예 로드하지 않는다.
만든 사람이 제일 자주 들어가는 게 자기 사이트다. 그걸 같이 세면 숫자가 거짓말을 한다. 「오늘 방문 40」이 사실은 내가 새로고침한 40번이면, 그 데이터로 내리는 판단은 전부 틀린다.
측정의 목적은 숫자를 늘리는 게 아니라 판단의 근거를 얻는 것이다. 오염된 근거는 없느니만 못하다.
한계도 있다
솔직하게 적어 둔다.
- 광고 차단기에 막힌다. 외부 도메인 스크립트라 차단 목록에 올라 있는 경우가 있다. 그래서 GoatCounter의 숫자는 항상 실제보다 적다. 절대값이 아니라 추세와 비교로 읽어야 한다
- 깊은 분석은 없다. 전환 퍼널, 코호트, 사용자 여정 같은 건 못 한다. 애초에 그런 걸 하려면 사람을 추적해야 하고, 안 하기로 한 게 이 도구의 정체성이다
- 직접 운영하려면 손이 간다. 무료 호스팅 계정 대신 서버에 올릴 수도 있지만, 그러면 서버 관리가 따라온다
내 경우엔 셋 다 감당할 만했다. 알고 싶은 게 「어떤 도구가 쓰이는가」 하나였기 때문이다.
정리
측정 도구를 고르는 일은 기술 선택처럼 보이지만 실은 태도 선택에 가깝다. 무엇을 알고 싶은지, 그걸 알기 위해 무엇을 대가로 치를 셈인지가 그대로 드러난다.
나는 도구가 실제로 쓰이는지만 알면 됐고, 그 대가로 방문자 정보를 넘길 생각은 없었다. GoatCounter는 그 조건에 맞는 가장 단순한 답이었다.
- GoatCounter: https://www.goatcounter.com
- 소스: https://github.com/arp242/goatcounter
메모 · 계측 없이 만든 도구 20개 → 계측 붙이니 첫날부터 기록이 찍혔다. 「만들고 나서 재는」 순서가 아니라 「재면서 만드는」 순서였어야 했다는 게 이번의 교훈. 다음 도구는 그 숫자를 보고 정한다.