[1日30分 인생승리의 학습법] 웹크롤러(WebCrawler)

1. 설명
웹의 크기가 폭발적으로 증가함에 따라 인터넷에서 정보를 얻는 수단으로 검색엔진은 존재는 매우 중요한다. 검색엔진은 웹 페이지를 수집하고, 수집된 웹 페이지에 색인을 구성하여, 이를 바탕으로 검색 결과를 사용자에게 전달하는 역활을 한다. 검색엔진의 대표적인 예로 Google, Naver, Yahoo 등이 있다.
 
검색엔진의 근간이 되는 웹크롤러는 인터넷상에 존재하는 웹 문서들을 추적하여 필요한 정보를 수집하는 기술을 말하며 검색시스템, 전자상거래 상품검색, 인트라넷 검색 소프트웨어 등 현재 대부분 인터넷 산업의 근간이 되는 핵심 기술이다.
 
인터넷이 계속적으로 성장함에 따라 웹 문서의 양이 매우 거대해지면서 기존의 단일시스템 환경 기반의 웹크롤러 기술은 한계에 직면하게 되었다. 따라서 고성능의 웹크롤러 시스템을 구현하기 위해 다음과 같은 내용을 고려해야 한다.
 
  • 웹에 대한 최신 정보를 제공하기 위해 다운로드 성능을 높이는 속도문제
  • 한번 다운로드 받은 문서를 다시 다운로드 하지 않게 막도록하는 유일성 문제
  • 과거게 다운로드 받은 문서가 아직도 유효한지, 혹은 변해서 없어졌는지를 알아내는 현행화 문제
  • 크롤러배제 표준과 저작권 문제
 
웹크롤러의 기본적인 요구사항으로 문서 수집 속도가 빠른 웹크롤러가 가장 성능이 우수한 웹크롤러라고 말할 수 있다. 동일한 네트워크 환경 하에게 웹크롤러가 문서 수집을 할 경우 성능을 향상할 수 있는 방법은 웹크롤러 시스템 내의 처리 속도를 최대화시키는 방법뿐이다. 웹크롤러 시스템의 성능을 향상 시키는 방법으로 일반적으로 멀티프로세스(또는 멀티쓰레드)를 사용한다. 하지만 멀티 프로세스로 동작하는 웹크롤러 시스템에서 다수의 프로세스가 동시에 한 개의 웹서버에 문서를 요청하게 된다면 상대 시스템과 네트웍에 과부하를 발생시킬수 있다.(DDoS 공격으로 보일수 있다.) 따라서 웹크롤러는 이러한 상황을 방지하기 위해 동일한 웹 서버에는 일정 시간간격을 두고 접근하도록 통제할 필요가 있다.
 
과부하를 방지하기 위한 도 다른 방법으로 배제규약이 있다. 크롤러배제 규약은 상대 시스템에 계속적인 접근으로 인한 과부하를 주거나, 일시적인 정보, CGI 등의 적당치 않은 부분을 검색하는 것을 막아보고자 제안된 규약으로 robots.txt 파일에 규칙을 정의하게 된다. 모든 웹크롤러는 가장 먼저 웹서버에 존재하는 robots.txt 파일을 읽어와 특정 URL이 주어졌을때 URL을 통과시켜야할지 폐기해야할지 결정할수 있어야 한다.
 
 
2. 구조
웹크롤러란 검색엔진의 구축 등을 위하여 웹페이지를 수집하는 프로그램으로, 제한된 자원 내에서 짧은 시간 동안 최대한 많은 웹 페이지를 수집하는 것이 그 목표이다. 웹크롤러의 기본적인 구조는 다음과 같다.
 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

(출저: 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캐쉬 시스템을 필요로 한다. 이 외에도 웹크롤러 시스템을 최적화 하기 위한 여지는 곳곳에 남아있으며, 웹크롤러 개발자의 노하우에 따라 같은 구조를 지니고도 웹크롤러의 성능이 달라질수 있다.

[출처] https://lyb1495.tistory.com/17

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
1115 [ 一日30分 인생승리의 학습법] 2023 네이버 다이어리 굿노트 템플릿으로 심플하게 새해 계획 file 졸리운_곰 2023.01.07 15
1114 [ 一日30分 인생승리의 학습법] 프로그래밍 스킴 Scheme 1 다운로드부터 문법 대부분을 314초만에 알려줄게요 졸리운_곰 2023.01.05 5
1113 [ 一日30分 인생승리의 학습법] ROBOCOPY(로보카피) 사용법 file 졸리운_곰 2023.01.05 10
1112 [ 一日30分 인생승리의 학습법] PHP, VBA and SQL Useful Scripts PHP, VBA 및 SQL 유용한 스크립트 file 졸리운_곰 2023.01.01 7
1111 [ 一日30分 인생승리의 학습법] KoELECTRA로 기계독해(MRC) API 개발 file 졸리운_곰 2023.01.01 7
1110 [ 一日30分 인생승리의 학습법] 일 안 해도 생기는 수입? 그런 ‘패시브 인컴’은 없다 file 졸리운_곰 2023.01.01 6
1109 [ 一日30分 인생승리의 학습법] Qemu를 이용한 가상화 기초 file 졸리운_곰 2022.12.31 5
1108 [ 一日30分 인생승리의 학습법] 파이토치로 딥러닝해야 하는 5가지 이유 졸리운_곰 2022.12.31 6
1107 [ 一日30分 인생승리의 학습법] 왜 ‘한국어’의 자연어처리(NLP)는 유독 어려울까? file 졸리운_곰 2022.12.31 10
1106 [ 一日30分 인생승리의 학습법] MinIO Windows Service 등록 졸리운_곰 2022.12.24 7
1105 [ 一日30分 인생승리의 학습법] Apache 2.2에서 2.4로 마이그레이션 시 발생하는 에러 및 해결책 정리 졸리운_곰 2022.12.18 6
1104 [ 一日30分 인생승리의 학습법] Git 사용 방법 정리(commit, push, pull request, merge 등) 졸리운_곰 2022.12.04 18
1103 [ 一日30分 인생승리의 학습법] [웹 기획] 화면 설계 용어 - 와이어프레임, 스토리보드, 프로토타입의 차이점 file 졸리운_곰 2022.12.03 6
1102 [ 一日30分 인생승리의 학습법] REST API 설계 (네이밍) 졸리운_곰 2022.11.26 24
1101 [ 一日30分 인생승리의 학습법] REST API URI 규칙 졸리운_곰 2022.11.26 12
1100 [ 一日30分 인생승리의 학습법 ] REST API URL 규칙 졸리운_곰 2022.11.26 9
1099 [ 一日30分 인생승리의 학습법 ] prolog 문법 : Prolog Syntax 졸리운_곰 2022.11.21 3
1098 [ 一日30分 인생승리의 학습법 ] noVNC 작동원리 file 졸리운_곰 2022.11.16 8
1097 [ 一日30分 인생승리의 학습법 ] 프로젝트 만들고 GitHub에 첫 Commit하고 Push하기 file 졸리운_곰 2022.11.15 4
1096 [ 一日30分 인생승리의 학습법 ] 우분투(리눅스) 에서 EBS 라디오 자동녹음 만들기 졸리운_곰 2022.11.11 9
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED