본문 바로가기

Memo

크롤러(crawler)에 대한 이야기

우연히 검색을 하다 매우 재미있고 특히 검색 엔진 중 수집기(크롤러, spider나 robot이라고도 부른다)의 동작에 대해 궁금해 하는 사람들에게 유용한 댓글을 발견했다. 본문은 그냥 대충 넘어가도 될 것 같아 댓글만 옮겨 온다. Googleguy라는 익명의 사람이 쓴 것이다. 두 개의 댓글이 있는데 모두 옮겨 온다.

검색 엔진의 기술적인 부분에 대해서 의견이 오가는 것 같아서, 이야기하기 어려운 입장이지만 중태님의 의견에 첨가합니다. 여러분들이 익히 아시는 것과 다르게 검색 엔진에 링크가 수록되는 것은 단순 로봇 외에 몇가지가 있습니다.

첫째는 말 그대로 로봇이 긁어간 경우고요. 이 부분은 아시는대로 표준인 robots.txt로 검색 엔진에게 서버 운영자의 검색 관련 입장을 표명할 수 있습니다. 구글 등 검색 엔진에서는 이렇게 검색에 수록된 문서들은 제목과 아울러 본문의 일부까지 나타납니다.

두번째는 중태님의 말씀대로 다른 페이지에서 특정 사이트로 링크가 걸려있고 이 링크 정보 자체를 검색에 반영하는 경우입니다. 관련자들 사이에서는 'link text'라는 용어를 쓰는걸로 알고 있습니다. 즉, 조선일보 chosun.com 웹 사이트의 제목이나 본문에 조선일보라고 안씌여있어도 구글에서 조선일보라고 치면 chosun.com이 1등으로 나오는 이유가 여기에 있습니다. chosun.com을 링크한 다수의 사람들이 링크 텍스트에 조선일보라고 적어놨기 때문입니다. 예전에 구글 폭탄도 이런 방식을 응용한 사례입니다.

이 경우에는 해당 링크된 페이지가 robots.txt로 검색 거부를 하더라도, 그 링크 하나만은 반영이 됩니다. 그렇기 때문에 이 경우에는 보통 링크 제목 또는 그 페이지 URL 정도가 나올 수 있습니다. 같은 URL을 가지고 링크 제목이 서로 다른 경우도 많아서 정확하게 어디까지 반영되는지는 검색 엔진 회사나 내부 알고리즘 등에 따라서 미묘하게 다를 수 있습니다만. 아무리 넓게 잡아도 상식적인 엔진이라면 이 페이지 이상은 반영이 안된다고 보시면 됩니다. 로봇 표준 쪽이 더 중요한거니까요.

추가로 이 두번째 경우에도 주기적으로 robots.txt 정보에 따라서 자동으로, 혹은 웹마스터가 이 링크들도 빼달라고 요청하거나 악의적 링크 텍스트 - 구글 폭탄 같은것 로 인해 피해가 온다고 요청하면 즉시 검색 엔진에서 빼줍니다. 웹마스터의 의견이 항상 우선입니다. 구글도 robots.txt 설치 외에 별도로 요청 시스템을 운영하는 것도 그렇습니다. 다만, 이 링크들만 가지고는 검색에서 별로 쓸모있는 데이터가 나오진 않을 가능성이 많고 그 양도 얼마 안되기 때문에 로봇에 비해서는 실제 문제는 적은 편으로 알려져 있습니다. 자세하게 언급하긴 어려우나 이런 링크를 자동 처리하는 과정이 느리게 돌아가는 이유도 그런 이유에서고요.

• 글쓴이: googleguy   • June 12, 2005 07:17 PM

부족한 글에 답글 달아 주셔서 감사합니다. 별로 아는 것도 많지 않고 크롤링은 전문이 아니라서 부족한 부분이 있을 수 있지만 중태님의 의문에 조금 더 부연을 하는게 도리인 것 같은 생각이 들어서 조금 더 적어보려고 합니다.

일단 robots.txt 는 포멧을 보시면 아시겠지만, 특정 사이트 전체 뿐 아니라 특정 세부 디렉토리까지 검색 허용 여부를 개별적으로 지정 가능하고, 어떤 회사의 검색 로봇에 대해서만 검색을 허용하거나 통제할 수도 있는 등의 강력한 기능을 보유하고 있는 데이터 파일입니다.
물론 구글 등 몇몇 엔진에서는 이것과 동시에 각 문서별로 META 태그를 이용해서 제외하는 방법도 동시에 지원합니다만. META는 특정 문서 하나만 제외 가능한 등 한정적인데 반해, robots.txt 표준은 인터넷 초기인 1994년경에 제정되었고 W3C에서도 권장하기에 대부분의 검색 엔진이 이를 따르고 있으며, 기능에 있어서도 웹마스터가 모든 파일을 고치지 않고도 광범위한 범위를 쉽게 지정할 수 있다는 것이 특징입니다.

