증분 크롤이 첫 카테고리만 보고 멈춘 이유

쇼핑 데이터를 모으는 서비스에서 신상 피드가 비어 보인다는 이야기가 나왔다. 전체 크롤은 정상이었고 증분 크롤만 결과가 적었다.

종료 판정이 있던 자리

증분 크롤은 "이미 수집한 상품을 만나면 그만 본다"는 규칙으로 동작한다. 새로 올라온 것만 빠르게 훑기 위한 방식이다. 문제는 그 판정이 카테고리 단위가 아니라 몰 목록 전체 순회 단위에 걸려 있었다는 점이다.

그래서 첫 카테고리에서 기존 상품을 만나는 순간 그 몰의 나머지 카테고리를 아예 보지 않고 끝났다. 첫 카테고리에 신상이 없으면 그 몰은 통째로 비는 셈이었다.

수정

  • 조기 종료 판정을 카테고리 단위로 내렸다. 한 카테고리에서 기존 상품이 연속으로 나오면 그 카테고리만 끊고 다음으로 넘어간다.
  • "연속 N개"라는 조건을 뒀다. 목록 정렬이 항상 최신순이 아니어서, 한 개만 보고 끊으면 중간에 섞인 신상을 놓친다.
  • 몰별·카테고리별 수집 수를 로그로 남겨, 다음에 비슷한 증상이 생기면 어디서 끊겼는지 바로 보이게 했다.

배포하고 나서 확인한 것

수정 자체는 짧았지만, 배포 전까지 서버가 며칠 전 빌드로 돌고 있었다는 걸 그때 알았다. 코드를 고친 것과 운영에 반영된 것은 다른 일이다. 그 뒤로는 배포 직후 실제 동작하는 버전과 수집 건수를 같이 확인하고 닫는다.

크롤링백엔드데이터버그
증분 크롤이 첫 카테고리만 보고 멈춘 이유 · peppercode 개발 노트