Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2부 9장] 웹 로봇 #9

Open
SooKim1110 opened this issue Sep 4, 2022 · 1 comment
Open

[2부 9장] 웹 로봇 #9

SooKim1110 opened this issue Sep 4, 2022 · 1 comment

Comments

@SooKim1110
Copy link

SooKim1110 commented Sep 4, 2022

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만-있으면-되는데-왜-굳이-검색엔진

@ruthetum
Copy link
Member

ruthetum commented Sep 4, 2022

cf. ELK Overview

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants