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

Milk717·2022년 10월 2일
0

HTTP

목록 보기
6/7

2022년 7월 ~ 2022년 8월 동안 http 완벽 가이드 스터디를 진행하면서 노션에 정리해놨던 내용입니다.

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

9.1 크롤러와 크롤링

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

  • 웹 링크를 재귀적으로 따라가는 로봇 : 크롤러 or 스파이더
    • HTML 하이퍼링크들로 만들어진 웹을 따라 기어다니기 때문

검색엔진은 크롤러를 사용한다. 검색엔진이 크롤링한 문서들이 사용자가 검색 가능한 데이터베이스로 만들어진다.

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

크롤러를 풀어놓기 전에 출발지점을 주어야한다.

  • 루트 집합(root set) - 크롤러가 방문을 시작하는 URL들의 초기 집합

웹의 대부분을 커버하기 위해 루트 집합에 너무 많은 페이지가 있을 필요는 없고, 위의 예시로 봤을 때 루트 집합에는 A, G, S 가 루트 집합에 있기만 하면 모든 페이지에 도달할 수 있다.

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

크롤러는 웹을 돌아다니면서 HTML 문서를 검색하고, 검색한 각 페이지 안에 들어있는 URL링크를 파싱해 크롤링할 페이지들의 목록에 추가해야한다.

9.1.3 순환 피하기

크롤링을 할 때 루프나 순환에 빠지지 않도록 어디 방문했는지 처리를 해야한다.

위의 예시같은 경우에는 A, B, C, A, B, C…. 순환이 생긴다.

9.1.4 루프와 중복

  • 순환은 크롤러를 루프에 빠뜨려서 크롤러가 네트워크 내역폭을 모두 차지하고, 어떤 페이지도 가져올 수 없게 되어버릴 수 있다.
  • 크롤러가 같은 페이지를 반복해서 가져오면 웹 서버에 부담이 된다. 크롤러의 네트워크 접근 속도가 충분히 빠르다면, 웹 사이트를 압박하여 어떤 실제 사용자도 사이트에 접근할 수 없도록 막아버리게 될 수도 있다.
  • 크롤러는 많은 수에 중복된 페이지들을 가져오게 돼서 크롤러의 애플리케이션이 자신을 쓸모없게 만드는 중복된 컨텐츠로 넘쳐나게 될 수도 있다.

9.1.5 빵 부스러기의 흔적

수억개의 URL은 많은 공간을 차지한다. 만약 평균 URL이 40바이트 길이이고, 웹 로봇이 5억개의 URL을 크롤링 했다면, 검색 데이터 구조는 이 URL들을 유지하기 위해 20GB 이상의 메모리를 요구할 것이다.

트리와 해시 테이블

복잡한 로봇이라면 방문한 URL을 추적하기 위해 검색 트리나 해시 테이블을 사용했을 수도 있다.

느슨한 존재 비트맵

공간 사용을 최소하하기 위해, 존재 비트 배열(presence bit array)과 같은 느슨한 자료구조를 사용한다.

  • 각 URL이 해시 함수에 의해 고정된 크기의 숫자로 변환됨.
  • 배열 안에 대응하는 존재 비트를 갖게됨
  • URL이 크롤링 되었을 때, 해당하는 존재 비트가 만들어지고, 존재 비트가 이미 존재한다면, 크롤러는 그 URL을 이미 크롤링되었다고 간주함.

체크포인트

로봇 프로그램 중단에 대비해 방문한 URL목록이 디스크에 저장되었는지 확인함

파티셔닝

한 대의 컴퓨터에서 하나의 로봇이 크롤링을 완수하는 것이 불가능

그래서 대규모 웹들은 각각이 여러 컴퓨터 로봇이 동시에 일하고 있는 농장(fram)을 이용한다. 각 로봇엔 URL들의 특정 한 부분이 할당되어 그에대한 책임을 진다.

9.1.6 별칭(alias)과 로봇 순환

올바른 자료구조에 방문 처리를 하더라도 URL이 별칭을 가질 수 있기 때문에 어떤 페이지를 이전에 방문했는지 알기 쉽지 않을 때도 있다.

같은 문서를 가리키는 다른 URL들

9.1.7 URL 정규화하기

URL을 표준 형식으로 정규화해서 다른 URL과 같은 리소스를 가리키고 있음이 확실한 것들을 미리 제거하려고 시도한다.

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

