250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 완전이진트리
- 스케줄링
- SpringSecurity
- python
- spring
- 최대 힙
- 연결리스트
- 연결리스트 종류
- 알고리즘
- 엔티티 그래프
- 힙트리
- 강화학습
- HTTP
- Kruskal
- 백준장학금
- MSA
- JPA
- 최소힙
- 백준 장학금
- JVM
- jpa n+1 문제
- 운영체제
- 이분탐색이란
- 점근적 표기법
- 프로세스
- heapq
- 멀티프로세서
- 자료구조
- AVL트리
- posix
Archives
- Today
- Total
KKanging
[http 완벽 가이드] 9장 웹 로봇 본문

이 내용은 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을 표준형식으로 정규화 해야한다.
- 규칙
- 포트 번호가 명시되지 않았다면, 호스트 명에 :80 을 추가함.
- 모든 %xx 이스케이핑된 문자들을 대응되는 문자로 변환한다.
- 태그들을 제거한다
- 그러나 위 규칙을 따른다해도 위 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 |