HTTP 완벽 가이드 9장 웹 로봇

DARTZ·2022년 6월 26일
0

HTTP 완벽 가이드

목록 보기
3/11

웹 로봇이란?

사람과의 상호작용 없이 연속된 웹 트랜잭션을 자동으로 수행하는 소프트웨어 프로그램이다. 그 방식에 따라 '크롤러', '스파이더', '웜', '봇' 등 각양각색의 이름으로 불린다.

EX)

  • 주식시장 서버에서 매분 HTTP GET 요청을 보내고, 여기서 얻은 데이터를 활용해 주가 추이 그래프를 생성하는 주식 그래프 로봇

  • 월드 와이드 웹의 규모와 진화에 대한 통계 정보를 수집하는 웹 통계 조사 로봇. 이것들은 웹을 떠돌면서 페이지의 개수를 세고, 각 페이지의 크기, 언어, 미디어 타입을 기록한다.

  • 검색 데이터 베이스를 만들기 위해 발견한 모든 문서를 수집하는 검색엔진 로봇.

  • 상품에 대한 가격 데이터베이스를 만들기 위해 온라인 쇼핑몰의 카탈로그에서 웹페이지를 수집하는 가격 비교 로봇

1. 크롤러와 크롤링

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

(웹 링크를 재귀적으로 따라가는 로봇을 크롤러 혹은 스파이더라고 부르는데, HTML 하이퍼링크들로 만들어진 웹을 따라 '기어다니기(crawl) 때문이다.')

1. 어디서 시작하는가: '루트 집합'

클롤러가 방문을 시작하는 URL들의 초기 집합은 루트 집합이라고 불린다. 좋은 루트 집합은 크고 인기 있는 웹 사이트, 새로 생성된 페이지들의 목록, 그리고 자주 링크되지 않는 잘 알려져 있지 않은 페이지들의 목록으로 구성.

2. 링크 추출과 상대 링크 정상화

크롤러는 검색한 각 페이지 안에 들어있는 URL 링크들을 파싱해서 크롤링할 페이지들의 목록에 추가 해야한다. 새 링크를 발견함에 따라 이 목록은 급속히 확장된다. 크롤러는 간단한 HTML 파싱을 해서 이들 링크들을 추출하고 상대 링크를 절대 링크로 변환할 필요가 있다.

3. 순환 피하기

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

4. 루프와 중복

1) 순환은 크롤러를 루프에 빠뜨려서 꼼짝 못하게 만들 수 있다.
2) 크롤러가 같은 페이지를 반복해서 가져오면 고스란히 웹 서버의 부담이 된다.
3) 크롤러는 많은 수의 중복된 페이지들을 가져오게 되는데 자신을 쓸모없게 만드는 중복된 콘텐츠로 넘쳐나게 될 것이다.

5. 빵 부스러기의 흔적

방문한 곳을 지속적으로 추적하는 것은 쉽지 않다. 대규모 웹 크롤러가 그들이 방문한 곳을 관리하기 위해 사용하는 유용한 기법을 알아보자.

1) 트리와 해시 테이블

2) 느슨한 존재 비트맵

3) 체크 포인트

4) 파티셔닝

6. 별칭과 로봇 순환

한 URL이 또 다른 URL에 대한 별칭이라면, 그 둘이 서로 달라 보이더라도 사실은 같은 리소스를 가리키고 있다.

7. URL 정규화 하기

대부분의 웹 로봇은 URL들을 표준 형식으로 '정규화' 함으로써 다른 URL과 같은 리소스를 가리키고 있음이 확실한 것들을 미리 제거하려 시도한다.
로봇은 다음과 같은 방식으로 모든 URL을 정규화된 형식으로 변환할 수 있다.

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

8. 파일 시스템 링크 순환

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

9. 동적 가상 웹 공간

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

10. 루프와 중복 피하기

모든 순환을 피하는 완벽한 방법은 없다. 실제로 잘 설계된 로봇은 순환을 피하기 위해 휴리스틱의 집합을 필요로 한다.

웹은 로봇이 문제를 일으킬 가능성으로 가득 차 있다. 이러한 웹에서 로봇이 더 올바르게 동작하기 위해 사용하는 기법들은 다음과 같다.

1) URL 정규화: URL을 표준 형태로 변환
2) 너비 우선 크롤링
3) 스로틀링: 로봇이 웹 사이트에서 일정 시간 동안 가져올 수 있는 페이지의 숫자를 제한
4) URL 크기 제한
5) URL/사이트 블랙리스트
6) 패턴 발견
7) 콘텐츠 지문: 페이지의 콘텐츠에서 몇 바이트를 얻어내어 체크섬을 계산.
8) 사람의 모니터링

2. 로봇의 HTTP

로봇들은 다른 HTTP 클라이언트 프로그램과 다르지 않다. 그들 또한 HTTP 명세의 규칙을 지켜야한다. HTTP 요청을 만들고 스스로를 HTTP/1.1 클라이언트라고 광고하는 로봇은 적절한 HTTP 요청 헤더를 사용해야한다.

1. 요청 헤더 식별하기

로봇 개발자들이 구현을 하도록 권장되는 기본적인 신원 식별 헤더들에는 다음과 같은 것이 있다.

1) User-Agent: 서버에게 요청을 만든 로봇의 이름을 말해준다.
2) From: 로봇의 사용자/관리자의 이메일 주소를 제공한다.
3) Accept: 서버에게 어떤 미디어 타입을 보내도 되는지 말해준다.
4) Referer: 현재의 요청 URL을 포함한 문서의 URL을 제공한다.

2. 가상 호스팅

로봇 구현자들은 Host 헤더를 지원할 필요가 있다.

3. 조건부 요청

로봇 중의 몇몇은 시간이나 엔터티 태그를 비교함으로써 그들이 받아간 마지막 버전 이후에 업데이트 된 것이 있는지 알아보는 조건부 HTTP 요청을 구현한다.

4. 응답 다루기

대다수의 로봇들은 주 관심사가 단순히 Get메서드로 콘텐츠를 요청해서 가져오는 것이지만 특정 기능을 사용하는 로봇들이나, 웹 탐색이나 서버와의 상호작용을 더 잘 해보려고 하는 로봇들은 여러 종류의 HTTP응답을 다룰 줄 알 필요가 있다.

1) 상태 코드
2) 엔터티

5. User-Agent 타기팅

웹 관리자들은 많은 로봇이 그들의 사이트를 방문하게 될 것임을 명심하과, 그 로봇들로부터의 요청을 예상해야 한다.

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

로봇들이 저지르는 실수들

1) 폭주하는 로봇: 로봇은 웹 서핑을 하는 사람보다 훨씬 빠르게 HTTP요청을 만들 수 있다. 만약 로봇이 논리적인 에러를 갖고 있거나 순환에 빠졌다면 웹 서버에 극심한 부하를 안겨줄 수 있다.

2) 오래된 URL: 로봇은 URL의 목록을 방문한다. 목록이 오래되었을 경우 존재하지 않은 URL에 대한 요청을 보낼 수 있다.

3) 길고 잘못된 URL: URL이 길다면 웹 서버의 처리 능력에 영향을 주고 고장을 일으킬 수도 있다.

4) 호기심이 지나친 로봇: 로봇은 많은 양의 데이터를 검색하므로 몇몇 사이트 구현자들이 인터넷을 통해 접근 가능하리라 생각하지 못했던 민감한 데이터에 접근될 수도 있다.

5) 동적 게이트웨이 접근: 로봇들이 접근하고 있는 것에 잘 알고 있는 것이 아니므로 게이트웨이 애플리케이션의 콘텐츠에 대한 URl 요청을 할 수도 있다.

4. 로봇 차단하기

1. 로봇 차단 표준

로봇 차단 표준은 임시방편으로 마련된 표준이다.

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

웹 사이트의 어떤 URL을 방문하기 전에, 그 웹 사이트에 robots.txt파일이 존재한다면 로봇은 반드시 그 파일을 가져와서 처리해야한다.

1) robots.txt 가져오기: HTTP GET메서드를 이용해 robots.txt 리소스를 가져온다.

2) 응답 코드

3. robots.txt 파일 포맷

1) User-Agent 줄: 각 로봇의 레코드는 하나 이상의 User-Agent줄로 시작하며 형식은 다음과 같다.

2) Disallow와 Allow 줄들: User-Agent줄들 바로 다음에 온다. 특정 로봇에 대해 어떤 URL경로가 명시적으로 금지되어 있고 명시적으로 허용되는지 기술한다.

3) Disallow/Allow 접두 매칭(prefix matching)

4. 그 외에 알아둘 점

5. robots.txt의 캐싱과 만료

로봇은 주기적으로 robots.txt를 가져와서 그 결과를 캐시해야 한다.

6. 로봇 차단 펄 코드

robots.txt 파일과 상호작용하는 공개된 펄(Perl) 라이브러리가 몇 가지 존재한다. 한 예는 CPAN 공개 펄 아카이브의 WWW::RobotsRules 모듈이다.

7. HTML 로봇 제어 META 태그

HTML 페이지 저자는 로봇이 개별 페이지에 접근하는 것을 제한하는 좀 더 직접적인 방법을 갖고 있다.

로봇 META 지시자

  • NOINDEX

  • NOFOLLOW

  • INDEX

  • FOLLOW

  • NOARCHIVE

  • ALL

  • NONE

검색엔진 META 태그

모든 로봇 META 태그는 name="robots" 속성을 포함한다.

5. 로봇 에티켓

1993년 웹 로봇 커뮤니티의 개척자인 마틴 코스터는 웹 로못을 만드는 사람들을 위한 가이드라인 목록을 작성했다. 그 조언 중 몇 가지는 구식이 되어버렸지만, 대다수는 아직도 상당히 유용하다.

1) 신원 식별

  • 로봇의 신원을 밝혀라
  • 기계의 신원을 밝혀라
  • 연락처를 밝혀라

2) 동작

  • 긴장하라
  • 대비하라
  • 감시와 로그
  • 배우고 조정하라

3) 스스로를 제한하라

  • URL을 필터링하라
  • 동적 URL를 필터링하라
  • Accept 관련 헤더로 필터링
  • robots.txtdp Ekfmfk
  • 스스로를 억제하라

4) 루프와 중복을 견뎌내기, 그리고 그 외의 문제들

  • 모든 응답 코드 다루기
  • URL 정규화 하기
  • 적극적으로 순환 피하기
  • 함정을 감시하라
  • 블랙리스트를 관리하라

5) 확장성

  • 공간 이해하기
  • 대역폭 이해하기
  • 시간 이해하기
  • 분할 정복

6) 신뢰성

  • 철저하게 테스트하라
  • 체크포인트
  • 실패에 대한 유연성

7) 소통

  • 준비하라
  • 이해하라
  • 즉각 대응하라

6. 검색엔진

웹 로봇을 가장 광범위하게 사용하는 것은 인터넷 검색 엔진이다. 인터넷 검색엔진은 사용자가 전 세계의 어떤 주제에 대한 문서라도 찾을 수 있게 해준다.

1) 넓게 생각하라

대규모 크롤러가 자신의 작업을 완료하려면 많은 장비를 똑똑하게 사용해서 요청을 병렬적로 수행할 수 있어야 할 것이라는 점은 명백하다. 그러나 그 규모 때문에, 웹 전체를 크롤링하는 것은 여전히 쉽지 않은 도전이다.

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

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

3) 풀 텍스트 색인

풀 텍스트 색인은 단어 하나를 입력받아 그 단어를 포함하고 있는 문서를 즉각 알려줄 수 있는 데이터베이스다. 이 문서들은 색인이 생성된 후에는 검색할 필요가 없다.

4) 질의 보내기

사용자가 질의를 웹 검색엔진 게이트웨이로 보내는 방법은 HTML 폼을 사용자가 채워 넣고 브라우저가 그 폼을 HTTP GET 이나 POST 요청을 이요해서 게이트웨이로 보내는 식이다. 게이트웨이 프로그램은 검색 질의를 추출하고 웹 UI 질의를 풀 텍스트 색인을 검색할 때 사용하는 표현식으로 변환한다.

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

질의의 결과를 확인하기 위해 검색엔진이 색인을 한번 사용했다면, 게이트웨이 애플리케이션은 그 결과를 이용해 최종 사용자를 위한 결과 페이지를 즉석에서 만들어낸다.

6) 스푸핑

검색 결과에서 더 높은 순위를 차지하고자 하는 바람은 검색 시스템과 게임으로 이어졌고, 검색엔진과 자신의 사이트를 눈에 띄게 할 방법을 찾고 있는 사람들과의 줄다리기를 만들어냈다. 검색엔진과 로봇 구현자들은 속임수(검색 상위권을 위한 속임수)를 더 잘 잡아내기 위해 끊임없이 그들의 관련도 알고리즘을 수정해야한다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글