표 9-1의 d~f같은 문제들을 제거하기 위해서는 웹 서버에대한 지식이 있어야한다.

  • d: 웹 서버가 대소문자를 구분하는지 정보를 알아야함
  • e: 이 디렉터리에 대한 웹 서버의 색인 페이지 설정을 알아야 한다.
  • f: 첫 번째 호스트명과, 두 번째 URL의 IP주소가 같은 물리적 컴퓨터를 참조한다는 것 뿐 아니라, 웹 서버가 가상 호스팅을 하도록 설정되어 있는지도 알아야한다.

9.1.8 파일 시스템 링크 순환

(a)의 경우

  • /index.html 을 가져와서, subdir/index.html 발견함.
  • subdir/index.html 가져와서, subdir/logo.gif로 이어지는 링크 발견
  • subdir/logo.gif을 가져오고 더 이상 링크가 없으므로 완료

(b)의 경우

  • /index.html 을 가져와서, subdir/index.html 발견함.
  • subdir/index.html을 가져왔지만 같은 index.html로 되돌아감
  • subdir/subdir/index.html을 가져온다
  • subdir/subdir/subdir/index.html을 가져오고 무한반복한다.

9.2 로봇의 HTTP

로봇들은 다른 클라이언트 프로그램과 다르지 않음. 웹로봇도 HTTP요청 헤더를 사용해야 한다.

9.2.1 요청 헤더 식별하기

웹로봇은 신원 식별 헤더를 전송한다.

그 이유는? 잘못된 크롤러의 소유자를 찾아낼 때와 서버에게 로봇이 어떤 종류의 콘텐츠를 다룰 수 있는지에 대한 약간의 정보를 줄 때 유용하기 때문

User-Agent

서버에게 요청을 만든 로봇의 이름을 말해준다.

From

로봇은 사용자/관리자의 이메일 주소를 제공한다

Accept

서버에게 어떤 미디어 타입을 보내도 되는지 말해준다.

Referer

현재의 요청 URL을 포함한 문서의 URL을 제공한다.

9.2.2 가상 호스팅

로봇 구현자들은 Host 헤더를 지원할 필요가 있다. 요청에 Host 헤더를 포함하지 않으면 로봇이 어떤 URL에 대해 잘못된 콘텐츠를 찾게 만든다.

두 개의 사이트(www.joes.hardware.com, www.foo.com)를 운영하는 서버에 host헤더를 포함하지 않고 요청을 보냈을 때, 서버가 기본적으로 www.joes.hardware.com 를 제공하도록 설정되어 있다면 www.foo.com페이지에 대한 요청은 www.joes.hardware.com에 대한 콘첸츠를 얻게 되고, 크롤러는 이를 구분할 수 없다.

9.2.3 조건부 요청

캐시 사본이 유효한지 검사할 때 사용하는 조건부 GET을 사용해서 변경되었을 때만 콘텐츠를 가져오도록 하낟.

9.2.4 응답 다루기

상태 코드

로봇은 상태 코드를 다룰 수 있어야 한다. 몇몇 서버는 에러를 기술하는 메세지조차 200 ok로 응답하기도 한다.

9.2.5 User-Agent 타기팅

웹 관리자는 로봇들로부터의 요청을 예상해야 한다. 웹 사이트는 브라우저늬 종류를 감지하여 그에 맞게 콘텐츠를 최적화한다. 웹 로봇이 사이트에 방문했다가 콘텐츠를 얻을 수 없는 일이 없도록 대비해야 한다.

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

폭주하는 로봇

로봇은 웹 서핑을 하는 사람보다 빠르게 HTTP요청을 만들 수 있고, 빠른 네트워크 연결을 갖춘 컴퓨터 위에서 동작한다. 그러기 때문에 로봇이 논리적인 에러를 갖고 있거나 순환에 빠졌다면 웹 서버에 극심한 부하를 안겨줄 수 있다. 그래서 로봇 저자들은 폭주 방지를 위한 보호 장치를 반드시 신경써야한다.

오래된 URL

로봇은 url의 목록을 방문하는데 이 목록이 오래돼어 콘텐츠가 바뀌었다면 로봇은 존재하지 않는 url에 대한 요청을 많이 보낼 수 있다.

길고 잘못된 url

순환이나 프로그래밍상 오류로 로봇은 웹 사이트에게 크고 의미없는 url을 요청할 수 있다. 만약 url이 충분히 길다면 웹 서버의 처리능력에 영향을 주고, 로그를 어지럽히고 장애를 발생시킬 수 있다.

