Foundry
웹 크롤러 설계
심화
핵심

끝나지 않는 경로

상한이 없으면 한 사이트가 예산을 다 먹는다

주소를 발견하는 대로 목록에 넣으면 끝나지 않는 경로에 빠집니다. 크롤러 특유의 함정이고, 대응은 대개 상한입니다.

무한히 만들어지는 주소

날짜를 계속 넘기는 링크는 주소를 무한히 만들어 낸다 달력 페이지의 다음 달 링크 2026-09 2026-10 2026-11 끝이 없다 각 페이지에 내용은 거의 없고 링크만 있다 상한이 없으면 한 사이트가 목록과 예산을 다 먹는다 그래서 세 가지 상한을 둔다 호스트별 주소 수, 경로 깊이, 같은 형태 주소 개수 내용이 거의 없는 페이지가 링크만 뿜으면 의심한다

달력 페이지의 "다음 달" 링크는 끝이 없습니다. 각 페이지에는 내용이 거의 없고 링크만 있습니다. 정렬 옵션이나 필터가 조합되는 페이지도 같습니다.

그대로 두면 한 사이트가 목록과 예산을 다 먹습니다. 앞에서 본 호스트 편중 문제의 극단적인 형태입니다.

세 가지 상한

상한막는 것
호스트별 주소 수한 사이트의 독점
경로 깊이끝없이 이어지는 링크 사슬
같은 형태 주소 개수매개변수만 바뀌는 무한 조합

세 번째가 특히 쓸모 있습니다. 주소에서 숫자와 날짜를 빼고 형태만 남겨 세어 보면, 같은 형태가 수천 개 나오는 것이 함정의 신호입니다.

내용이 없는 페이지를 의심한다

함정 페이지의 공통점은 내용이 거의 없고 링크만 많다는 것입니다. 이 비율을 재면 함정을 자동으로 찾을 수 있습니다.

본문 길이가 아주 짧다
그런데 링크가 아주 많다
그 링크들이 같은 형태다

세 조건이 함께 나타나면 그 경로의 우선순위를 크게 낮춥니다. 막는 것이 아니라 뒤로 미루는 것이 안전합니다. 진짜 목록 페이지도 이 모양을 갖기 때문입니다.

리디렉션 사슬

주소가 다른 주소로 보내고 그것이 또 보내는 경우가 있습니다. 끝이 없거나 원래 자리로 돌아오기도 합니다.

대응내용
사슬 길이에 상한을 둔다대개 다섯 번이면 충분하다
지나온 주소를 기억한다돌아오는 것을 감지한다
최종 주소를 정본으로 기록한다다음에 바로 간다

상한이 놓치는 것이 있다

상한은 값싸고 확실하지만 정상 사이트의 깊은 내용도 함께 자릅니다. 아주 큰 사전 사이트나 자료 저장소가 그렇습니다.

그래서 상한을 호스트마다 다르게 둡니다.

과거에 좋은 내용을 많이 낸 호스트는 상한을 높인다
새 호스트는 낮게 시작한다

신뢰를 쌓은 곳에 더 많은 예산을 주는 구조입니다. 우선순위 신호와 같은 자료를 쓰므로 따로 관리할 것이 늘지 않습니다.

함정은 악의가 아닐 때가 많다

일부러 크롤러를 괴롭히는 경우도 있지만 대부분은 그냥 그렇게 만들어진 사이트입니다. 의도를 판단하려 하지 않고 결과로 다룹니다. 예산을 많이 먹고 얻는 것이 적으면 뒤로 미루는 것으로 충분합니다.

면접에서 이렇게 나옵니다

Q.끝나지 않는 주소 경로를 어떻게 다루시겠습니까

세 가지 상한을 둡니다.

상한막는 것
호스트별 주소 수한 사이트의 독점
경로 깊이끝없이 이어지는 링크 사슬
같은 형태 주소 개수매개변수만 바뀌는 무한 조합

세 번째가 특히 쓸모 있습니다. 주소에서 숫자와 날짜를 빼고 형태만 남겨 세면 같은 형태가 수천 개 나오는 것이 함정의 신호입니다.

달력의 다음 달 링크나 필터 조합 페이지가 대표적입니다.

흔한 실수: 깊이 상한만 두는 것. 달력은 깊이가 아니라 옆으로 무한히 뻗습니다. 상한의 종류를 나눠 두지 않으면 한 종류의 함정만 막습니다.

Q.함정 페이지를 자동으로 찾을 수 있나요

내용과 링크의 비율로 찾습니다.

본문 길이가 아주 짧다
그런데 링크가 아주 많다
그 링크들이 같은 형태다

세 조건이 함께 나타나면 그 경로의 우선순위를 크게 낮춥니다.

막는 것이 아니라 뒤로 미루는 것이 안전합니다. 진짜 목록 페이지도 이 모양을 갖기 때문입니다. 뒤로 미루면 예산이 남을 때만 보게 되므로 손실이 작습니다.

흔한 실수: 판정 후 완전히 차단하는 것. 이 판정은 확실하지 않고, 잘못 차단하면 그 사이트의 정상 내용까지 영구히 못 봅니다. 확실하지 않은 판정에는 되돌릴 수 있는 대응을 붙입니다.

Q.상한이 정상 사이트를 자르지 않게 하려면

호스트마다 상한을 다르게 둡니다.

상한은 값싸고 확실하지만 아주 큰 사전 사이트나 자료 저장소의 깊은 내용도 함께 자릅니다.

과거에 좋은 내용을 많이 낸 호스트는 상한을 높인다
새 호스트는 낮게 시작한다

신뢰를 쌓은 곳에 더 많은 예산을 주는 구조입니다. 우선순위 신호와 같은 자료를 쓰므로 따로 관리할 것이 늘지 않습니다.

흔한 실수: 전역 상한 하나로 운영하는 것. 그 값을 큰 사이트에 맞추면 함정을 막지 못하고, 함정에 맞추면 큰 사이트의 대부분을 못 봅니다. 하나의 값으로 두 요구를 만족시킬 수 없습니다.

Q.리디렉션 사슬은 어떻게 다루나요

길이에 상한을 두고 지나온 주소를 기억합니다.

대응내용
사슬 길이 상한대개 다섯 번이면 충분하다
지나온 주소 기억돌아오는 것을 감지한다
최종 주소를 정본으로 기록다음에 바로 간다

마지막이 예산을 아낍니다. 매번 사슬을 따라가면 한 페이지에 여러 번의 가져오기를 쓰게 됩니다.

흔한 실수: 사슬의 중간 주소들을 목록에 넣는 것. 그 주소들은 내용이 없고 다른 곳으로 보낼 뿐인데 목록을 몇 배로 부풀립니다. 최종 주소만 남기고 중간은 대응 관계로만 기록합니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

웹 크롤러 설계 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.