[9장] 웹 로봇

DAYEON·2021년 9월 12일
0

HTTP 완벽 가이드

목록 보기
4/8
post-thumbnail

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


9.1 크롤러와 크롤링

  • 웹 크롤러 (스파이더)
    • 크롤링을 반복하는 방식으로 웹을 순회하는 로봇
    • 웹 페이지 한 개를 가져옴 → 그 페이지가 가리키는 모든 웹페이지를 가져옴 → 다시 그 페이지들이 가리키는 모든 웹 페이지를 가져옴

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

  • 루트 집합(root set)
    • 크롤러가 방문을 시작하는 URL들의 초기 집합
    • 일반적으로 좋은 루트 집합은 크고 인기 있는 웹 사이트, 새로 생성된 페이지들의 목록, 자주 링크되지 않은 잘 알려져있지 않은 페이지들의 목록으로 구성

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

  • 크롤러는 웹을 돌아다니면서 꾸준히 HTML 문서를 검색
  • 검색한 각 페이지 안에 들어있는 URL 링크들을 파싱하여 크롤링할 페이지들의 목록에 추가 (새 링크 발견에 따라 급속한 목록 확장)
  • 해결책 → 간단한 HTML 파싱으로 링크를 추출하여 절대 링크로 변환

9.1.3 순환 피하기

  • 로봇들은 순환을 피하기 위해 반드시 그들이 어디를 방문했는지 알아야 함

9.1.4 루프와 중복

  • 순환이 크롤러에게 해로운 3가지 이유
  1. 크롤러를 루프에 빠뜨려 꼼짝 못하게 함
  2. 웹 서버에 부담이 됨
  3. 크롤러의 애플리케이션에 쓸모없는 중복된 콘텐츠가 넘침

9.1.5 빵 부스러기의 흔적

  • URL들은 굉장히 많기 때문에, 어떤 URL을 방문했는지 빠르게 판단하기 위해서는 속도와 메모리 사용 면에서 효과적인 자료 구조를 사용할 필요가 있음
  • 웹 크롤러가 방문한 곳 관리를 위한 유용한 기법
    • 트리와 해시 테이블
      : URL을 빨리 찾아볼 수 있게 해주는 소프트웨어 자료 구조
    • 느슨한 존재 비트맵
      : 공간 사용 최소화를 위한, 존재 비트 여부에 따른 크롤링 유무 판단
    • 체크포인트
      : 로봇 프로그램의 갑작스런 중단에 대비한 URL 방문 목록 저장을 확인
    • 파티셔닝
      : 농장을 이용한 커뮤니케이션이 가능한 개별 로봇들의 사용

9.1.7 URL 정규화

  • URL 형식 변환 방식
    1. 포트 번호가 명시되지 않았을 경우, 호스트 명에 :80 추가
    2. 모든 %xx 이스케이핑된 문자들을 대응되는 문자로 변환
    3. # 태그 제거

9.1.8 파일 시스템 링크 순환

  • 파일 시스템의 심벌릭 링크는 의미 없는 디렉터리 층을 반복해서 만들어낼 수 있음
  • 루프 발견이 중요

9.1.9 동적 가상 웹 공간

  • 악의적인 웹 마스터들의 복잡한 크롤러 루프 생성은 있을 수 있는 일
  • URL과 HTML은 매번 전혀 달라보여 로봇이 감지하기 매우 어려움

9.1.10 루프와 중복 피하기

  • 잘 설계된 로봇은 순환을 피하기 위해 휴리스틱의 집합을 필요로 함
  • 약간의 손실을 유발할 가능성 있음
  • 의심스러워 보이지만 유효한 콘텐츠를 걸러버릴 수 있는 일 발생
  • 더 올바르게 동작하기 위해 사용되는 기법
    • URL 정규화
      : URL을 표준 형태로 변환
    • 너비 우선 크롤링
      : 깊이 우선이 아닌 너비 우선 크롤링으로 여전히 다른 웹 사이트에서 수십개의 페이지들을 받아올 수 있는 것
    • 스로틀링
      : 일정 시간동안 가져올 수 있는 페이지 숫자를 제한
    • URL 크기 제한
      : 일정 길이를 넘는 URL의 크롤링을 거부
    • URL/사이트 블랙리스트
      : 함정인 것으로 알려진 사이트와 URL 목록을 만들어 거부하고 피함
    • 패턴 발견
      : 둘, 셋 이상의 반복된 구성용소를 갖고 있는 URL 크롤링을 거절
    • 콘텐츠 지문
      : 페이지의 콘텐츠에서 몇 바이트를 얻어내어 체크섬을 계산, 이전에 확인한 체크섬을 가진 페이지라면 크롤링 거부
    • 사람의 모니터링
      : 사람이 쉽게 로봇의 진행 상황을 모니터링하여 즉각 인지할 수 있게끔 진단과 로깅을 포함하도록 설계하여 확인

9.2 로봇의 HTTP

  • 로봇 역시 HTTP 명세의 규칙을 지켜야 함
  • 적절한 HTTP 요청 헤더를 사용해야 함

9.2.1 요청 헤더 식별하기

  • 로봇의 능력, 신원, 출신을 알려주는 기본적인 몇 헤더들을 사이트에게 보내주는 것이 좋음
  • 권장되는 기본 신원 식별 헤더
    • User-Agent
      : 서버에게 요청을 만든 로봇의 이름
    • From
      : 로봇의 사용자/관리자의 이메일 주소 제공
    • Accept
      : 서버에게 어떤 미디어 타입을 보내도 되는지 말해줌
    • Referer
      : 현재 요청 URL을 포함한 문서의 URL을 제공

9.2.2 가상 호스팅

  • Host 헤더를 지원할 필요가 있음
  • 로봇들이 올바른 콘텐츠를 찾게 만들기 위함

9.2.3 조건부 요청

  • 로봇이 검색하는 콘텐츠의 양을 최소화하는 것은 의미 있는 일
  • ex) 인터넷 검색엔진 로봇
    • 오직 변경되었을 때만 콘텐츠 가져오기
    • 엔터티 태그를 비교함으로, 그들이 받아간 마지막 버전 이후, 업테이트 된 것이 있는지 알아보는 조건부 HTTP 요청 구현

9.2.4 응답 다루기

  • 웹 탐색, 서버와의 상호작용을 더 잘해보려는 로봇들은 여러 종류의 HTTP 응답을 다룰 줄 알 필요가 있음
    • 상태 코드
      : 200, 404와 같은 HTTP 상태 코드에 해단 이해
    • 엔터티
      : HTTP 헤더에 임베딩된 정보를 따라 찾을 수 있으며, 유용한 정보들이 들어 있음

9.2.5 User-Agent 타기팅

  • 그들의 여러 기능을 지원할 수 있도록 브라우저의 종류를 감지하여 그에 맞게 콘텐츠를 최적화 함

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

  • 로봇들의 실수, 결과 몇가지
    • 폭주하는 로봇
      : 극심한 부하를 안겨줌 → 폭주 보호 장치에 신경 써 설계하는 것으로 해결
    • 오래된 URL
      : 웹 사이트가 콘텐츠를 많이 바꿨을 경우 불필요한 요청을 많이 보냄, 웹 서버의 요청에 대한 수용 능력이 감소됨
    • 길고 잘못된 URL
      : 웹 서버의 처리 능력에 영향을 주고, 고장을 일으킬 위험도 있음
    • 호기심이 지나친 로봇
      : 최악의 경우엔 사생활 침해, 민감한 데이터 포함 경우 → 해당 콘텐츠를 무시하는 메커니즘
    • 동적 게이트웨이 접근
      : 처리 비용이 많이 듦

9.4 로봇 차단하기

  • robots.txt라는 선택적 파일 제공
  • 해당 파일은 어떤 로봇이 서버에 어떤 부분에 접근할 수 있는지에 대한 정보
  • 이 자발적인 표준에 따른다면, 리소스 접근 전 그 사이트의 robots.txt를 요청
  • 이 과정을 통해 로봇을 차단

9.4.1 로봇 찿단 표준

  • 임시방편으로 마련된 표준
  • 불완전하지만 없는 것보다는 훨씬 낫고, 주류 업체, 검색엔진 크롤러들은 이 차단 표준 지원

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

  • robots.txt 가져오기
    • HTTP GET 메서드를 이용해 robots.txt 리소스 가져옴
    • 로봇은 사이트 관리자가 접근을 추적할 수 있도록 From이나 User-Agent 헤더를 통해 신원 넘김
  • 응답 코드
    • 로봇은 robots.txt를 많은 웹사이트가 가지고 있지 않다는 것을 모름
    • 로봇은 robots.txt 검색 결과에 따라 다르게 동작함
      • 성공 응답 시 차단 규칙을 얻어 그 규칙을 따름
      • 리소스가 존재하지 않다는 응답을 얻을 시 제약 없이 사이트에 접근
      • 접근 제한으로 응답 얻을 시 접근은 완전히 제한되어 있다고 가정
      • 요청 시도의 일시적인 실패일 경우 검색을 뒤로 미룸
      • 리다이렉션을 의미하는 응답일 경우 리소스가 발견될 때까지 리다이렉션 따라감

