7편에서 네이버 크롤링의 순서 효과를 세 번 독립적으로 확정하고, 타깃 수를 줄이는 것도 쿨다운을 넣는 것도 둘 다 효과가 없다는 걸 확인했다. 남은 방향은 하나였다 — 훨씬 작은 배치로 쪼개서 배치 사이에 진짜 쉬는 시간을 주는 것. 다만 그때까지 시도한 건 전부 이 가설의 약화된 버전이었다. 이번엔 제대로 해봤다.
배치를 나누고, 가장 나쁜 자리를 일부러 그대로 뒀다 — 13·15·16·17차 전멸조 그대로
21개 타깃을 원래 순서 그대로 3~4개씩 6개 배치로 나눴다. 각 배치는 완전히 별도의 실행으로 돌렸고, 배치 사이엔 30분씩 실제로 쉬었다 — 지금까지 시도했던 5초짜리 쿨다운과는 자릿수가 다른 휴식이었다.
일부러 손대지 않은 것도 있었다. 지금까지 모든 실험(13차, 15차, 16차, 17차)에서 큐의 맨 끝에 있을 때마다 거의 전멸했던 그룹 — 삼성전기, 삼성중공업·삼성디스플레이, 레인보우로보틱스 — 을 이번에도 그대로 마지막 6번째 배치에 뒀다. 배치 분리 자체가 효과가 있는지를 보려는 실험이지, 순서를 또 흔들어서 무언가를 다시 증명하려는 게 아니었다. 가장 가혹한 조건을 그대로 유지한 채로 검증하고 싶었다.
결과 — 6배치, 21타깃, 전부 클린
| 배치 | 타깃 구성 | 403(둘 다 실패) |
|---|---|---|
| 1 | LG전자 / LG AI연구원·LG CNS / LG이노텍·LG엔솔 / HD현대사이트솔루션·인프라코어 | 0건 |
| 2 | HD현대중공업·아비쿠스 / LS오토모티브·LS엠트론 / 경신·SL | 0건 |
| 3 | SK하이닉스 / SK C&C·SK텔레콤 / 현대자동차 / 기아·보스턴다이내믹스 | 0건 |
| 4 | 현대모비스 / 현대트랜시스·현대위아 / 현대로템·현대오토에버 / 삼성전자 | 0건 |
| 5 | 삼성DS / 삼성SDS / 삼성SDI | 0건 |
| 6 | 삼성전기 / 삼성중공업·삼성디스플레이 / 레인보우로보틱스 | 0건 |
배치 사이 휴식 다섯 번(30분×5)을 포함해 총 3시간 10분이 걸렸다. 실제 작업 시간만 더하면 40분 남짓 — 대부분은 그냥 쉬는 시간이었다. 그리고 그 마지막 배치, 지금까지 한 번도 살아남은 적 없던 그 자리까지 포함해서 21개 타깃 전부에서 403이 단 한 건도 나오지 않았다. 13차부터 지금까지 다섯 번의 시도 중 처음 나온 완전히 깨끗한 실행이었다.
순서가 아니라 회복 시간이 핵심이었다 — 네이버 크롤링 IP 차단 회복 시간
12차부터 17차까지 쌓아온 결론은 “늦게 처리되는 타깃일수록 진다”는 순서 효과였다. 맞는 관찰이었지만, 정확한 원인은 아니었다. 이번 결과가 보여준 건 순번 자체가 저주받은 게 아니라, 그 순번에 도달하기까지 이전 배치들이 써버린 요청 예산이 회복될 시간이 있었는가가 진짜 변수였다는 것이다. 5초 쿨다운(14, 15차)과 타깃 수 축소(17차)가 둘 다 효과가 없었던 이유도 같은 선에서 설명된다 — 둘 다 “쉬는 시간”이 초 단위였거나 아예 없었다. 회복이 일어날 시간 자체를 준 적이 없었으니, 순서 효과가 사라질 이유도 없었던 거다.
아직 안 끝난 질문들 — 15분 휴식·7개 배치·파이프라인 자동화
근본 원인은 이걸로 확인됐다고 본다. 다만 이번 조건(3~4개씩, 30분)이 최소 조건인지는 모른다. 휴식을 15분으로 줄여도 되는지, 배치를 더 크게 (예를 들어 7개씩) 묶어도 되는지는 아직 확인 안 했다 — 그러면 전체 소요 시간을 지금의 3시간 10분보다 줄일 수 있을 것이다. 그리고 지금은 이 배치+휴식을 셸 스크립트로 수동으로 돌렸는데, 이 방식을 계속 쓰려면 파이프라인 자체에 이 오케스트레이션을 넣어야 한다. 이건 다음 단계로 남겨뒀다.
남는 생각
이번 시리즈에서 반복된 패턴이 있었다 — 뭔가를 고쳤다고 생각할 때마다 다시 재봐서 아니라는 걸 확인하고, 그 확인이 다음 가설을 좁혀줬다. 쿨다운도, 타깃 수 축소도 그 자체로는 실패였지만, 그 실패들이 “쉬는 시간의 규모가 문제다”라는 결론으로 정확히 몰아갔다. 그리고 그 결론을 검증할 때, 가장 나쁜 조건을 피하지 않고 그대로 둔 채로 확인했다는 게 이번 결과를 더 믿을 만하게 만들었다 — 유리한 조건에서 나온 클린이 아니라, 매번 지던 자리까지 포함한 클린이었다.