책정리/HTTP 완벽 가이드

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

뽀글보리 2025. 1. 5. 14:44
반응형

웹 로봇은 사람과의 상호작용 없이 연속된 웹 트랜잭션들을 자동으로 수행하는 소프트웨어 프로그램

9.1 크롤러와 크롤링

웹 크롤러 웹페이지를 한 개 가져오고, 다음 그 페이지가 가리키는 모든 웹페이지를 가져오는 것을 재귀적으로 반복하는 방식으로 웹을 순회하는 로봇

9.1.1 어디에서 시작하는가: 루트 집합

 

루트집합: 크롤러가 방문을 시작하는 URL들의 초기 집합

=> 충분히 다른 장소에서 URL을 선택하여 루트 집합을 만들어야 한다.

 

좋은 루트 집합이란?
=> 크고 인기 있는 웹사이트, 새로 생성된 페이지들의 목록, 자주 링크되지 않는 잘 알려져 있지 않은 페이지들의 목록을 구성

9.1.2 링크 추출과 상대 링크 정상화

크롤러가 크롤링을 진행하면서 새 링크를 발견함에 따라 목록이 급속히 확장된다.

9.1.3 순환 피하기

루프나 순환에 빠지지 않기 위해서 어디를 방문했는지 알아야 한다.

순환은 로봇을 함정에 빠뜨려서 멈추게 하거나 진행을 느려지게 한다.

9.1.4 루프와 중복

  • 빙빙 돌게 만들어서 시간을 허비하거나 네트워크 대역폭을 다 차지하고 어떤 페이지도 가져올 수 없게 되어버릴 수 있다.
  • 크롤러가 같은 페이지를 반복해서 가져오면 이것은 웹 서버의 부담이 된다. 크롤러의 네트워크 접근 속도가 빠르다면 웹 사이트를 압박하여 실제 사용자도 사이트에 접근 불가하도록 막아버릴 수 있다.
  • 많은 중복 페이지를 가져오게 되면 쓸모없는 중복 콘텐츠로 넘쳐난다.

9.1.5 빵 부스러기의 흔적

어떤 URL을 방문했는지 계속 추적하는 작업이 필요하다

 

  • 트리: 크롤링한 페이지들을 노드로, 링크 관계를 간선으로 표현하여 계층적인 구조를 나타냅니다.
  • 해시 테이블: 방문한 URL을 키로, 방문 시간 등의 정보를 값으로 저장하여 빠르게 중복 여부를 확인합니다.
  • 느슨한 존재 비트맵: 방대한 URL 공간을 비트 배열로 표현하여 메모리 효율적으로 방문 여부를 관리합니다.

 

9.1.6 별칭과 로봇 순환

  첫 번째 URL 두 번째 URL 어떤 경우에 같은 URL을 가리키게 되는가
a http://www.foo.com/bar.html http://www.foo.com:80/bar.html 기본 포트가 80일 때
b http://www.foo.com/~fred http://www.foo.com/%7Ffred %7F와 ~가 같을 때
c http://www.foo.com/x.html#early http://www.foo.com/x.html#middle 태그에 따라 페이지가 바뀌지 않을 때
d http://www.foo.com/readme.html http://www.foo.com/README.HTML 서버가 대소문자를 구별하지 않을 때
e http://www.foo.com/ http://www.foo.com/index.html  기본 페이지가 index.html일 때
f http://www.foo.com/index.html http://209.231.87.45/index.html www.foo.com이 이 아이피 주소를 가질 때

 

서로 달라보이는 URL도 사실 같은 리소스를 가리킬 수 있다

9.1.7 URL 정규화하기

모든 url 을 정규화된 형식으로 변환하여 확실한 것들을 미리 제거하려 시도한다

  • 포트 번호 명시
  • 이스케이핑된 문자들을 대응되는 문자로 변환
  • #태그를 제거

위 방법을 통해서 a,b,c의 경우는 대비할 수 있지만 d-f같은 문제들을 제거하기 위해서는 해당 웹 서버에 대한 지식을 갖고 있어야 한다.

9.1.8 파일 시스템 링크 순환

심벌릭 링크를 사용하여 로봇을 함정에 빠트리기 위한 교묘한 순환을 만들 수 있다

9.1.9 동적 가상 웹 공간

악의적으로 가짜 콘텐츠를 만들어내는 악의적인 웹 서버

나쁜 뜻이 없음에도 자신도 모르게 심벌릭 링크나 동적 콘텐츠를 통한 크롤러 함정을 만들 수도 있다

예시) 다음달로 계속 이동 가능한 캘린더 형식이 존재하는 웹 페이지

9.1.10 루프와 중복 피하기

  • URL 정규화
  • 너비 우선 크롤링
  • 스로틀링: 웹 사이트에서 일정 시간 동안 가져올 수 있는 페이지의 숫자를 제한
  • URL 크기 제한: 순환으로 계속해서 길어지는 URL이라면 순환 중단
  • URL/사이트 블랙리스트
  • 패턴 발견: 반복되는 구성 요소를 순환으로 보고 크롤링 거절
  • 콘텐츠 지문: 페이지 콘텐츠에서 체크섬을 계산
  • 사람의 모니터링

9.2 로봇의 HTTP

로봇은 http를 최소한으로만 구현하려고 하기 위해 1.0 요청을 보낸다.

9.2.1 요청 헤더 식별하기

로봇의 능력, 신원, 출신을 알려주는 기본적인 헤더를 보내준다.

헤더 이름 설명
User-Agent 로봇의 종류, 버전 등을 나타냄
From 로봇 운영자의 연락처 정보 (이메일 주소 제공)
Accept 수용할 수 있는 콘텐츠 형식
Referer 현재 페이지를 요청하게 된 이전 페이지의 URL

9.2.2 가상 호스팅

가상 호스팅이 널리 퍼져있는 현실에서 Host 헤더를 포함하지 않으면 url에 대해 잘못된 콘텐츠를 찾게 만든다.

9.2.3 조건부 요청

로봇이 검색하는 콘텐츠의 양을 최소화하기 위해서 받아간 마지막 버전 이후에 업데이트 된 것이 있는지 알아보는 조건부 http 요청을 구현한다.

9.2.4 응답 다루기

웹 탐색이나 서버와의 상호작용을 더 잘 해보려고 하는 로봇들은 여러 종류의 http 응답을 다룰 줄 알 필요가 있다.

  • 상태 코드: 200, 404같은 상태 코드를 이해하기
  • 엔터티: HTTP 헤더에 임베딩된 정보를 따라 엔터티 자체의 정보를 찾는다. 메타 http-equiv 태그

9.2.5 User-Agent 타기팅

웹 관리자들은 로봇의 요청을 예상하여 그에 맞게 콘텐츠를 최적화해야 한다.

9.3 부적절하게 동작하는 로봇들

  • 폭주하는 로봇: 웹 서핑을 하는 사람보다 훨씬 빠르게 HTTP 요청을 만들어 서버에 과부하를 유발하고, 다른 누구도 서비스를 못하게 만든다.
  • 오래된 URL: 존재하지 않는 URL에 요청을 많이 보내 에러 페이지 부하를 일으킬 수 있다.
  • 길고 잘못된 URL: 순환, 프로그래밍 오류로 크고 의미없는 URL을 요청할 수 있다. 만약 너무 길다면 웹 서버의 처리 능력에 영향을 줄 수 있다.
  • 호기심이 지나친 로봇: 사적인 데이터를 얻으며 사생활 침해라고 여길 수 있다.
  • 동적 게이트웨이 접근: 게이트웨이 애플리케이션의 콘텐츠에 대한 URL로 요청을 할 경우, 특수 목적을 위한 것이라 처리 비용이 많이 든다.

9.4 로봇 차단하기

로봇의 접근을 제어하는 정보를 저장하는 파일: robots.txt

서버의 문서 루트에서 해당 파일을 제공하면, 어떤 부분에 접근할 수 있는지에 대한 정보가 담겨있다.

9.4.1 로봇 차단 표준

버전 2.0은 널리 지원되지 않는다.

9.4.2 웹 사이트와 robots.txt 파일들

robots.txt 가져오기

robots.txt가 존재하지 않는다면 로봇의 접근을 제한하지 않는 것으로 간주하고 어떤 파일이든 요청한다.

로봇은 From, User-Agent 헤더를 통해 신원 정보 및 연락처를 제공해야 한다.

 

응답코드

  • robots.txt 응답이 성공하면 해당 차단 규칙을 따른다.
  • 404라면 규칙이 없다고 가정하고 제약없이 사이트에 접근한다.
  • 401, 403 응답을 한다면 완전히 제한되어 있다고 가정한다.
  • 503 이라면 리소스 검색을 뒤로 미룬다.
  • 리다이렉션 된다면 리소스가 발견될 떄까지 리다이렉트를 따라가야 한다.

9.4.3 robots.txt 파일 포맷

각 레코드는 로봇별로 각각 다른 차단 규칙 적용 가능

User-Agent에 매칭되는 것에 따른 Disallow, Allow 접두 매칭

 

User-agent: *
Disallow: /admin/
Disallow: /cgi-bin/
Allow: /images/

설명: 모든 로봇(/)에 대해 /admin/ 디렉토리와 /cgi-bin/ 디렉토리 접근을 금지하고, /images/ 디렉토리 접근은 허용합니다.

9.4.4 그 외에 알아둘 점

- 로봇이 이해하지 못하는 필드는 무시한다.

- 주석은 #로 작성할 수 있다.

- 버전 0.0의 경우에는, Allow 줄을 지원하지 않으므로 보수적으로 동작하여 허용되는 URL도 탐색하지 않을 수 있다.

9.4.5 robots.txt의 캐싱과 만료

robots.txt 파일의 캐싱을 제어하기 위해 표준 HTTP 캐시 제어 메커니즘이 원 서버와 로봇 양쪽 모두에 의해 사용된다.