9.4.3 robots.txt 파일 포맷

  • robots.txt 파일은 매우 단순한 줄 기반 문법을 가짐
  • 줄들은 레코드로 구분
  • 줄 종류
    • User-Agent 줄
      : User-Agent: <robot-name>, 줄을 찾지 못했다면 접근 제한 없음
    • Disallow와 Allow 줄들
      : User-Agent 줄들 바로 다음에 옴, 어떤 URL 경로가 명시적으로 허용, 금지 되어있는지 기술

9.4.5 robots.txt의 캐싱과 만료

  • 매 파일 접근마다 robots.txt 파일을 새로 가져오면 효율성 떨어짐, 웹 서버 부하도 두 배
  • → robots.txt의 캐시된 사본은 robots.txt가 만료될 때까지 로봇에 의해 사용

9.4.6 로봇 차단 펄 코드

  • robots.txt 파일과 상호작용하는 공개된 펄 라이브러리
  • RobotRules 객체 만들기
    : $rules = WWW::RobotRules->new($robot_name);
  • robots.txt 파일 로드하기
    : $rules->parse($url,$content,$fresh_until);
  • 사이트 URL을 가져올 수 있는지 검사
    : $can_fetch = $rules->allowed($url);

9.4.7 HTML 로봇 제어 META 태그

  • robots.txt 파일을 사이트 관리자가 로봇들을 웹 사이트 일부, 전체에 접근할 수 없게 함
  • 로봇 차단 태그 형식
    • 로봇 META 지시자
      • NOINDEX
        : 해당 페이지를 처리하지 말고 무시하라
      • NOFOLLOW
        : 해당 페이지가 링크한 페이지를 크롤링하지 마라
      • INDEX
        : 해당 페이지의 콘텐츠를 인덱싱해도 됨
      • NOARCHIVE
        : 해당 페이지를 위한 로컬 사본 생성은 안됨
      • ALL
        : = INDEX, FOLLOW
      • NONE
        : = NOINDEX, NOFOLLOW
    • 검색엔진 META 태그

9.5 로봇 에티켓


9.6 검색엔진

  • 웹 로봇을 가장 광범위하게 사용하는 것은 검색엔진
  • 먹이 주듯 문서들을 가져다 주어, 검색엔진이 어떤 문서에 어떤 단어들이 존재하는지에 대한 색인을 생성할 수 있게 함

9.6.1 넓게 생각하라

  • 대규모 크롤러가 자신의 작업을 완료하려면 많은 장비들을 똑똑하게 사용하여 요청을 병렬로 수행할 수 있어야 할 것
  • 그러나, 그 규모로 인해 웹 전체 크롤링은 쉽지 않은 도전

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

  • 오늘날 검색엔진, 전 세계 웹페이지들에 대한 풀 텍스트 색인이라고 하는 복잡한 로컬 데이터베이스 생성
  • 웹의 모든 웹 문서에 대한 일종의 카드 카탈로그처럼 동작
  • 과정
    : 크롤러들이 웹 페이지들을 수집하여 집으로 가져옴 → 풀 텍스트 색인에 추가 + 웹 검색 게이트웨이를 통해 질의 보냄

9.6.3 풀 텍스트 색인

  • 단어 하나를 입력받아 그 단어를 포함하고 있는 문서를 즉각 알려줄 수 있는 데이터베이스
  • 해당 문서들은 색인 생성 후, 검색할 필요가 없음
  • 풀 텍스트 색인은 각 단어를 포함한 문서를 열거
    • 단어 'a'는 문서 A와 B에 들어 있음
    • 단어 'best'는 문서 A와 C에 들어 있음
    • 단어 the는 세 문서 A,B,C에 들어 있음

9.6.4 질의 모내기

  • 사용자가 질의를 웹 검색엔진 게이트웨이로 보내는 방법, 이후
    • HTML 폼을 사용자가 채워 넣고 브라우저가 그 폼을 HTTP GET, POST 요청을 통해 게이트웨이에 보내는 식
    • 게이트웨이 프로그램은 검색 질의를 추출하고 웹 UI 풀 텍스트 색인을 검색할 때 사용되는 표현식으로 변환
    • 게이트웨이는 웹 서버에게 문서의 목록을 결과로 알려줌
    • 웹 서버는 결과를 사용자를 위한 HTML 페이지로 변환

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

  • 검색엔진이 색인을 한번 사용했다면, 게이트웨이 애플리케이션은 그 결과를 이용해 결과 페이지를 즉석으로 생성 가능
  • 검색엔진은 결과에 순위를 매기기 위한 똑똑한 알고리즘 사용
  • 주어진 단어와 관련이 많은 순서대로 결과 문서에 나타낼 수 있도록 관련도 랭킹

9.6.6 스푸핑

  • 웹 사이트를 찾을 때 검색 결과의 순서는 중요
  • 속임수를 잡아내기 위한 끊임없는 관련도 알고리즘 수정이 필요

profile
노력하는 초보 개발자

0개의 댓글