1. 설명
웹의 크기가 폭발적으로 증가함에 따라 인터넷에서 정보를 얻는 수단으로 검색엔진은 존재는 매우 중요한다. 검색엔진은 웹 페이지를 수집하고, 수집된 웹 페이지에 색인을 구성하여, 이를 바탕으로 검색 결과를 사용자에게 전달하는 역활을 한다. 검색엔진의 대표적인 예로 Google, Naver, Yahoo 등이 있다.

검색엔진의 근간이 되는 웹크롤러는 인터넷상에 존재하는 웹 문서들을 추적하여 필요한 정보를 수집하는 기술을 말하며 검색시스템, 전자상거래 상품검색, 인트라넷 검색 소프트웨어 등 현재 대부분 인터넷 산업의 근간이 되는 핵심 기술이다.

인터넷이 계속적으로 성장함에 따라 웹 문서의 양이 매우 거대해지면서 기존의 단일시스템 환경 기반의 웹크롤러 기술은 한계에 직면하게 되었다. 따라서 고성능의 웹크롤러 시스템을 구현하기 위해 다음과 같은 내용을 고려해야 한다.
 
  • 웹에 대한 최신 정보를 제공하기 위해 다운로드 성능을 높이는 속도문제
  • 한번 다운로드 받은 문서를 다시 다운로드 하지 않게 막도록하는 유일성 문제
  • 과거게 다운로드 받은 문서가 아직도 유효한지, 혹은 변해서 없어졌는지를 알아내는 현행화 문제
  • 크롤러배제 표준과 저작권 문제

웹크롤러의 기본적인 요구사항으로 문서 수집 속도가 빠른 웹크롤러가 가장 성능이 우수한 웹크롤러라고 말할 수 있다. 동일한 네트워크 환경 하에게 웹크롤러가 문서 수집을 할 경우 성능을 향상할 수 있는 방법은 웹크롤러 시스템 내의 처리 속도를 최대화시키는 방법뿐이다. 웹크롤러 시스템의 성능을 향상 시키는 방법으로 일반적으로 멀티프로세스(또는 멀티쓰레드)를 사용한다. 하지만 멀티 프로세스로 동작하는 웹크롤러 시스템에서 다수의 프로세스가 동시에 한 개의 웹서버에 문서를 요청하게 된다면 상대 시스템과 네트웍에 과부하를 발생시킬수 있다.(DDoS 공격으로 보일수 있다.) 따라서 웹크롤러는 이러한 상황을 방지하기 위해 동일한 웹 서버에는 일정 시간간격을 두고 접근하도록 통제할 필요가 있다.

과부하를 방지하기 위한 도 다른 방법으로 배제규약이 있다. 크롤러배제 규약은 상대 시스템에 계속적인 접근으로 인한 과부하를 주거나, 일시적인 정보, CGI 등의 적당치 않은 부분을 검색하는 것을 막아보고자 제안된 규약으로 robots.txt 파일에 규칙을 정의하게 된다. 모든 웹크롤러는 가장 먼저 웹서버에 존재하는 robots.txt 파일을 읽어와 특정 URL이 주어졌을때 URL을 통과시켜야할지 폐기해야할지 결정할수 있어야 한다.


2. 구조
웹크롤러란 검색엔진의 구축 등을 위하여 웹페이지를 수집하는 프로그램으로, 제한된 자원 내에서 짧은 시간 동안 최대한 많은 웹 페이지를 수집하는 것이 그 목표이다. 웹크롤러의 기본적인 구조는 다음과 같다.


(출저: Stanford_IR_ch20)

웹크롤러는 URL을 관리하기 위한 Frontier와 URL을 통해 웹문서를 Fetch하기 위한 Agent로 구분할수 있다. Frontier는 내부적으로 2개의 자료구조를 유지해야 한다. 하나는 "방문했던 URL" 목록이며 다른 하나는 "방문해야할 URL" 목록이다. 시스템이 최초 구동하며 방문해야할 URL목록에는 초기입력으로 한개 이상의 Seed URL을 가지고 있다. 그러면 Frontier에서 URL이 Agent로 전달되고 Agent는 웹문서를 Fetch해 온다. Fetch된 웹 문서에서 분문과 링크를 추출하고 본문은 색인을 위한 인덱서로 전달되고 링크는 다시 Frontier로 전달된다. Frontier로 새롭게 입력되는 URL을 방문했던 URL 목록과 비교하여 중복되지 않은 새로운 URL을 방문해야할 URL목록에 추가한다. Frontier의 방문해야할 URL목록이 존재하는 동안 위의 과정을 반복하며 웹 문서를 수집하게 된다.

웹크롤러의 구조는 매우 단순하며 명확하지만, 최적을 성능을 내기위해서 매우 세밀한 작업을 필요로 한다. 가장먼저 방문해야할 URL목록과 방문할 URL목록을 저장할 자료구조를 결정해야 한다. 또한 이들 자료구조는 시간이 지날수록 매우 방대해지기 때문에 메모리상에 모든 데이터를 저장할 수 없으므로, 자료구조의 일부분은 디스크상으로 내리고 일부분만 메모리에 유지하기 위한 테크닉이 필요하다. URL의 효과적인 저장과 중복검사를 위해 URL을 문자열 그대로 저장하기 보다는 64bit 해쉬함수등을 이용해 정수형의 데이터로 변환하기 위한 과정역시 필요하다. Agent에서는 DNS서버를 이용해 도메인명을 IP주소로 변환하는데 웹크롤러 시스템에서 DNS 변환은 상당한 과부하를 초래하기 때문에, 적절한 DNS캐쉬 시스템을 필요로 한다. 이 외에도 웹크롤러 시스템을 최적화 하기 위한 여지는 곳곳에 남아있으며, 웹크롤러 개발자의 노하우에 따라 같은 구조를 지니고도 웹크롤러의 성능이 달라질수 있다.

'프로젝트 > 웹크롤러' 카테고리의 다른 글

웹크롤러 아키텍처  (2) 2013.04.02
웹크롤러(WebCrawler)  (1) 2009.07.28
Posted by devop

댓글을 달아 주세요

  1. 네 ㅎ 알고있지만

    자세한 상세 설명 감사합니다 ㅎ
    더욱더 지식이 넒어지고있어요~

    2013.11.15 19:49 신고 [ ADDR : EDIT/ DEL : REPLY ]