상대 서버를 존중하며 오래 도는 크롤러 만들기

웹 · 앱 개발4분 읽기

크롤러를 만들 때 사람들이 가장 먼저 떠올리는 목표는 빠르게 많이 모으는 것입니다. 하지만 넓은 지역을 몇 시간씩 훑는 수집기에서는 이 목표가 오히려 발목을 잡습니다. 너무 빠르게 두드리면 상대 서버에 부담을 주고 얼마 못 가 막힙니다. 지도 업체 수집 도구를 만들며 배운 것은, 오래 안정적으로 도는 크롤러의 미덕은 속도가 아니라 예절과 절제라는 점이었습니다. 공개된 정보를 다루더라도 상대를 배려하는 설계가 결국 더 많은 데이터를 안전하게 가져다줍니다.

사람의 속도에 가깝게 움직인다

첫 원칙은 조회 사이에 간격을 두는 것입니다. 한 칸을 조회하고 곧바로 다음 칸으로 달려들지 않고 매번 얼마쯤 쉬었다가 다음으로 넘어갑니다. 이 간격을 고정값이 아니라 어느 범위 안에서 무작위로 두는 것이 중요합니다. 정확히 같은 간격으로 두드리면 기계가 접속하는 티가 나지만 사람이 지도를 넘겨 보는 리듬은 들쭉날쭉하기 때문입니다. 상세 정보를 보러 각 업체 페이지를 방문할 때도 마찬가지로 짧은 간격을 둡니다.

이 절제는 단순히 안 막히려는 요령이 아니라 상대 서버를 향한 예의입니다. 공개된 검색 결과라도 그것을 제공하는 쪽의 자원을 쓰는 것이니, 사람이 열람하는 것보다 크게 빠르지 않은 속도로 움직이는 것이 마땅합니다. 로그인 뒤 데이터나 접근이 막힌 곳을 우회로 뚫는 방향이 아니라, 누구에게나 열려 있는 정보를 성실한 속도로 열람하듯 모으는 것이 이 도구가 지키는 선입니다.

실패를 격리해 전체를 지킨다

넓은 지역을 오래 훑다 보면 특정 칸에서 일시적인 오류가 나기 마련입니다. 네트워크가 잠깐 흔들리거나 페이지가 늦게 뜨는 경우입니다. 이때 한 칸의 실패로 전체 수집을 멈추면 곤란합니다. 그래서 실패한 칸은 잠시 뒤 다시 시도하되, 같은 칸이 정해진 횟수를 넘겨 계속 실패하면 그 칸만 실패로 격리하고 나머지 수집은 계속 진행합니다. 한 곳의 문제가 전체를 무너뜨리지 않게 하는 것입니다.

여러 브라우저를 동시에 돌리는 구조에서는 이 격리가 더 중요합니다. 워커 하나가 특정 칸에서 막혀도 다른 워커들은 자기 칸을 계속 처리하고 문제가 된 칸은 재시도 큐를 돌다 한도를 넘으면 조용히 실패 목록으로 빠집니다. 어느 칸이 왜 실패했는지는 진행 로그에 남아 수집이 끝난 뒤 확인하고 필요하면 그 부분만 다시 돌릴 수 있습니다. 완벽하게 다 모으는 것보다 멈추지 않고 끝까지 도는 것을 우선한 선택입니다.

물러설 줄 아는 대응

아무리 조심해도 상대 서비스가 접속이 과하다는 신호를 보낼 때가 있습니다. 평소와 다른 안내 페이지나 확인 요청이 뜨는 경우입니다. 이 신호를 무시하고 계속 두드리는 것은 예절에도 어긋나고 결국 완전히 막히는 길입니다. 그래서 이런 신호가 감지되면 그 즉시 수집을 멈추고 물러섭니다. 무리해서 밀어붙이지 않고 잠시 쉬었다가 다시 시작하는 쪽을 택합니다.

여기에 오래 도는 세션을 위한 관리도 곁들입니다. 한참을 연속으로 조회하면 브라우저에 상태가 쌓여 무거워지므로, 일정 횟수마다 쿠키를 정리하고 더 길게 돌면 브라우저 자체를 새로 띄웁니다. 연속으로 오류가 몇 번 이어지면 잠시 숨을 고르게도 합니다. 이 모든 장치의 목적은 하나입니다. 빠르게 많이가 아니라 상대를 존중하며 끝까지 안정적으로 도는 것. 그래야 몇 시간짜리 수집이 중간에 막히지 않고 온전히 완주합니다.

이렇게 성실하게 모은 결과가 온전히 남으려면 중단 후 이어받는 크롤러의 이어받기가 함께 필요하고 조회를 어디에 집중할지는 적응형 그리드 수집이 정합니다. 전체 시스템은 지도 업체 정보 수집 자동화 사례에 있습니다.

자주 묻는 질문

왜 일부러 느리게 조회하나요?

상대 서버에 부담을 주지 않기 위해서입니다. 공개된 정보라도 그것을 제공하는 쪽의 자원을 쓰는 것이니, 사람이 열람하는 속도에 가깝게 조회 간격을 두는 것이 예의이자 오래 안 막히고 도는 방법입니다. 빠르게 두드릴수록 부담과 차단 위험이 함께 커집니다.

한 칸에서 오류가 나면 전체가 멈추나요?

멈추지 않습니다. 실패한 칸은 잠시 뒤 다시 시도하고 정해진 횟수를 넘겨 계속 실패하면 그 칸만 격리한 채 나머지 수집을 이어갑니다. 어느 칸이 실패했는지는 로그에 남아 끝난 뒤 필요한 부분만 다시 돌릴 수 있습니다.

차단 신호가 감지되면 어떻게 하나요?

접속이 과하다는 신호가 뜨면 즉시 수집을 멈추고 물러섰다가 대기 후 재개합니다. 무리해서 밀어붙이지 않고 오래 연속으로 도는 세션에서는 쿠키 정리와 브라우저 재시작 같은 관리도 곁들여 안정적으로 완주하도록 설계했습니다.

#크롤링예절#rate limit#안정성#데이터수집

업무자동화 구축이 필요하신가요?

무료 상담 신청