Skip to content

[2부 9장] 웹 로봇 #9

@SooKim1110

Description

@SooKim1110

1. 웹 로봇

웹 로봇: 사람과의 상호작용 없이 연속된 웹 트랜잭션들을 자동으로 수행하는 소프트웨어 프로그램
예시) 주식 그래프 로봇, 웹 통계 조사 로봇, 검색엔진 로봇, 가격 비교 로봇

2. 크롤러와 크롤링

웹 크롤러: 웹 페이지를 가져오고, 그 웹 페이지가 가리키는 모든 웹페이지를 가져오는 일을 재귀적으로 반복하여 웹을 순회하는 로봇.
인터넷 검색엔진은 크롤러를 사용하여 문서를 모아 검색 가능한 데이터베이스로 만든다.

루트 집합

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

  • 충분히 다른 장소에서 URL들을 선택해야 관심있는 웹페이지들을 모두 수집할 수 있다.
  • 큰 규모의 인기 있는 웹 사이트 + 새로 생성된 페이지 목록 + 잘 알려져있지 않은 페이지들의 목록 으로 구성하는 것이 좋다

루프와 중복

로봇은 루프를 피하기 위해 반드시 어디를 방문했는지 알아야한다. 루프에 빠지면 웹 서버에 부담을 줄 수 있고, 많은 수의 중복된 페이지를 가져오게 된다.

그럼 방문한 곳을 어떻게 기억할까?

  • 검색 트리와 해시테이블
  • 느슨한 존재 비트맵. 공간 사용을 최소화하기 위해 사용.
  • 체크포인트. 로봇이 갑자기 중단될 것을 대비해 방문한 URL 목록이 디스크에 저장되었는지 확인
  • 파티셔닝. 여러 로봇들이 동시에 일하는 farm을 이용해서 각 로봇에게 URL의 특정 부분을 할당.

그래도 충분하지 않다! (Alias 문제)

자료구조를 사용하더라도 다른 URL이라도 같은 리소스를 가리키는 경우가 있기 때문에 방문한 곳을 기억하기 어렵다.
예시)

  • 기본 포트가 80 일때
  • %7F이 ~과 같을 때
  • 태그에 따라 페이지가 바뀌지 않을 때
  • 서버가 대소문자를 구분하지 않을 때
  • 기본 페이지가 index.html일때
  • www.foo.com이 이 아이피 주소를 가질 때

URL 정규화

위 문제를 해결하기 위해 로봇들은 URL을 표준형식으로 정규화한다.
예시) 호스트명에 :80 추가, %xx 이스케이프 문자들을 대응되는 문자로 변환, # 제거
하지만 이는 기본적인 URL 문법의 별칭만 제거할 수 있을 뿐, 모든 문제를 해결해주지는 않는다.

문제 1. 심볼릭 링크

위의 예시로 파일 시스템의 심벌리 링크는 사실상 아무것도 존재하지 않으면서도 끝없이 깊어지는 디렉터리 계층을 만들 수 있기 때문에, 순환을 유발할 수 있다.

+👀) 리눅스의 링크

특정 파일이나 디렉터리에 링크를 걸어 사용할 수 있다(바로가기같은 개념)

  1. 하드링크: 원본 파일과 동일한 inode(파일을 빠르게 찾기 위해 파일 메타데이터를 저장한 데이터구조)를 가진다. inode에서 파일 링크 카운트가 1 증가한다. 원본 파일이 삭제되어도 inode를 가리키고 있으므로 영향이 없다.
    ln [대상 원본 파일] [새로 만들 파일 이름] 로 설정

  2. 심볼릭 링크: 원본 파일의 이름을 가리키는 링크. 원본 파일의 이름을 가리킨다.
    ln -s [대상 원본 파일] [새로 만들 파일 이름] 로 설정
    심볼릭 링크를 설정하면 생성,수정,삭제 모두 공유된다.
    rm 명령어로 (rm [새로 만들 파일 이름]) 심볼릭 링크를 삭제할 수 있지만 -r, -f같은 옵션을 사용하면 원본 내 파일들이 삭제될 수 있어 주의해야한다.

문제 2. 동적 가상 웹 공간

URL이 게이트웨이 애플리케이션을 가리키는 경우 게이트웨이가 가상의 URL에 대한 링크를 포함한 HTML을 만들어낼 수 있다.
이런식으로 URL과 HTML이 매번 달라지면 로봇이 순환을 감지하기 어렵다.

