
블로그 관리자 대시보드에 통계 그래프 하나 띄워보겠다고 구글 클라우드 콘솔 뒤적거리다가 심각한 귀차니즘이 왔다.
프로젝트 만들고, API 켜고, 서비스 계정 JSON 다운받아서 권한 엮고...
초기 설정도 복잡한데, 시간이 지나 토큰 만료되면 대시보드 그래프가 툭 끊겨버리는 게 제일 피곤했음.
그때마다 다시 콘솔 들어가서 재발급받고 설정 만져야 하고.
조용히 글이나 쓰려고 만든 블로그인데 통계 하나 보자고 이 고생을 계속 해야 하나 싶었다.
뭔가 더 편하고 손 안 가는 방법이 없을까 고민하기 시작함.
1. "어차피 Cloudflare 위에 올려놨잖아?"
문득 생각해보니 SKBE는 애초에 Cloudflare Pages랑 D1 데이터베이스 위에서 돌아가고 있음.
그리고 Cloudflare엔 이미 자체 방문자 통계인 Cloudflare Web Analytics(CFA)가 무료로 내장되어 있다.
태그랑 토큰 하나만 던져두면 복잡한 OAuth 만료니 주기적인 키 갱신이니 신경 쓸 필요 없이 뒤에서 조용히 수집해 준다.
'어차피 내 인프라가 다 Cloudflare 위에 있는데, 굳이 외부 구글 API 만료에 스트레스받지 말고 그냥 CFA를 블로그 기본 통계로 메인으로 쓰자' 싶었음.
2. 가볍게 시작했다가 일이 커짐
처음 계획은 단순했다. CFA API 호출해서 관리자 화면에 숫자 몇 개, 그래프 하나 띄우고 끝낼 생각이었음.
근데 또 코드를 건드리다 보니 특유의 강박이 도져서 일이 하나둘 늘어났다.
- 어드민에 토큰 직접 넣기 찝찝함:
CFA를 끌어오려면 Cloudflare API 토큰에 Analytics 읽기 권한을 열어줘야 하는데, 최초 설치할 때 권한 추가 하나 더 늘어난 것도 사실 마음에 안 들었음.
근데 기껏 발급한 그 토큰을 웹에 노출되는 Pages 환경변수에 그대로 얹어두려니 보안상으로도 심히 찝찝함.
그래서 외부 접근 주소(라우트)가 아예 없는 비공개 크론 Worker(cfa-sync)를 따로 팠다.
걔가 뒤에서 매시간 조용히 D1에 스냅샷만 꽂아 넣고, 어드민은 토큰 없이 D1만 읽게 만듦. 털릴 구멍 자체를 또 하나 지워버림.
- Workers 호출 횟수는 무조건 최소화:
작업하면서 가장 신경 썼던 부분 중 하나다.
CFA API에서 데이터를 긁어와 D1에 적재할 때 Workers 호출 횟수가 불필요하게 늘어나는 꼴은 절대 보기 싫었음.
그래서 7일치 데이터를 불러와서 동기화할 때도 Workers 1회 호출 안에서 깔끔하게 묶어 처리하도록 짰다.
- 어? 20명 찍혀 있던 게 왜 0명이 되지?:
테스트하다 보니 당일에는 20명 찍혀 있던 방문자 수가 하루 지나니까 0명으로 초기화되는 요상한 꼴을 목격함.
몇 명 오지도 않는 블로그에 내 작고 소중한 방문 숫자가 사라지는 건 도저히 용납이 안 돼서, 오늘 데이터에 한해 직전 값보다 작으면 덮어쓰지 않는 단조 증가 가드를 걸어둠.
- D1에 쌓인 데이터 엑셀로 뽑기:
날짜별로 스냅샷이 쌓이니까 이걸 엑셀로 내려받아서 데이터 정리도 가능하게 할 생각이 듬.
CSV 하나로 퉁치려다 디멘션 섞여서 난잡해지는 게 보기 싫어서 SheetJS 붙여서 탭별로 깔끔하게 쪼갠 멀티시트 형식으로 만들게 됨.
- 서브 블로그 배포 파이프라인에 cfa-sync 얹기:
메인 블로그 말고 서브 계정들에도 동기화 워커가 올라가야 하는데 계정마다 일일이 수동 배포하는 건 번거로움.
그래서 기존 멀티 계정 동기화 스크립트에 cfa-sync도 슬쩍 얹어서, 배포된 게 없으면 알아서 자동 배포되도록 파이프라인에 추가해 둠.
3. 쓸 사람이 있을지는 모르겠지만
'구글 API 인증 챙기기 번거롭다'는 지극히 사소한 이유로 시작했는데, 정신 차려보니 또 버전 하나(v1.0.1.3) 올릴 만큼 이것저것 건드려놨다.
돌이켜보면 내가 가장 집중해서 코드를 짤 때는, 대단한 목표가 있을 때가 아니라 내가 쓰면서 느끼는 번거로움을 내 손으로 직접 치워버릴 때인 것 같다.
이제 구글 콘솔 들락거릴 필요도 없고, 토큰 만료 걱정도 없음.
매시간 정각마다 보이지 않는 곳에서 조용히 D1에 데이터 쌓이고, 필요할 때 엑셀로 쏙 뽑아보면 됨.
실제 이 엔진 받아서 쓸 사람이 몇 명이나 될까 싶은데, 엑셀 시트 탭까지 정성스럽게 쪼개놓은 내 자신을 보면 좀 웃기긴 한데...
뭐 일단 오픈 소스로 풀어놨으니 최소한의 의무라고 생각하고 누구 하나라도 유용하게 쓰면 됐다 싶음.
그 한 명이 있을까가 심히 의문스럽지만...
댓글 0개
댓글을 작성하려면 로그인이 필요합니다.