Foundry
웹 크롤러 설계
심화
핵심

같은 내용 다른 주소

주소로는 못 걸러내고 내용으로 걸러낸다

저장이 월 500TB 입니다. 같은 내용이 여러 벌 저장되면 그만큼 곱해집니다. 주소 정규화로 잡히지 않는 중복이 이 절의 주제입니다.

주소를 정규화해도 남는 중복

다른 주소들이 같은 내용을 담고 있으면 내용의 지문으로 걸러낸다 주소는 다른데 내용이 같다 주소 뒤에 추적 매개변수 인쇄용 주소 다른 도메인의 사본 내용 지문 하나 한 벌만 저장 주소 정규화로는 다른 도메인의 사본을 못 잡는다 그래서 주소가 아니라 내용으로 판단한다 다만 링크는 여전히 뽑는다. 중복 페이지에도 새 주소가 있다 저장은 건너뛰고 발견은 계속한다

앞 단계에서 주소를 정규화했습니다. 그것으로 잡히는 것은 같은 사이트 안의 같은 페이지뿐입니다.

중복의 종류주소 정규화로 잡히나
추적 매개변수만 다른 주소잡힌다
인쇄용 페이지어렵다. 경로가 다르다
다른 도메인의 사본못 잡는다
같은 글이 목록과 상세에 함께못 잡는다

그래서 주소가 아니라 내용으로 판단합니다. 내용의 지문을 만들어 이미 있는 지문이면 저장하지 않습니다. 지문을 만드는 방법 자체는 파일 업로드 설계의 중복 제거에서 다뤘고, 여기서는 그것을 저장 여부 판단에 쓰는 것이 다릅니다.

저장은 건너뛰고 발견은 계속한다

중복이라고 그 페이지를 버리면 안 됩니다. 그 페이지의 링크는 여전히 쓸모가 있습니다.

내용이 중복이면 저장을 건너뛴다
링크는 그대로 뽑아 목록에 넣는다

사본 사이트가 원본에 없는 링크를 갖고 있는 경우가 있습니다. 그리고 링크 추출은 이미 내려받은 내용으로 하는 일이라 추가 비용이 없습니다.

거의 같은 페이지

완전히 같지 않아도 중복인 경우가 많습니다. 광고나 날짜만 다른 페이지가 그렇습니다. 지문이 조금만 달라도 값이 완전히 달라지므로 완전 일치로는 못 잡습니다.

거의 같은 것을 잡으려면 비슷한 내용에 비슷한 값이 나오는 방식을 씁니다. 그러면 값의 거리로 유사도를 판단할 수 있습니다.

방법잡는 것대가
완전 일치 지문바이트가 같은 것값싸다
유사도 지문거의 같은 것계산과 비교가 더 든다

둘을 함께 씁니다. 완전 일치로 대부분을 값싸게 걸러내고, 남은 것에만 유사도 판단을 적용합니다.

중복이 목록을 오염시킨다

중복 페이지는 저장만 늘리는 것이 아닙니다. 그 페이지에서 나온 주소들이 목록을 채우고, 그 주소들도 대개 중복 페이지로 이어집니다.

그래서 중복 판정이 늦으면 목록이 먼저 오염됩니다. 내려받은 직후에 판단해 그 다음 발견을 조절하는 편이 낫습니다. 사본 사이트로 확인되면 그 호스트의 우선순위를 낮춥니다.

원본을 어떻게 고르나

중복 중에서 어느 것을 남길지 정해야 합니다. 검색 결과에 보여줄 주소가 그것이기 때문입니다.

먼저 발견한 것을 남긴다
또는 링크가 더 많이 걸린 쪽을 남긴다
또는 사이트가 스스로 알려 준 정본 주소를 따른다

사이트가 알려 주는 정본 주소가 가장 정확합니다. 그 표시가 있으면 우리가 추측하지 않아도 되고, 없을 때만 우리 기준을 씁니다.

면접에서 이렇게 나옵니다

Q.같은 내용의 중복을 어떻게 걸러내시겠습니까

내용의 지문으로 판단합니다. 주소로는 잡히지 않는 중복이 많습니다.

중복의 종류주소 정규화로 잡히나
추적 매개변수만 다름잡힌다
인쇄용 페이지어렵다
다른 도메인의 사본못 잡는다

내용의 지문을 만들어 이미 있는 지문이면 저장하지 않습니다. 지문을 만드는 방법은 파일 업로드 설계에서 다뤘고, 여기서는 저장 여부 판단에 쓰는 것이 다릅니다.

흔한 실수: 중복 페이지를 버리는 것. 그 페이지의 링크는 여전히 쓸모가 있습니다. 사본 사이트가 원본에 없는 링크를 갖고 있는 경우가 있고, 링크 추출은 이미 내려받은 내용으로 하는 일이라 추가 비용이 없습니다.

Q.거의 같은 페이지는 어떻게 다루나요

유사도 지문을 함께 씁니다. 완전 일치로는 못 잡습니다.

광고나 날짜만 다른 페이지는 바이트가 다르므로 지문이 완전히 달라집니다. 비슷한 내용에 비슷한 값이 나오는 방식을 쓰면 값의 거리로 유사도를 판단할 수 있습니다.

방법잡는 것대가
완전 일치바이트가 같은 것값싸다
유사도거의 같은 것계산과 비교가 더 든다

둘을 함께 씁니다. 완전 일치로 대부분을 값싸게 걸러내고 남은 것에만 유사도 판단을 적용합니다.

흔한 실수: 유사도 판단만 쓰는 것. 비용이 훨씬 크고, 완전히 같은 중복이 실제로 가장 많습니다. 값싼 것으로 먼저 줄이는 순서가 중요합니다.

Q.중복이 저장 비용만 늘리나요

아닙니다. 목록도 함께 오염시킵니다.

중복 페이지에서 나온 주소들이 목록을 채우고, 그 주소들도 대개 중복 페이지로 이어집니다.

중복 판정이 늦으면 목록이 먼저 오염된다
내려받은 직후에 판단해 다음 발견을 조절한다

사본 사이트로 확인되면 그 호스트의 우선순위를 낮춥니다. 그러면 그 사이트의 주소가 목록에서 뒤로 밀립니다.

흔한 실수: 중복 제거를 저장 단계의 일로만 두는 것. 저장 직전에 걸러내면 저장은 아끼지만 이미 예산을 써서 내려받았고 목록도 부풀었습니다. 판정 시점을 앞으로 옮기는 것이 더 큰 절약입니다.

Q.중복 중에서 어느 것을 남기시겠습니까

사이트가 알려 준 정본 주소를 우선 따릅니다.

검색 결과에 보여줄 주소를 정하는 문제이므로 판단이 필요합니다.

사이트가 정본 주소를 표시했으면 그것을 따른다
없으면 링크가 더 많이 걸린 쪽을 남긴다
그것도 같으면 먼저 발견한 것을 남긴다

사이트가 알려 주는 것이 가장 정확합니다. 그 표시가 있으면 우리가 추측하지 않아도 됩니다.

흔한 실수: 먼저 발견한 것을 무조건 남기는 것. 크롤 순서는 우연에 가까우므로 사본을 원본으로 굳힐 수 있습니다. 그리고 한 번 굳으면 나중에 바꾸기 어렵습니다.

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

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

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