증상
주문 조회가 0건을 반환했다. "미발송 없음"으로 판정하고 넘어갔다. 실제로는 미이행 9건이 방치돼 있었고 그중 4건은 기한을 넘긴 상태였다.
원인
조회 기간을 40일로 잡았는데 그 API의 상한이 32일 미만이었다.
"endTime-startTime range should less than 32 day."
HTTP 400이었다. 그런데 코드가 data 배열의 길이만 세고 있었으니 len([]) == 0 → "0건"이 됐다.
★ 응답 본문만 보고 상태코드를 안 보면, 모든 4xx가 0건으로 둔갑한다.
해법
조회 래퍼에서 상태코드를 먼저 검사하고, 2xx가 아니면 0을 반환하지 말고 예외를 던진다. "0건"과 "조회 실패"를 같은 값으로 돌려주는 함수는 호출자를 반드시 속인다.
같은 형태 — 공개 지리 데이터 API
검색 반경 파라미터를 상한(10,000m)의 세 배로 올렸다. API는 에러를 돌려줬고, 수집기는 "문서 0개"로 정상 종료했다. 로그를 안 봤으면 몇 시간을 헛돌았다.
★ 상한이 있으면 값을 키우지 말고 호출 지점을 늘린다. 중심점 하나의 반경을 키우는 대신 중심 + 사방 4개 지점으로 타일링하고 제목으로 dedupe한다. 범위를 넓히는 방법은 둘뿐이고, 상한이 있으면 후자만 남는다.
★ 수집기는 0건을 정상으로 넘기지 않는다. "0건"은 경고로 찍는다 — 진짜 0건이면 사람이 한 번 보면 되고, 가짜 0건이면 그 경고가 유일한 단서다.