Julie의 Tech 블로그

HTTP - (4) 웹로봇 본문

Tech

HTTP - (4) 웹로봇

Julie's tech 2021. 5. 30. 14:45
728x90

웹로봇이란, 유저와의 상호작용 없이 웹 트랜잭션들을 자동으로(automatic) 수행하는 사용자 에이전트이다.

예를 들어 실시간 트랜잭션을 플랏팅하여 그래프를 생성하는 그래프 로봇, 이커머스 몰에서 주로 사용하는 가격비교 봇 등이 있다.

페이지를 순차적으로 읽어오는 웹 크롤러는 검색 엔진에서 사용자가 특정 단어를 검색하였을 때 결과 페이지를 전달하는 데에 사용된다.

이 크롤러에게는 시작할 포인트인 루트 집합(root set)을 지정해주게 된다. 보통 인기 있는 웹사이트 페이지들을 담고 있는 루트 경로를 사용한다.

이 때 루프에 빠지지 않게 주의해야한다. 이를 위해 로봇은 스스로가 어떤 경로로 방문해왔는지를 알고 있어야한다.

루프에 빠지면 크롤러 본인도 시간을 허비하게 되지만, 서버도 부담이 되기 때문에 피하는 것이 좋다.

어떤 경로를 방문해왔는지를 기록하기 위해서는, 대용량 데이터를 효율적으로 담을 수 있는 자료구조를 사용해야한다.

검색 트리나 해시 테이블을 통해 URL을 비트로 변환하거나 체크포인트를 남겨 저장하곤 한다.

같은 원리로 웹 URL이 동일한 리소스를 가르킴에도 서로 다를 경우 정규화하는 것이 좋다.

ex1) http://www.foo.com/http://www.foo.com/index.html : 기본 페이지가 index.html일 때 두 URL은 사실 동일하다.

이러한 경우를 대비하여 로봇은 웹 서버가 대소문자를 가리는지, 색인 페이지 설정이 어떤지, 물리적 IP주소가 무엇인지 알 필요가 있다.

웹 로봇은 순환을 피하기 위해 몇 가지 정책들을 적용할 수 있다.

- URL정규화

- Throttling : 일정 시간동안 가져올 수 있는 페이지 숫자를 제한

- URL크기 제한 : URL이 길 경우 회피, 이 경우 사용자 아이디를 URL에 저장하는 등의 사용자 상태를 관리하는 URL은 어려울 수도 있음

- URL/사이트 블랙리스트 : 크롤링을 피하고 싶은 웹사이트 혹은 원치않아하는 웹사이트 목록 관리

- 패턴 발견 : 반복되는 구조로 URL이 반복될 경우 회피 (ex. subdir/subdir 혹은 subdir/images/subdir/images등)

- fingerprint : 페이지 내 콘텐츠로 체크섬을 계산하여 새로운 페이지에 접근하였을 때, 체크섬 값이 이전과 동일할 경우 패스

로봇 역시 HTTP클라이언트 프로그램처럼 동작한다.

User-Agent HTTP 헤더를 포함하고 요청을 보내게 되는데, 능력/신원/출신 정보를 포함하고 있다.

- User-agent (이름), From (관리자 정보), Accept (미디어 타입), Referer (문서 URL)

일전에 HTTP캐시가 리소스가 변경되었는지 검사하던 것처럼, 로봇도 변경된 콘텐츠만 받아올 수 있도록 조건부 HTTP요청을 구현할 수 있다.

로봇도 서버가 보내온 응답을 다룰 줄 알아야 한다. 기본적으로 상태 코드를 해석할 줄 알아야하고, 엔터티에 대한 정보를 해석할 수 있어야한다.

웹 서버는 로봇이 원치 않은 민감한 데이터에 닿는다던지, 부하를 많이 발생시키는 등의 문제를 미연에 방지하기 위해 메커니즘을 만들었다.

"robots.txt"라는 파일을 생성하여 로봇이 어떤 페이지를 접근할 권한이 있는지 제시하게 된다.

로봇은 요청을 하기 전에, HTTP GET으로 해당 파일을 가져오고, 요청하고자 하는 페이지에 대한 접근 권한이 있는지 확인하게 된다.

* 서버가 404 Not Found 상태코드를 반환하게 되면, 제한 없이 무엇이든 가져올 수 있다고 판단하고 어떤 파일이든 요청한다.

** 401, 403 과 같은 접근 제한 에러코드를 반환받으면, 제한되어있다고 가정해야한다.

*** 300번대의 리디렉션 응답일 경우 리다이렉트를 따라가고, 503과 같은 일시적인 실패 코드일 경우 요청을 잠시 미룬다.

robots.txt 파일의 구성은 간단하다. User-Agent, Allow, Disallow 세 가지로 구성되어 있다.

특정 로봇에 대해 가능한 것과, 불가능한 것을 나열하게 되는데, 이름은 로봇의 HTTP Get 요청의 헤더를 통해 보낸다.

이처럼 웹 로봇은 검색엔진에서 많이 사용된다. 크롤러들이 검색엔진에게 검색된 단어가 존재하는 문서들에 대한 색인을 생성할 수 있게 한다.

오늘날 검색엔진들은 전 세계의 웹페이지에 대해 'full-text indexes'라는 로컬 데이터베이스를 생성한다.

사용자는 HTML의 검색 form을 채우게 되고 (ex. 검색창에 단어를 넣음) submit 버튼(검색 등)을 누르게 되면,

브라우저가 이를 GET요청으로 변환하여 웹서버로 요청을 보내게 된다.

웹서버는 게이트웨이 어플리케이션으로 질의를 넘기고, 게이트웨이가 문서의 목록을 돌려준다.

웹서버는 다시 사용자를 위한 HTML페이지로 변환하게 된다.

이 때 여러 웹서버들을 관련 정도에 따라 ranking을 매겨 검색 결과의 목록을 정렬한다.


참고도서

https://book.naver.com/bookdb/book_detail.nhn?bid=8509980

 

HTTP 완벽 가이드

성공적인 웹 트랜잭션 뒤의 숨은 핵심, HTTP의 모든 것『HTTP 완벽 가이드』는 HTTP 규약이 어떻게 작동하고 웹 기반 애플리케이션을 개발하는 데 어떻게 사용하는지 설명하고, HTTP가 효율적으로 동작하도록 함께 사용하는 다른 핵심 인터넷 기술에 대해서 소개한 책이다. 책에서는 HTTP 메서드, 헤더, 상태 코드, 프락시와 캐시의 최적화, 웹 로봇과 크롤러 설계 전략, 쿠키, 인증, 보안 HTTP, 국제화와 내용 협상, 리다이렉션과 부하 균형 전략, 더 좋은 성능의 HTTP, HTTP/2.0에 대해서 다루고 있다. 또한, 10...

book.naver.com

 

반응형