FE/BOOK

[HTTP 완벽가이드] 9장 웹로봇

<zinny/> 2024. 12. 24. 10:38
728x90

웹로봇
사람과의 상호작용 없이 연속된 웹 트랜잭션을 자동으로 수행하는 소프트웨어 프로그램이다.
각 방식에 따라 크롤러, 스파이더, 윌, 봇 등 다양한 이름으로 불린다.

 

크롤러 & 크롤링

웹 페이지 한개를 가져오고, 그 페이지가 가르키는 모든 웹 페이지를 가져오는 일을 재귀적으로 반복하는 방식으로 웹을 순화하는 로봇이다.

 

크롤러가 방문을 시작하는 URL들의 초기 집합은 루트집합(root set)이라 불린다.

루트 집합을 고를때는 모든 링크를 크롤링 가능하도록 골라야 한다. (결과적으로 웹페이지들의 대부분을 가지고 올 수 있도록)

대부분을 커버하기 위해 루트집합에 너무 많은 페이지가 있을 필요가 없다.

 

크롤러는 검색한 각 페이지 안에 들어있는 URL링크들을 파싱해서 크롤링할 페이지들의 목록에 추가한다.

크롤링을 할때 순환 || 루프에 빠지지 않도록 조심해야 한다.

 

순환에 빠지게 되는 이유

  1. 별칭과 로봇 순환 : URL이 별칭을 가지게 되는 순간 이전 페이지에 대한 처리가 쉽지 않아진다.
  2. 파일 시스템 링크 순환 : 파일시스템의 심벌릭 링크는 끝없이 깊어지는 디렉터리 계층을 만들어낸다. 관리자의 실수로 만들게 되지만, 악용의 여지가 있다.
  3. 동적 가상 웹 공간: 의도적으로 같은 서버에 있는 가상의 URL에 대한 링크를 포함한 HTML을 즉석으로 만들어내, 파일을 하나도 가지고 있지 않는 가상 공간으로 가게 될 수 있다

순환에 빠지지 않기 위해 하는 작업

(1) 방문 리스트 관리하기

웹 크롤러가 방문 리스트를 관리하기 위해 사용하는 기법은 4가지가 있다.

  1. 트리와 해시 테이블
  2. 느스한 존재 비트맵 : 비트배열과 같은 느슨한 자료 구조를 사용한다. URL은 해시 함수에 의해 고정된 크기의 숫자로 변경되고, 배열안에 대응되는 존재비트를 갖는다.
  3. 체크포인트
  4. 파티셔닝 : 웹이 성장하면서, 하나의 로봇이 크롤링을 하지 않고, 각 역할에 맞춰 클롤링을 한다.

(2) URL정규화

올바른 자료 구조를 갖추더라도,URL이 별칭을 가진다면 이전 방문 URL을 찾는게 쉽지 않을 수 있다.

웹 로봇은 URL을 정규화시켜 처리 하려고 노력한다.

 

대표적인 정규화 방식

  1. 포트 번호가 명시되지 않으면, 호스트 명에 :80을 추가한다.
  2. 모든 %xx 이스케이핑된 문자들은 대응되는 문자로 변환한다.
  3. # 태그를 제거한다.

(3) 너비우선

(4) 스로틀링

웹사이트에서 일정시간동안 가져올 수 있는 페이지의 수를 제한한다.

(5) URL크기제한

보통 1KB를 넘는 URL의 크롤링을 거부할 수있다. 순환으로 인해 URL이 길어진다면 길의 제한으로 순환이 중단된다.

(6) URL/사이트 블랙리스트

로봇의 순환을 만들어내거나, 함정으로 알려진 사이트의 URL목록을 만들어 관리한다. 

(7) 패턴 발견

심벌릭 링크를 통한 순환 또는 비슷한 오설정들은 특정 패턴을 가지는 경향이 있다.

몇몇 로봇은 주기 패턴의 반복을 발견해 순환을 발견하고 중단한다.

(8) 콘텐츠 지문