루프와 중복 피하기

    1. URL 정규화
    1. 너비 우선 크롤링
      방문할 URL들을 웹 사이트들 전체에 걸쳐 너비 우선으로 스케쥴링하면, 순환의 영향을 최소화할 수 있다
    1. 스로틀링
      로봇이 웹 사이트에서 일정 시간 동안 가져올 수 있는 페이지의 숫자 제한
    1. URL 크기 제한
      일정 길이를 넘는 URL의 크롤링을 거부한다
    1. URL/사이트 블랙리스트
      함정인 것으로 알려진 URL의 목록을 만들어 관리하고 피한다.
    1. 패턴 발견
      반복되는 구성요소를 가진 URL을 잠재적인 순환으로 보고, 둘 혹은 셋 이상의 반복된 구성요소를 갖고 있는 URL을 크롤링하는 것을 거절한다
    1. 콘텐츠 지문
      페이지의 콘텐츠에서 몇 바이트를 얻어내어 체크섬을 계산한다. 체크섬은 페이지 내용의 간략한 표현이다.
    1. 사람의 모니터링

3. 로봇의 HTTP

로봇도 HTTP 명세의 규칙을 지켜야한다. 보통 요구사항이 적은 HTTP/1.0 요청을 보낸다.

요청 헤더

서버에게 로봇의 정보를 알려주거나, 로봇이 다룰 수 있는 콘텐츠를 알려주기 위해 사용.

  • User-Agent, From, Accept, Referer
  • Host 헤더를 포함하지 않으면 로봇이 URL에 대해 잘못된 콘텐츠를 찾을 수 있다 (HTTP/1.1은 Host 헤더를 요구한다)
  • 조건부 요청 헤더를 사용해 변경되었을 때만 콘텐츠를 가져오도록 할 수 있다.

응답

HTTP의 특정 기능을 사용하는 로봇들이나, 웹 탐색이나 서버와의 상호작용을 더 잘 해보려고 하는 로봇들은 여러 종류의 HTTP 응답을 다룰 줄 알아야한다.

  • 상태코드, 엔터티(http-equiv HTML 태그)

4. 부적절하게 동작하는 로봇들

    1. 폭주하는 로봇
      로봇이 에러를 가지거나 순환에 빠질 경우 서버에 과부하를 줄 수 있다
    1. 오래된 URL
      존재하지 않는 문서에 대한 접근 요청으로 에러로그를 채우거나 에러 페이지를 제공하는 부하를 줄 수 있다
    1. 길고 잘못된 URL
      URL이 길 경우 웹 서버의 처리 능력에 영향을 준다
    1. 호기심이 지나친 로봇
      어떤 로봇들은 사적인 데이터에 대한 URL을 얻어 그 데이터를 인터넷 검색엔진이나 기타 애플리케이션을 통해 접근할 수 있도록 만들 수 있다
    1. 동적 게이트웨이 접근
      로봇은 게이트웨이 애플리케이션의 콘텐츠에 대한 URL로 요청할 수 있다. 이 경우 처리 비용이 많이 들 것이다.

5. 로봇 차단하기

로봇이 웹 사이트 접근시 유발할 수 있는 문제를 막고, 로봇의 동작을 더 잘 제어할 수 있는 매커니즘을 제공하기 위해 로봇 차단 표준이 마련되었다.

robots.txt

웹사이트에 robots.txt 파일이 존재하면 로봇은 반드시 그 파일을 가져와서 처리해야 한다.

파일 포맷

User-Agent: Slurp
User-Agent: webcrawler
Disallow: /private

User-Agent: *
Disallow:

각 레코드는 특정 로봇 집합에 대한 차단 규칙의 집합을 기술한다.
각 레코드는 빈 줄이나 EOF 문자로 끝난다.

User-Agent: 로봇 이름이 자신 이름의 부분 문자열이 될 수 있는 레코드 혹은 * 인 레코드에 매칭된다.
Disallow, Allow: 어떤 URL 경로가 명시적으로 금지되어 있고, 명시적으로 허용되는지 기술한다. 어떤 것도 맞지 않으면 그 URL은 허용된다.

6. 검색 엔진

현대적인 검색 엔진 아키텍쳐
스크린샷 2022-09-04 오전 11 14 51

풀 텍스트 색인: 단어 하나를 입력받아 그 단어를 포함하고 있는 문서를 알려줄 수 있는 데이터베이스
스크린샷 2022-09-04 오전 11 15 42

관련도 랭킹

검색 결과를 관련이 많은 순서대로 정렬하여 보여주어야한다. 검색 엔진은 웹 크롤링에서 얻은 정보(해당 페이지를 가리키는 링크의 수)를 주로 활용한다.

스푸핑

검색 결과에서 더 높은 순위를 차지하기 위해 웹 마스터들은 수많은 키워드를 나열한 가짜 페이지를 만들거나, 특정 단어에 대한 가짜 페이지를 생성하는 게이트웨이 애플리케이션을 만든다. 검색엔진과 로봇 구현자들은 이런 행위를 잡아내기 위해 관련도 알고리즘을 수정해야한다.

+👀) 엘라스틱서치

https://velog.io/@jakeseo_me/엘라스틱서치-알아보기-1-엘라스틱서치는-검색엔진이다
https://velog.io/@jakeseo_me/엘라스틱서치-알아보기-2-DB만-있으면-되는데-왜-굳이-검색엔진

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions