봇 오집계와 도메인 불일치, 두 버그를 한 번에 잡다
목차
오전 10시. 대시보드를 열었더니 슬렉스 블로그 조회수가 0으로 떠 있었다. 처음엔 트래픽이 없나 싶었는데, 로그 파일에는 분명히 접근 기록이 쌓이고 있었다. 뭔가 집계 로직이 틀어진 거다. 파고들어 보니 버그가 두 개였고, 두 버그가 서로 다른 레이어에서 각각 조용히 터지고 있었다.
첫 번째 버그: 도메인이 바뀐 걸 집계 로직이 몰랐다
slecs-parse.py와 site-pv.py 양쪽에서 블로그 도메인을 blog.slecs.net으로 하드코딩하고 있었다. 그런데 실제 도메인은 이미 slecsblog.com으로 바뀐 상태. 로그 파일엔 slecsblog.com 요청이 쌓이는데, 집계 코드는 blog.slecs.net을 기다리고 있었으니 매칭이 하나도 안 됐고, 결과는 0이었다.
# 변경 전
BLOG_DOMAIN = "blog.slecs.net"
# 변경 후
BLOG_DOMAIN = "slecsblog.com"
수정은 단순했지만, 파일이 여러 개에 걸쳐 있어서 site-pv.py, slecs-parse.py, stats-dashboard.py 세 군데를 동시에 고쳐야 했다. 한 군데만 바꾸면 파이프라인 중간 어딘가에서 또 0이 나올 수 있기 때문이다.
두 번째 버그: 봇이 PV로 집계되고 있었다
도메인 문제를 잡다가 PV 숫자 자체도 뭔가 이상하다는 걸 눈치챘다. 봇 필터 목록이 낡아 있었다. site-pv.py와 slecs-parse.py의 필터 목록에는 주요 크롤러가 빠져 있어서, 아래 UA들이 실사용자 PV로 그대로 집계되고 있었다.
| 추가한 봇 | 유형 |
|---|---|
| GoogleOther | 구글 기타 크롤러 |
| Scrapy | 파이썬 스크래핑 라이브러리 |
| Yeti | 네이버 봇 |
stats-dashboard.py에도 동일한 봇 필터가 별도로 존재했는데, 이미 더 업데이트된 버전이었다. 즉, 대시보드 레이어는 걸러내고 있었는데 PV 집계 레이어에서는 통과시키고 있던 거다. site-pv.py와 stats-dashboard.py 봇 목록을 동기화하는 게 이번 작업의 핵심이었다.
운영 문서에도 흔적을 남겼다
도메인 변경 건은 앞으로 또 생길 수 있다. 그래서 CLAUDE.md에 경고 메모를 추가했다.
도메인 변경 시: 로그 파일 경로 + 집계 라벨 두 군데를 반드시 동시에 갱신할 것. 한 쪽만 바꾸면 조회수 0 버그 재현됨.
이런 종류의 버그는 에러도 안 뜨고, 로그도 없고, 그냥 조용히 0이 나온다. 다음에 누가 똑같은 상황을 만났을 때 삽질하지 않도록 문서에 박아두는 게 맞다고 판단했다.
오전 한 시간 동안 두 종류의 버그를 잡았다. 하나는 도메인 불일치로 인한 매칭 실패, 다른 하나는 봇 필터 목록의 버전 불일치. 둘 다 단독으로는 단순해 보이지만, 집계 파이프라인이 여러 파일에 걸쳐 있다는 구조적 특성 때문에 고칠 파일을 빠짐없이 찾아서 함께 수정하는 게 관건이었다. 조용히 0이 나오는 버그는 항상 제일 늦게 발견되고, 제일 오래 살아남는다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.