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

2023. 8. 16. 01:29·cs/http
목차
  1. 1. 크롤러와 크롤링
  2. 1.1 어디에서 시작하는가: 루트 집합
  3. 1.2 링크 추출과 상대 링크 정상화
  4. 1.3 순환 피하기
  5. 1.4 루프와 중복
  6. 1.5 빵 부스러기의 흔적
  7. 1.6 별칭(alias)과 로봇 순환
  8. 1.7 URL 정규화하기
  9. 1.8 파일 시스템 링크 순환
  10. 1.9 동적 가상 웹 공간
  11. 1.10 루프와 중복 피하기
  12. 2. 로봇의 HTTP
  13. 2.1 요청 헤더 식별하기
  14. 2.2 가상 호스팅
  15. 2.3 조건부 요청
  16. 2.4 응답 다루기
  17. 2.5 User-Agent 타기팅
  18. 3. 부적절하게 동작하는 로봇들
  19. 폭주하는 로봇
  20. 오래된 URL
  21. 길고 잘못된 URL
  22. 호기심이 지나친 로봇
  23. 동적 게이트 접근
  24. 4. 로봇 차단하기
  25. 4.1 로봇 차단 표준
  26. 4.2 웹 사이트의 robots.txt 파일들
  27. 4.3 robots.txt 파일 포멧
  28. 4.4 그 외의 알아둘 점
  29. 4.5 robots.txt의 캐싱과 만료
  30. 4.7 HTML 로봇 제어 META 태그
  31. 5. 로봇 에티켓
  32. 6. 검색 엔진
  33. 6.1 넓게 생각해라
  34. 6.2 현대적인 검색엔진의 아키텍처
  35. 6.3 풀 텍스트 색인
  36. 6.4 질의 보내기
  37. 6.5 검색 결과를 정렬하고 보여주기
  38. 6.6 스푸핑

이 내용은 http 완변 가이드란 책을 읽고 정리한 내용입니다.

 

더 자세한 내용이 궁금하시면 책을 직접 읽어보시는 걸 추천합니다.

 

 

9장 웹 로봇

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

1. 크롤러와 크롤링

  • 웹 크롤러는 먼저 웹체이지를 한 개 가져오고, 그다음 그 페이지가 가리키는 모든 웹페이지를 가져오고, 다시 그 페이지들이 가리키는 모든 웹페이지들을 가져오는, 이러한 일을 재귀적으로 반복하는 방식으로 웹을 순회하는 로봇이다.
  • 이렇게 재귀적으로 따라가는 로봇을 크롤러 혹은 스파이더라고 부른다. 기어다니다(crawl)
  • 인터넷 검색 엔진은 웹을 돌아다니면서 그들이 만나는 모든 문서를 끌어오기 위해 크롤러를 사용한다.

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

  • 크롤러를 풀어놓기 전에 출발지점을 주어야한다.
    • 루트 집합(root set) - 크롤러가 방문을 시작하는 URL들의 초기 집합
  • 루트 집합을 고를 때, 모든 링크를 크롤링하면 결과적으로 관심있는 웹체이지들의 대부분을 가져오게 될 수 있도록 충분히 다른 장소에서 URL 들을 선택해야 한다.
  • 어떤 루트 집합은 그들로 향하는 어떤 링크도 없이 오도 가도 못하게 고립되어 있다.
  • 일반적으로 좋은 루트 집합은 크고 인기 있는 웹사이트, 새로 생성된 페이지들의 목록, 그리고 자주 링크되지 않는 잘 알려져 있지 않은 페이지들의 목록으로 구성되어 있다.
  • 인터넷 검색엔진에서 쓰이는 것과 같은 많은 대규모 크롤러 제품들은 사용자들이 루트 집합에 새 페이지나 잘 알려지지 않는 페이지들을 추가하는 기능을 제공한다.

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

  • 크롤러는 검색한 각 페이지 안에 들어있는 URL 링크들을 파싱해서 크롤링할 페이지들의 목록에 추가 해야 한다.
  • 크롤러들은 간단한 HTML 파싱을 해서 이들 링크들을 추출하고 상대 링크를 절대 링크로 변환할 필요가 있다.