돌아가서, 보통 로봇이 한 사이트에 크롤링(긁어오기)을 시도할 경우 제일 먼저 그 웹 서버 루트에 있는 /robots.txt를 먼저 확인하게 됩니다. 세부 디렉토리에 있는 문서를 크롤링한다고 해도 일단은 루트 디렉토리의 robots.txt를 먼저 확인하는게 관례입니다. 왜냐면 이 서버가 어떤 크롤 정책을 가지고 있는지 먼저 확인해야 불상사를 막을 수 있으니까요. (불상사에 대해서는 뒤에 설명하겠습니다.)
참고로 표준에 의거해 서브 디렉토리에 있는 robots.txt는 모두 무시됩니다. robots.txt는 서버에 대한 전체적 크롤 정책 표시이기에 루트에 있는 robots.txt만이 의미를 갖게됩니다. 중태님의 사이트의 경우에는 www.dal.co.kr/robots.txt 만이 의미를 갖습니다. 참고로 서버가 멀티 서버인 경우에는 모든 서버에 설정해야 합니다. 서버중 한대에서 실수로 빼먹는 경우에는 크롤의 대상이 될 수도 있습니다. 의외로 서버 업그래이드 등의 작업 도중에 이를 빼먹어서 일부가 검색에 노출되었다가 나중에 삭제 요청을 하는 경우 등이 있다고 합니다.

물론 요즘 현대적인 검색 엔진들은 크롤링에 사용되는 로봇 서버들이 워낙에 많기 때문에 한번에 여러 로봇이 같은 서버에 크롤을 시도할 수 있습니다. 요즘의 일부 서버들은 그래픽 등을 이용해 파일을 찾을 수 없다는 404 에러 페이지 등을 구성하는 경우도 있습니다. 그래서 이 경우에 불필요한 트래픽이 발생할 수 있으므로 robots.txt 의 설정 여부만을 주기적으로 검사해 다른 서버들에게 알리는 별도의 로봇이나 프로세스를 두는 엔진도 있습니다. 물론 이 과정에서 여러가지 오류가 있을 수 있습니다만. 이건 엔지니어의 과제이기도 합니다.

그 다음에 이 파일을 읽어들여 이 파일에 지정한 내용에 따라서 크롤 전략을 마련합니다. 즉 내가 이 서버에서 블랙 리스트에 올라있는 크롤러인가. 이 서버에서 이 주소를 크롤해도 이 서버의 크롤 정책에 문제가 되는 부분이 생기는가 등을 검토합니다. 다시 한번 강조하는 것 같습니다만, 좋은 검색 결과를 내고 싶은 욕심도 중요하지만, 그 전에 우리에게 정보를 제공하는 웹마스터의 입장이 인터넷에서는 최우선으로 중요합니다.

그렇게 해서 크롤 전략에 부합한다고 하면, 해당 문서를 크롤해오고, 그 다음에 저장 과정에서 META를 확인해서 그래도 크롤할 수 있는 문서인지 확인하고, 그런 경우에 대해서만 저장하는 등의 복합적인 기계적 과정을 거치게 됩니다. 그리고 이미 저장된 문서에 대해서도 주기적으로 robots.txt 등을 반복 확인하고 웹마스터 등으로 부터 크레임이 접수되었는지 확인함으로써 이 문서를 내가 저장한다는 행위 자체가 폐를 끼치지 않는지를 검증합니다. 제가 가지고 있는 이 문서는 제 것이 아니라 서버로 부터 잠시 빌려온 것일 뿐이니까요. 문서를 제공한 서버 주인이 돌려달라면 즉시 돌려줘야합니다.

그런데, 그렇게 외견 문제 없이 크롤을 했다고 해도 문제는 여전히 남습니다. 즉, 보통은 그 사이트의 모든 링크를 따라가는 일은 하지 않는 것입니다. 특히 CGI로 구성된 사이트 (쉽게 설명하면 URL에 ? 나 php 등 파라미터가 붙어있는 사이트를 말합니다.) 는 이렇게 모두가 크롤 가능이라고 되어 있다고 해도 크롤을 의도적으로 자제합니다. 왜냐면 서버에 따라서 치명적인 악영향을 줄 우려가 있기 때문입니다. 앞서서 불상사에 대해서 잠시 말씀을 드렸는데요. 이것과 밀접한 관련이 있습니다.

즉, 로봇이 문서를 크롤해오는 행위 자체는 기계적으로 모든 페이지의 링크를 클릭하는 것과 같은 행위입니다. 따라서 해당 문서를 읽어오기 위해 요청을 하면, 그 서버는 방문자가 온 것으로 판단하고 움직입니다. 이때 DB 등에 연결된 서버들은 DB에서 데이터를 불러오거나 소정의 동작을 수행하는 등의 일을 하게 되는데, 이러다보니 단순한 문서의 클릭 보다도 서버에 많은 부담을 줍니다. 그런데 로봇은 기계이기 때문에 피로를 느끼지 않고 엄청난 속도로 링크를 읽어오려고 합니다. 특히 현대적인 검색 엔진들은 굉장히 많은 서버를 보유하고 있기 때문에 동시에 엄청난 수의 접속이 일어날 수도 있습니다. 따라서, 아무리 크롤을 허용한다고 해도 아무리 큰 서버 용량을 가지고 있다고 해도 로봇이 제대로 제어되지 않는다면 DoS 공격 처럼 상대방의 서버는 쉽게 다운될 수 있습니다. 참고로, 같은 사이트라고 해도 이 크롤 범위를 늘리면 전체 검색 가능 문서의 수는 아주 쉽게 늘릴 수 있습니다. 검색 엔진에게는 매력적인 유혹인 셈이지만, 일종의 악마의 유혹 같은 것이랄까요. 개인적으로는 이젠 문서 수를 가지고 검색 엔진의 성능을 평가해서는 안된다고 생각합니다. 실상은 너무도 쉽게 늘릴 수 있으니까요.

또한, 일부 서버는 CGI를 통해서 문서 삭제나 메일 보내기, 트랙백 보내기 등의 고급 기능을 수행하는 경우도 있습니다. 따라서 로봇이 잘못 방문하여 해당 링크를 클릭하는 경우에는 사이트 운영자체가 마비될 수도 있습니다. 그리고 웹마스터 입장에서는 로봇이라고 하더라도 방문자가 생기기 때문에 운영에 혼란이 올 소지가 있습니다.

따라서 크롤을 허용한다고 해도 상식적인 로봇은 많은 페이지를, 그 사이트를 통째로 복사하듯 크롤하지 않습니다. 물론 한 사이트를 다 크롤해올 수도 있다고 robots.txt 등을 통해 알 수 있는 것도 있지만, 실수로 설정하지 않은 경우도 많아, 그 웹마스터의 실제 운영 입장도 배려되어야 하기 때문입니다. 아무튼 크롤을 많이 하면 보다 좋은 품질이 되지만, 그렇다고 크롤을 덜 하는 엔진을 비난할 수도 없습니다. 그만큼 펄러시를 지킨다는 의미기 때문이지요.

끝으로, 왜 웹마스터가 중요한가에 대해서 조금 부연해보려고 합니다. 여러분이 공기처럼 생각하는 인터넷도 사실 그 인터넷에 정보를 올리는데 있어서 웹마스터가 있고 서버가 있기 때문에 존재할 수 있습니다. 아무리 올라와 있는 정보가 중요하다고 하지만, 이를 태워보내는 서버가 없다면 정보는 존재할 수가 없습니다.닷컴 버블이 꺼져가던 때, 우리는 많은 서비스의 폐쇄를 그저 지켜보아야 했습니다. 그 서버에 올라와 있던 많은 정보들은 소중하고 가치있는 것이었고 그 서비스에 들인 이용자나 웹마스터 자신의 노력 역시 컸지만, 운영을 하지 못해 이것이 이렇게 사라지는 것을 모두가 그저 아쉬워할 수 밖에 없었습니다.

따라서, 인터넷의 정보를 검색하는 검색 엔진 역시도 그들이 원하는 고객을 만날 수 있게 하고, 더 성장할 수 있도록 도와주지만, 한편으로 그들의 서버와 서비스가 우리로 인해서 문제가 생기고 단순히 기계적인 로봇에게 페이지를 주기 위해서 불필요한 투자를 하지 않게 소중하게 지켜줘야할 책임도 가지고 있는 것입니다. 인터넷은 로봇이 돌아다니기 위해서 만든 공간이 아니라 사람들과 정보가 돌아다니기 위해서 만든 공간이기 때문입니다.

그래서 robots.txt 등의 다양한 수단이 인터넷 초기부터 제안되서 빛을 발휘하는 것이고, 어떤 경우에도 꼭 지켜주어야 하는 기본적 규칙인 이유가 여기에 있습니다.
아무튼, 자전거의 두 바퀴 처럼 운영자와 이용자는 서로 어느 한 쪽의 입장만을 들을 수는 없는 공생 공유의 관계에 있습니다. 감히 이용자 여러분께 말씀을 드리자면, 여러분이 어떤 서비스를 즐겁게 이용하는 만큼 그 서비스의 운영자에게도 박수와 격려를 보내주셨으면 합니다. 이것은 그 서비스가 불법 와레즈 사이트이건, 합법적 사이트이건 변하지 않는 인터넷의 기본적인 중요한 가치입니다. 검색 엔진 역시 검색을 허락하건 안하던 수 많은 웹마스터들이 있기에 여기에 존재할 수 있습니다.

글쓴이: googleguy   • June 13, 2005 12:26 AM

'Memo' 카테고리의 다른 글

Reputation  (1) 2006.05.18
진짜 프로그래머와 가짜 프로그래머  (5) 2006.05.18
summary of Blogging  (0) 2006.05.17
데이콤 웹하드 이미지 링크  (2) 2006.05.17
태터툴즈, 다음과 가입형 블로그 서비스 공급  (1) 2006.05.17