페이지의 콘텐츠에서 몇바이드를 얻어내 체크섬(페이지 내용의 간략한 표현)을 계산한다.

만약 이전 페이지 체크섬을 가져온다면, 그 페이지는 크롤링 하지 않는다.

체크섬 함수는 두 페이지가 서로 다름에도 체크섬은 똑같을 확률이 적은 적을 사용해야 한다.

(9) 사람의 모니터링

 

아수라발발타 로봇들

제멋대로인 로봇들로 인해 아수라장이 되는 경우가 있다.

  1. 폭주하는 로봇 : 고사양의 네트워크 연결을 갖춘 로봇이 논리적인 에러를 가지고 있거나, 순환에 빠지게되면 웹 서버에 부하를 가져올 것이다.
  2. 오래된 URL || 길고 잘못된 URL : 불필요한 요청을 야기
  3. 호기심이 지나친 로봇: 데이터의 소유자가 크롤링을 원치 않는 사이트를 크롤링 하는 경우
  4. 동적 게이트웨이 접근: 동적 게이트웨이 어플리케이션의 콘텐츠의 경우 특수 목적을 위해 처리되기 때문에, 처리 비용이 많이 들 여지가 있다.

로봇을 차단하는 방법

로봇 동작을 제어하는 매커니즘을 제공하는 기법에 대한 표준 robots exclusion standard 이름을 따서 robots.txt로 사용된다.

이 파일에는 어떤 로봇에 대한 접근을 허용하는지, 어떤 부분에 접근 할 수있는지 정보가 있다.

로봇은 리소스에 접근하기전 GET 요청으로 robots.txt를 가져온다.

서버가 404 not found http 상태코드로 응답 한다면, 로봇의 접근을 제안하지 않는 것이다.

로봇은 사이트의 관리자가 로봇의 접근을 추적 할 수있도록 form || user-agent 헤더를 통해 신원 정보를 남겨야 한다.

 

robots.txt의 응답 코드

1. 2xx : 로봇은 사이트의 차단 규칙을 따라야 한다.

2. 404 : 활성화된 차단 규칙은 존재하지 않는다고 인지, 제약없이 사용한다.

3. 401 || 403 : 사이트의 접근이 완전이 제한된다.

4. 503 : 사이트 검색을 뒤로 미룬다.

5. 3xx : 리소스가 발견 될 때까지 리다이렉트를 따라간다.

 

robots.txt의 캐싱과 만료

로봇은 http응답의 cache-control & expires 헤더를 보며, 매 요청마다 robots.txt를 응답하지 않도록 해야한다.

robots.txt 파일로의 관리는 콘텐츠 작성자가 아니라 웹 사이트 관리자가 소유한다는 것이다.

html 페이지는 meta 태그를 통해서 로봇에 대한 관리가 가능하다.

 

웹로봇 에티켓

웹로봇을 만드는 사람을 위한 마틴코스터가 만든 가이드라인이 존재한다. '로봇 제작자를 위한 가이드라인'

 

검색엔진

오늘날의 검색엔진은 그들이 가지고있는 웹페이지에 대해 풀 텍스트 색인(full text indexes)라는 로컬 데이터베이스를 생성한다.

사용자들은 웹검색 게이트웨이를 통해 풀 텍스트 색인에 대한 질의를 보낸다.

크롤링을 하는 시간에 비해 페이지는 매 순간 변화하기 때문에 풀텍스트색인은 스냅샷에 불과하다.

 

풀 텍스트 색인은 단어 하나를 입력받아 단어를 포함한 문서를 즉각 알려줄 수있는 데이터베이스이다.

 

검색결과는 관련도 랭킹에 따라 결과의 목록에 점수를 메기고 정렬하는 과정을 거친다.

자신이 만든 사이트가 상위에 노출되길 원해서 스푸핑(실제 결과에 맞지 않더라도 정보를 넣어서 속이는 방식)을 하게되는데,

검색엔진은 이런 속임수를 잡아내기 위해 노력하고 있다.

728x90