Foundry
웹 크롤러 설계
중급
핵심

요구사항과 예산 계산

처리량이 아니라 대상을 펴는 문제다

크롤러는 처리량 문제로 보이기 쉽습니다. 그런데 계산해 보면 처리량은 남고 대상을 고르게 펴는 것이 어렵습니다.

항목
대상검색용 웹 크롤러
가져오기 예산월 10억 페이지 (신규와 재방문 합계)
보관누적 30억 페이지
페이지 크기평균 500KB
예의같은 호스트에 초당 1회 이하
크롤러 노드100대
로봇 배제 규칙반드시 지킨다
같은 내용한 벌만 저장한다

기능 요구사항과 범위 밖

구분내용
이번에 만든다주소 발견과 관리, 페이지 가져오기, 중복 걸러내기, 재방문
범위 밖자바스크립트 실행, 로그인이 필요한 페이지, 이미지와 영상, 본문 분석

자바스크립트 실행을 뺀 것이 규모를 정합니다. 브라우저를 띄워 실행하면 페이지 하나당 비용이 수십 배가 되고, 월 10억 페이지 을 감당할 수 없습니다. 그 대신 자바스크립트로만 만들어지는 내용은 못 봅니다.

예산을 초로 바꾼다

호스트당 초당 한 번이라는 규칙이 동시에 다뤄야 하는 호스트 수를 정한다 월 10억 페이지를 초로 바꾸면 10억 나누기 30일 나누기 86,400초 = 초당 약 386페이지 한 호스트에서는 초당 한 번만 가져올 수 있다 호스트 하나 = 초당 1페이지 그래서 초당 386페이지를 내려면 최소 386개 호스트를 동시에 다뤄야 한다 처리량 문제가 아니라 대상을 고르게 펴는 문제다 노드 100대는 넉넉하다. 노드당 초당 4페이지면 된다

월 10억 페이지 은 초당 약 386페이지입니다. 노드 100대 이면 노드당 초당 4페이지라 처리량은 전혀 부담이 아닙니다.

문제는 예의 규칙입니다. 한 호스트에서는 초당 한 번만 가져올 수 있으므로, 초당 386페이지를 내려면 최소 386개 호스트를 동시에 다뤄야 합니다.

이것이 이 설계의 성격을 정합니다. 빠르게 가져오는 문제가 아니라 다룰 호스트를 늘 충분히 확보하는 문제입니다.

저장 규모

페이지가 평균 500KB 이므로 월 500TB 입니다. 보관 누적 30억 페이지 이면 그보다 훨씬 큽니다.

여기서 중복 제거가 저장 비용과 직결됩니다. 같은 내용이 여러 주소로 오는 일이 흔하고, 그것을 걸러내지 못하면 저장량이 몇 배가 됩니다.

예의를 요구사항으로 적는 이유

예의 규칙은 우리가 선택하는 것이 아니라 지켜야 하는 것입니다. 지키지 않으면 상대 사이트에 부담을 주고, 결국 우리 크롤러가 차단됩니다.

지키지 않으면결과
한 호스트에 몰아서 요청그 사이트가 우리를 막는다
로봇 배제 규칙 무시신뢰를 잃고 법적 문제가 될 수 있다

차단되면 그 사이트를 영구히 못 보게 됩니다. 크롤러의 자산은 접근 가능한 사이트 목록이고, 예의가 그 자산을 지킵니다.

무엇이 병목인지 먼저 말한다

이 요구사항에서 병목은 셋입니다.

다룰 수 있는 호스트 수
방문할 주소 목록의 크기
저장 비용

처리량과 대역폭은 병목이 아닙니다. 무엇이 병목이 아닌지 말하는 것도 요구사항 정리의 일부입니다. 아니라고 말하지 않으면 뒤에서 그쪽을 최적화하게 됩니다.

면접에서 이렇게 나옵니다

Q.크롤러 요구사항을 어떻게 정리하시겠습니까

예산을 초로 바꾸고 예의 규칙과 곱해 봅니다.

월 10억 페이지 은 초당 약 386페이지입니다. 노드 100대 이면 노드당 초당 4페이지라 처리량은 부담이 아닙니다.

그런데 한 호스트에서는 초당 한 번만 가져올 수 있으므로 최소 386개 호스트를 동시에 다뤄야 합니다.

빠르게 가져오는 문제가 아니다
다룰 호스트를 늘 충분히 확보하는 문제다

흔한 실수: 처리량과 대역폭을 병목으로 잡는 것. 계산해 보면 둘 다 여유가 큽니다. 무엇이 병목이 아닌지 말하지 않으면 뒤에서 그쪽을 최적화하게 됩니다.

Q.자바스크립트 실행을 범위 밖으로 둔 이유가 무엇인가요

페이지 하나당 비용이 수십 배가 되어 예산을 감당할 수 없습니다.

브라우저를 띄워 실행하면 메모리와 시간이 크게 늘어납니다. 월 10억 페이지 규모에서는 그 비용을 낼 수 없습니다.

대가는 자바스크립트로만 만들어지는 내용을 못 보는 것입니다. 요구사항에 적어 두면 그 한계를 알고 쓰게 됩니다.

선택대가
실행하지 않는다일부 내용을 못 본다. 예산 안에 들어온다
실행한다다 본다. 예산이 수십 배 필요하다

흔한 실수: 중요한 사이트만 실행하겠다고 덧붙이는 것. 좋은 방향이지만 중요도를 어떻게 정하는지가 새 문제입니다. 요구사항 단계에서는 범위 밖으로 두고, 필요해지면 별도 설계로 다룹니다.

Q.예의 규칙을 요구사항에 적는 이유가 무엇인가요

지키지 않으면 차단되고, 차단되면 그 사이트를 영구히 못 봅니다.

지키지 않으면결과
한 호스트에 몰아서 요청그 사이트가 우리를 막는다
로봇 배제 규칙 무시신뢰를 잃고 법적 문제가 될 수 있다

크롤러의 자산은 접근 가능한 사이트 목록입니다. 예의가 그 자산을 지킵니다.

그리고 이 규칙이 설계를 정합니다. 호스트당 초당 한 번이라는 제약이 곧 동시에 다뤄야 하는 호스트 수를 정하기 때문입니다.

흔한 실수: 예의를 나중에 붙이는 옵션으로 보는 것. 이 규칙은 처리량 구조를 결정하는 제약이라 설계의 처음부터 들어가야 합니다. 나중에 붙이면 큐 구조를 다시 만들게 됩니다.

Q.이 설계의 병목은 무엇인가요

다룰 호스트 수, 주소 목록의 크기, 저장 비용입니다.

처리량: 노드당 초당 4페이지. 부담 없다
대역폭: 초당 386페이지 x 500KB. 감당 가능하다
호스트 수: 초당 386개를 동시에 다뤄야 한다

주소 목록은 크롤한 페이지보다 훨씬 크게 자랍니다. 페이지 하나에서 여러 주소가 나오기 때문입니다.

저장은 월 500TB이고 중복을 걸러내지 못하면 몇 배가 됩니다.

흔한 실수: 크롤러를 대역폭 문제로 보는 것. 계산해 보면 여유가 있습니다. 이 설계의 어려움은 조율과 관리이고, 그것을 먼저 말하면 뒤의 개념들이 자연스럽게 이어집니다.

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

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

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