호기심이 지나친 로봇

사적인 데이터에 대한 url을 얻어 그 데이터를 인터넷 검색엔진이나 기타 애플리케이션을 통해 쉽게 접근할 수 있도록 만들 수도 있음.

하이퍼링크가 존재하지도 않는 문서들을 리덱터리의 콘텐츠를 가져오는 방법 등으로 긁어올 때 일어날 수 있음.

9.4 로봇 차단하기

로봇이 웹 서버에 요청할 때 페이지를 가져올 수 있는 권한이 있는지 확인하기 위해 robot.txt파일을 가져와서 확인한다.

9.4.1 로봇 차단 표준

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

  • HTTP GET 메서드를 이용해 robot.txt 리소스를 가져온다.
  • robot.txt 파일이 있는 경우(200 ok) 그 제약조건에 따라서 로봇이 동작하고, 없는 경우(http 404 nost found)제약 없이 사이트에 접근한다.
  • 401또는 403응답한다면 로봇은 그 사이트로부터 접근이 완전히 제한되어있다고 가정해야한다.
  • 서버 응답이 3xx 리다이렉션을 의미하면 로봇은 리소스가 발견될 때까지 리다이렉트를 따라가야 한다.

9.4.3 robot.txt 파일 포맷

User-Agent

💡 User-Agent: robot-name

이 이름을 가진 로봇을 허용한다.

Disallow 와 Allow 줄들

어떤 경로가 허용되고, 어떤 경로가 허용되지 않았는지 명시함.

9.4.7 HTML 로봇 제어 META 태그

robot.txt의 파일 소유권은 웹 사이트 관리자에게 있다. 그래서 각 HTML 저가가 로봇이 개별 페이지에 접근하는 것을 제한하기 위한 HTML META태그가 존재한다.

NOINDEX

로봇에게 이 페이지를 처리하지 말고 무시하라고 말해줌

<META NAME="ROBOTS" CONTENT="NOINDEX">

NOFOLLOW

로봇에게 이 페이지가 링크한 페이지를 크롤링하지 말라고 말해준다.

<META NAME="ROBOTS" CONTENT="NOFOLLOW">

INDEX

로봇에게 이 페이지의 콘텐츠를 인덱싱해도 된다고 말해줌

FOLLOW

로봇에게 이 페이지가 링크한 페이지를 크롤링해도 된다고 말해줌

NOARCHIVE

로봇에게 이 페이지의 캐시를 위한 로컬 사본을 만들어서는 안 된다고 말해줌.

ALL

INDEX, FOLLOW와 같음

NONE

NOINDEX, NOFOLLOW와 같음.

그 밖에 검색엔진 META 태그

  • DESCRIPTION
    • 저자가 웹페이지의 짧은 요약을 정의할 수 있게 해준다.
  • KEYWORDS
    • 키워드 검색을 돕기 위한, 웹페이지를 기술하는 단어들의 쉼표로 구분되는 목록
  • REVISIT ・ AFTER
    • 로봇이나 검색엔진에게 이 페이지는 쉡게 변경될 것이기 때문에 지정된 날짜가 지난 이후에 다시 방문하라고 지시한다.

9.6 검색엔진

웹 로봇이 제일 많이 사용되는 곳이 검색엔진

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

오늘날 검색엔진들은 ‘풀 텍스트 색인'이라고 하는 로컬 데이터베이스를 생성한다.

  • 검색 엔진 동작
    1. 검색엔진 크롤러가 웹페이지들을 수집하여 풀 텍스트 색인에 추가한다.
    2. 구글같은 웹 검색 게이트웨이를 통해 풀 텍스트 색인에 대한 질의를 보낸다.

9.6.3 풀 텍스트 색인

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

9.6.4 질의 보내기

사용자가 질의를 웹 검색엔진 게이트웨이로 보내는 방법

  1. html 폼을 사용자가 채워넣음
  2. 브라우저가 그 폼을 http 요청을 이용해서 게이트웨이에 보냄
  3. 게이트웨이 프로그램은 검색 질의를 추출하고 웹 ui 질의를 풀 텍스트 색인을 검색할 때 사용되는 표현식으로 변환한다.

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

  • 관련도 랭킹 - 검색 결과 목록에 점수를 메기고 연관도가 높은 순서로 정렬하는 과정
    • 웹을 크롤링할 때 주어진 페이지를 가리키는 링크들이 얼마나 많은지로 인기도 판별

0개의 댓글