9.4.6 로봇 차단 펄 코드

9.4.7 HTML 로봇 제어 META 태그

 

robots.txt파일의 단점 콘텐츠의 작성자 개개인이 아닌 웹 사이트 관리자가 소유한다

콘텐츠별로 로봇 제어를 하기 위해서는 로봇 차단 HTML 태그를 직접 추가하여 로봇이 문서를 무시하도록 할 수 있다.

<META NAME="ROBOTS" CONTENT="NOFOLLOW">
  • NOINDEX:이 페이지를 처리하지 말고 무시하라
  • NOFOLLOW: 이 페이지가 링크한 페이지를 크롤링하지 마라
  • INDEX: 인덱싱해도 된다
  • FOLLOW: 링크 페이지를 크롤링해도 된다
  • NOARCHIVE: 캐시를 위한 로컬 사본을 만들지 마라
  • ALL: INDEX, FOLLOW
  • NONE: NOINDEX, NOFOLLOW

9.5 로봇 에티켓

  • 로봇의 신원을 밝혀라, 연락처를 빍혀라
  • 로봇이 충분히 노련해지기 전까지는 365일 긴장하여 로봇을 감시할 피룡가 있다.
  • 로봇 진행상황을 추적하고 검사가 가능하도록 진단과 로깅 기능을 풍부하게 갖추어야 한다. 항의가 들어와서 디버깅할 때를 위하여.
  • 크롤링을 할 때마다 새로운 것을 배우게 된다. 매번 로봇을 조정하고 개선하여 함정에 빠지는 것을 피하라.
  • 관심없는 데이터를 참조하고 있다면 그냥 무시하라
  • 동적인 게이트웨이로부터의 콘텐츠를 크롤링할 필요가 없다.
  • accept 헤더를 이용해서 어떤 콘텐츠를 이해할 수 있는 지 말해주어야 한다.
  • robots.txt를 따라야 한다.
  • 특정 사이트에 너무 자주 방문하지 않도록 해야 한다.
  • http 상태 코드를 다룰 수 있도록 준비되어야 한다.
  • URL을 정규화하여 중복된 URL들을 제거하고자 노력해야 한다.
  • 순환을 감지하고 피하기 위해 노력해라.
  • 악의적인 함정이 아닌지 감시해라.
  • 블랙리스트를 고나리하라.
  • 공간을 이해하기: 웹의 규모는 거대하므로 얼마나 큰 메모리를 요구하게 될 지 미리 계산하라
  • 얼마나 많은 네트워크 대역폭이 사용 가능할 지 이해하라
  • 얼마나 많은 시간이 필요한지 이해하라
  • 로봇을 풀어놓기 전에 철저히 테스트해라
  • 실패가 발생했을 때도 계속 동작할 수 있도록 설계하라

9.6 검색 엔진

웹 크롤러들은 검색엔진에게 어떤 단어들이 존재하는지에 대한 색인을 생성할 수 있게 한다.

9.6.1 넓게 생각하라

검색엔진은 수십억 개의 웹페이지들을 검색하기 위해 복잡한 크롤러를 사용해야 한다. 많은 장비를 똑똑하게 사용해서 요청을 병렬로 수행할 수 있어야 한다.

9.6.2 현대적인 검색엔진의 아키텍처

검색엔진은 전 세계의 웹페이지들에 대한 풀 텍스트 색인 이라고 하는 복잡한 로컬 데이터 베이스를 생성한다. 이 색은 웹의 모든 문서에 대한 카드 카탈로그처럼 동작한다.

9.6.3 풀 텍스트 색인

단어 하나를 입력받아 그 단어를 포함하는 문서를 즉각 알려줄 수 있는 데이터베이스

색인 생성 후에는 검색할 필요가 없다.

9.6.4 질의 보내기

html 폼에 사용자가 get, post 요청을 이용하여 보내면 게이트웨이 프로그램은 검색 질의를 추출하고 full text indexes을 위한 표현식으로 반환한다.

9.6.5 검색 결과를 정렬하고 보여주기

관련도 랭킹: 검색 결과의 목록에 점수를 매기고 정렬하는 과정

크롤링 통계 데이터를 활용하여 이 과정을 지원한다.

예) 어떤 페이지를 가리키는 링크들이 얼마나 많은지를 통해 문서의 인기도 판별

9.6.6 스푸핑

검색 결과에서 더 높은 순위를 차지하고자 수많은 키워드를 나열한 가짜 페이지를 만들거나, 더 알고리즘을 잘 속일 수 있는 게이트웨이 애플리케이션을 만들어 상요한다.

결국 검색엔진과 로봇 구현자들은 이러한 속임수를 더 잘 잡아내기 위해 끊임없이 관련된 알고리즘을 수정해야 한다.

 

 

반응형

'책정리 > HTTP 완벽 가이드' 카테고리의 다른 글

[HTTP 완벽 가이드 10장] HTTP/2.0  (0) 2025.01.12