1.3 순환 피하기

  • 로봇이 웹을 크롤링 할 때, 루프나 순환에 빠지지 않도록 매우 조심해야 한다.
  • 로봇들은 순환을 피하기 위해 반드시 그들이 어디를 방문했는지 알아야 한다.

1.4 루프와 중복

  • 루프는 쓸데없이 로봇을 빙빙 돌게 만들 수 있고
  • 크롤러가 같은 페이지를 돌면서 가져오면 고스란히 웹 서버의 부담이 된다.
  • 비록 루프 자체가 문제가 되지 않더라도, 크롤러는 많은 수의 중복된 페이지를 가져오게 된다

1.5 빵 부스러기의 흔적

  • 루프에 빠지지 않기 위해 방문한 곳을 추적하기 쉽지 않다.
  • 만약 전 세계 웹 콘텐츠의 상당 부분을 크롤링하려 한다면 어떤 URL을 방문하였는지 계속 추적하는 작업은 꽤나 도전적이다.
  • 그래서 어떤 URL을 방문했는지 빠르게 판단하기 위해서는 복잡한 자료구조를 알아야하고 이 자료구조는 속도와 메모리 사용 면에서 효과적이어야 한다.
    • 트리와 해시 테이블
    • 느슨한 존재 비트맵: 각 URL을 해시함수로 비트화 시킨 맵
    • 체크포인트
    • 파티셔닝: 몇몇 대규모 웹 로봇은, 각각이 분리된 한 대의 컴퓨터인 로봇들이 동시에 일하고 있는 농장을 이용한다.

1.6 별칭(alias)과 로봇 순환

  • 올바른 자료구조를 갖추어도 URL이 별칭을 가질 수 있는 이상 어떤 페이지를 이전에 방문했었는지 말해주는 게 쉽지 않을 때도 있다.

1.7 URL 정규화하기

  • 별칭에 대해 해결책을 가지기 위한 방법으로 URL을 표준형식으로 정규화 해야한다.
  • 규칙
    1. 포트 번호가 명시되지 않았다면, 호스트 명에 :80 을 추가함.
    2. 모든 %xx 이스케이핑된 문자들을 대응되는 문자로 변환한다.
    3. 태그들을 제거한다
  • 그러나 위 규칙을 따른다해도 위 d~f를 피할 좋은 방법이 없다.

1.8 파일 시스템 링크 순환

  • 파일 시스템의 심벌릭 링크는 사실상 아무것도 존재하지 않으면서도 끝없이 깊어지는 디렉터리 계층을 만들 수 있기 때문에 , 매우 교묘한 종류의 순환을 유발할 수 있다.
  • 심벌릭 링크 때문에 순환되는 것이지만 URL 이 달라 보이기 때문에 로봇은 URL으로는 문서가 같다는 것을 모른다는 점이다.
  • 이상한 낌새를 눈치 채지 못한 로봇은 루프로 빠져들 위험이 있다.

1.9 동적 가상 웹 공간

  • 악의적인 개발자들이 로봇들을 함정에 빠뜨리기 위해 의도적으로 복잡한 크롤러 루프를 만드는 것은 있을 수 있는 일이다.
  • 또는 나쁜 뜻이 없음에도 자신도 모르게 심벌릭 링크나 동적 콘텐츠를 통한 크롤러 함정을 만드는 것이다.

1.10 루프와 중복 피하기

  • 모든 순환을 피하는 완벽한 방법은 없다. 실제로 잘 설계된 로봇은 순환을 피하기 위해 휴리스틱의 집합을 필요로 한다.
  • 로봇 구현자는 중복을 피하기 위해 구현한 기능 때문에 약간의 손실을 유발할 수 있다는 걸 알아야하한다.
  • 로봇이 더 웹에서 올바르게 동작하기 위해 사용하는 기법들은 다음과 같다.
    • URL 정규화
    • 너비 우선 크롤링
    • 스로틀링: 가져올 수 있는 페이지 수 제한
    • URL 크기 제한: 순환하면 보통 URL이 계속 길어진다는 점이 있어 URL 크기를 제한한다 . 하지만 이는 손실을 유발 할 수도 있다.
    • URL/사이트 블랙리스트 : 순환 블랙리스트를 관리
    • 패턴 발견: 순환되는 페이지의 패턴을 이용
    • 콘텐츠 지문: 방문한 페이지의 콘텐츠(내용)을 짧게 저장해서 또 방문한 페이지를 거른다.
    • 사람의 모니터링

2. 로봇의 HTTP

  • 로봇들은 다른 HTTP 클라이언트 프로그램과 다르지 않다.
  • 로봇들은 HTTP 명세에 따라야하고 적절한 HTTP 요청 헤더를 사용해야한다.
    • 하지만 많은 로봇들이 최소한의 HTTP만 구현하려고 한다. 이는 많은 문제를 유발할 수 도 있다.

2.1 요청 헤더 식별하기

  • 아무리 최소한의 HTTP를 구현한다해도 그들 대부분은 약간의 신원 식별 헤더를 구현하고 전송한다.
  • 로봇 구현자들은 로봇의 능력, 신원, 출신을 알려주는 기본적인 몇 가지 헤더를 사이트에게 보내주는 것이 좋다.
  • 다음은 잘못된 크롤러의 소유자를 찾아낼 때와 서버에게 로봇이 어떤 종류의 콘텐츨를 다룰 수 있는지에 대한 약간의 정보를 주려 할 때 유용한 정보이다.
    • 기본적인 식별 헤더 : User-Agent, From, Accpt, Referer
    • User-Agent
    • 서버에게 요청을 만든 로봇의 이름을 말해준다.
    • From
    • 로봇은 사용자/관리자의 이메일 주소를 제공한다
    • Accept
    • 서버에게 어떤 미디어 타입을 보내도 되는지 말해준다.
    • Referer
    • 현재의 요청 URL을 포함한 문서의 URL을 제공한다.

2.2 가상 호스팅

  • 로봇 구현자들은 Host 헤더를 지원할 필요가 있다.
  • 요청에 Host 헤더를 포함하지 않으면 로봇이 어떤 URL에 대해 잘못된 콘텐츠를 찾게 만든다.
  • 두 개의 사이트(www.joes.hardware.com, www.foo.com)를 운영하는 서버에 host헤더를 포함하지 않고 요청을 보냈을 때, 서버가 기본적으로 www.joes.hardware.com 를 제공하도록 설정되어 있다면 www.foo.com페이지에 대한 요청은 www.joes.hardware.com에 대한 콘첸츠를 얻게 되고, 크롤러는 이를 구분할 수 없다

2.3 조건부 요청

  • 때때로 로봇이 엄청난 양의 요청을 할 수도 있기에 로봇이 검색하는 콘텐츠의 양을 최소화하는 것은 상당히 의미 있는 일이다.
  • 이는 캐시가 신선도 검사를 하는 방법과 비슷하다.

2.4 응답 다루기

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

2.5 User-Agent 타기팅

  • 많은 웹 사이트들은 그들의 여러 기능을 지원할 수 있도록 브라우저의 종류를 감지하여 그에 맞게 콘텐츠를 최적화한다.

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

폭주하는 로봇

  • 웹 서핑을 사람보다 빠르게 하기 때문에 만약에 루프에 빠진다면 서버에 과도한 부하가 걸린다.

오래된 URL

  • 로봇들이 오래된 URL 을 접근하므로써 에러 로그를 보내는 부하가 걸리기도 한다.

길고 잘못된 URL

  • 순환에 빠진 로봇이 길고 잘못된 URL 을 요청을 하면 웹 서버의 장애를 일으키기도 한다.

호기심이 지나친 로봇

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

동적 게이트 접근

  • 로봇들은 웹 서버가 아닌 동적 컨텐츠를 다루는 게이트웨이에 접근하면 게이트웨이는 이를 처리하는 비용이 들것이다.

4. 로봇 차단하기

  • 로봇들이 장애를 일으키는 것을 방지하는 방법
  • 어떤 웹서버는 서버의 문서 루트에 robot.txt라고 이름 붙은 선택적인 파일을 제공할 수 있다.
  • 이 파일은 어떤 로봇이 서버의 어떤 부분에 접근할 수 있는지에 대한 정보가 담겨있다.
  • 만약 로봇들이 이 표준을 따른다면 서핑하기 전 robot.txt부터 찾을 것이다.

4.1 로봇 차단 표준

  • 로봇 차단 표준은 임시 방편이다.
  • 이 표준은 불안전하지만 없는 것보단 낫다.

4.2 웹 사이트의 robots.txt 파일들

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

4.3 robots.txt 파일 포멧

  • robots.txt 파일 문법
    • User-Agent 줄
    • Disallow와 Allow 줄들
  • User-Agent 줄
    • 여기에 적힌 로봇만 허용
    • 만약 안적혀있으면 접근에는 어떤 제한도 없다.
  • Disallow와 Allow 줄들
    • 어떤 경로가 허용되고, 어떤 경로가 허용되지 않았는지 명시함.

4.4 그 외의 알아둘 점

  • robot.txt 파일에서 로봇은 자신이 이해하지 못하는 필드는 무시해야함

4.5 robots.txt의 캐싱과 만료

  • 매 접근마다 로봇이 robots.txt을 가져온다면 비효율적이다.
    • 이 파일을 캐시함으로써 해결 가능하다.

4.7 HTML 로봇 제어 META 태그

  • 로봇 제어 HTML 태그에 따르는 로봇들은 여전히 문서를 가져올 수는 있겠지만, 로봇 차단 태그가 존재한다면 그들은 문서를 무시할 것이다.
  • robots.txt 표준과 마찬가지로 강제하지는 않지만 권장된다.

5. 로봇 에티켓

6. 검색 엔진

  • 웹 로봇을 가장 광범위하게 사용하는 것은 검색엔진이다.
  • 검색엔진에서 로봇들이 어떻게 동작하는지 알아보자.

6.1 넓게 생각해라

  • 초창기 웹은 문서의 위치를 알아내는 검색은 단순한 데이터 베이스였다.
  • 하지만 이는 웹이 커지면서 불가능해졌다.
  • 그래서 로봇을 활용한 검색엔진은 필수가 되었다.

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

  • 오늘날에 검색엔진은 크롤러가 웹 페이지들을 크롤링하고 그 페이지에 대해 풀 텍스트 색인이라고 하는 복잡한 로컬 데이터베이스를 생성한다.
  • 이는 크롤링을 한번 하는데 시간이 걸리고 데이터 베이스에 색인 페이지를 찾는 과정은 시간이 걸리지 않는다는 점을 이용하였다.

6.3 풀 텍스트 색인

  • 풀 텍스트 색인 DB: 단어들을 포함하고 있는 문서를 즉각 알려줄 수 있는 데이터 베이스이다.
  • 색인이 생성된 이후에는 검색할 필요가 없다.

6.4 질의 보내기

  • 사용자가 검색을 하면 URL 질의를 이용해서 요청을 보낸다.
  • 검색 게이트웨이는 관련 페이지를 모은 HTML을 보낼 것이다.

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

  • 만일 best라는 단어를 검색했을 때 관련 글이 많이 뜰것이다.
  • 이를 정렬하기위해 똑똑한 알고리즘을 사용한다.
  • 예를 들어 best를 가장 많이 포함한 페이지를 정렬하는 관련도 랭킹을 이용하기도 한다.
  • 또는 얼마나 많은 링크들이 이 페이지를 가리키는지 확인하는 인기도를 활용하기도 한다.

6.6 스푸핑

  • 위와 같은 알고리즘을 이용하여 웹 마스터들이 자신의 사이트가 상위에 노출되도록 편법을 이용하기도 한다.
  • 로봇 구현자들은 이를 잘 구별할 줄 알아야한다.

'cs > http' 카테고리의 다른 글

[http 완벽 가이드] 11장 클라이언트 식별과 쿠키  (0) 2023.08.17
[http 완벽 가이드] 10장 HTTP/2.0  (0) 2023.08.17
[http 완벽 가이드] 8장 통합점: 게이트웨이, 터널 , 릴레이  (0) 2023.08.13
[http 완벽 가이드] 7장 캐시  (0) 2023.08.13
[http 완벽 가이드] 6장 프락시  (0) 2023.08.13
  1. 1. 크롤러와 크롤링
  2. 1.1 어디에서 시작하는가: 루트 집합
  3. 1.2 링크 추출과 상대 링크 정상화
  4. 1.3 순환 피하기
  5. 1.4 루프와 중복
  6. 1.5 빵 부스러기의 흔적
  7. 1.6 별칭(alias)과 로봇 순환
  8. 1.7 URL 정규화하기
  9. 1.8 파일 시스템 링크 순환
  10. 1.9 동적 가상 웹 공간
  11. 1.10 루프와 중복 피하기
  12. 2. 로봇의 HTTP
  13. 2.1 요청 헤더 식별하기
  14. 2.2 가상 호스팅
  15. 2.3 조건부 요청
  16. 2.4 응답 다루기
  17. 2.5 User-Agent 타기팅
  18. 3. 부적절하게 동작하는 로봇들
  19. 폭주하는 로봇
  20. 오래된 URL
  21. 길고 잘못된 URL
  22. 호기심이 지나친 로봇
  23. 동적 게이트 접근
  24. 4. 로봇 차단하기
  25. 4.1 로봇 차단 표준
  26. 4.2 웹 사이트의 robots.txt 파일들
  27. 4.3 robots.txt 파일 포멧
  28. 4.4 그 외의 알아둘 점
  29. 4.5 robots.txt의 캐싱과 만료
  30. 4.7 HTML 로봇 제어 META 태그
  31. 5. 로봇 에티켓
  32. 6. 검색 엔진
  33. 6.1 넓게 생각해라
  34. 6.2 현대적인 검색엔진의 아키텍처
  35. 6.3 풀 텍스트 색인
  36. 6.4 질의 보내기
  37. 6.5 검색 결과를 정렬하고 보여주기
  38. 6.6 스푸핑
'cs/http' 카테고리의 다른 글
  • [http 완벽 가이드] 11장 클라이언트 식별과 쿠키
  • [http 완벽 가이드] 10장 HTTP/2.0
  • [http 완벽 가이드] 8장 통합점: 게이트웨이, 터널 , 릴레이
  • [http 완벽 가이드] 7장 캐시
천방지축 개발자
천방지축 개발자
기록용 블로그
    250x250
  • 천방지축 개발자
    KKanging
    천방지축 개발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • 백엔드 (31)
        • Spring framework (4)
        • SpringSecurity (6)
        • JPA (4)
        • DB (6)
        • Spring Cloud (2)
        • CI CD (0)
        • 아키텍처 & 패러다임 & 디자인 패턴 (5)
        • 시스템 설계 & 성능 개선 (4)
      • JAVA (5)
        • 언어 (3)
        • JVM (4)
      • cs (57)
        • 운영체제 (8)
        • 컴퓨터네트워크 (6)
        • 자료구조 (15)
        • 알고리즘 (8)
        • http (20)
      • 인공지능 (5)
        • Reinforcement Learning (5)
      • 기타 (9)
        • 백준 (2)
        • python (2)
        • 백준 장학금 (5)
      • 회고 (5)
        • 토덕-리팩터링 (2)
      • 아티클 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    멀티프로세서
    AVL트리
    강화학습
    운영체제
    JPA
    MSA
    jpa n+1 문제
    posix
    최소힙
    이분탐색이란
    엔티티 그래프
    python
    점근적 표기법
    연결리스트
    알고리즘
    완전이진트리
    연결리스트 종류
    스케줄링
    JVM
    백준 장학금
    힙트리
    최대 힙
    HTTP
    프로세스
    spring
    Kruskal
    백준장학금
    heapq
    자료구조
    SpringSecurity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
천방지축 개발자
[http 완벽 가이드] 9장 웹 로봇

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.