데브허브 | DEVHUB | Design a Web Crawler: FAANG Interview QuestionDesign a Web Crawler: FAANG Interview Question
- 웹 크롤러는 검색 엔진 및 AI 모델을 위한 대규모 웹 데이터 수집 시스템으로, 매월 수십억 페이지를 방문합니다. 🕸️
- 대규모 크롤러는 빠르고 분산되어야 하며, 웹사이트에 부담을 주지 않도록 '정중'해야 하고, 중요한 페이지를 우선적으로 방문하는 '스마트함'과 오류 발생 시에도 계속 작동하는 '탄력성'을 갖춰야 합니다. 🚀
- 단순한 너비 우선 탐색(BFS) 방식은 동일 사이트 반복 접근으로 차단되거나 모든 페이지를 동일하게 취급하여 비효율적이라는 한계가 있습니다. 🚫
- '정중한' 크롤링을 위해 URL을 호스트별로 그룹화하고, 고정된 수의 큐에 해싱하여 매핑하며, 각 웹사이트에 대한 요청 사이에 지연 시간을 두어 과부하를 방지합니다. 🤝
- '스마트한' 크롤링을 위해 우선순위 결정 계층을 추가하여 페이지의 인기도, 업데이트 빈도, 외부 링크 수 등을 기반으로 URL의 가치를 평가하고, 가치 높은 페이지를 먼저 크롤링합니다. 🧠
- 중복 페이지 처리를 위해 이미 크롤링한 URL을 추적하는 'URL 확인 시스템'과 페이지 내용의 해싱을 통해 중복 콘텐츠를 감지하는 '콘텐츠 확인 시스템'을 사용합니다. 📝
- 크롤링 워크플로우는 페이지 다운로드 후 파서가 HTML을 분석하고 링크를 추출하며, 링크 추출기는 새 URL을 우선순위 결정기로 보내고, URL 필터는 불필요한 링크를 제거하는 방식으로 순환합니다. 🔄
- 수십억 페이지 규모를 처리하기 위해 크롤러는 여러 지역에 분산되어야 하며, 분산된 환경에서의 정중함 유지, DNS 캐싱을 통한 성능 최적화, 충돌 시 재시작을 위한 체크포인팅 등의 추가 고려 사항이 필요합니다. 🌍