웹 크롤러(Web Crawler)는 어떻게 인터넷을 돌아다닐까?
부스트키워드 팀
검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.
구글이나 네이버에서 검색을 하면 결과가 순식간에 나타납니다. 그런데 생각해보면 신기한 일입니다. 인터넷에는 매일 수백만 개의 새로운 페이지가 생겨나는데, 검색엔진은 어떻게 이 방대한 웹페이지들을 미리 다 파악하고 있는 걸까요? 그 답은 웹 크롤러(Web Crawler)라는 프로그램에 있습니다. 이 글에서는 웹 크롤러가 무엇이고, 실제로 어떤 순서와 규칙으로 인터넷을 돌아다니는지 예제와 함께 살펴봅니다.
검색엔진은 미리 웹페이지를 '알고' 있어야 한다
검색할 때마다 실시간으로 인터넷을 뒤진다면 생기는 문제
만약 검색엔진이 사용자가 검색어를 입력할 때마다 그 순간 실시간으로 전 세계 웹사이트를 하나하나 방문해서 확인한다면 어떻게 될까요? 웹사이트 하나를 불러오는 데만도 어느 정도 시간이 걸리는데, 이를 수십억 개의 사이트에 대해 매번 반복한다면 검색 결과가 나오기까지 아마 몇 년이 걸려도 부족할 것입니다.
미리 수집해두고 색인화하는 방식이 필요한 이유
그래서 검색엔진은 사용자가 검색하기 훨씬 이전부터, 미리 인터넷을 돌아다니며 웹페이지들을 수집하고 그 내용을 정리해둡니다. 이렇게 미리 수집해둔 정보를 바탕으로 앞서 다룬 역색인 같은 구조를 만들어두면, 실제 검색이 들어왔을 때는 이미 정리된 데이터만 빠르게 찾아보면 되므로 결과를 즉시 보여줄 수 있습니다. 이 '미리 수집하는' 역할을 담당하는 것이 바로 웹 크롤러입니다.
웹 크롤러란 무엇인가
링크를 따라 자동으로 이동하며 페이지를 수집하는 프로그램
웹 크롤러는 사람이 마우스로 링크를 하나씩 클릭하며 웹사이트를 돌아다니는 것을, 프로그램이 자동으로 대신 수행하도록 만든 소프트웨어입니다. 하나의 웹페이지를 방문하면 그 안에 포함된 링크들을 모두 찾아내고, 그 링크가 가리키는 페이지들을 또다시 차례로 방문합니다. 이 과정을 쉬지 않고 반복하면서 웹 전체를 조금씩 넓혀가며 탐색합니다.
'거미(spider)'라고도 불리는 이유
웹 크롤러는 종종 '스파이더(spider, 거미)'라고도 불립니다. 거미가 거미줄을 타고 이곳저곳을 옮겨 다니듯, 크롤러도 웹페이지 사이를 연결하는 링크(웹이라는 이름 자체가 '거미줄'이라는 뜻입니다)를 타고 이동하며 웹 전체를 훑고 다니기 때문에 붙여진 별명입니다.
크롤러는 어떤 순서로 웹을 돌아다닐까
시작 페이지(seed URL)에서 출발하기
크롤러는 아무 페이지에서나 무작정 시작하지 않습니다. 미리 정해둔 몇 개의 시작 페이지(이를 시드 URL이라고 부릅니다)에서부터 탐색을 시작합니다. 이 시작 페이지들은 보통 이미 잘 알려져 있고 많은 링크를 포함하고 있는 대형 사이트들로 정해지는 경우가 많습니다.
페이지 안의 링크를 꺼내 방문할 목록(프론티어)에 추가하기
크롤러는 시작 페이지를 방문하면, 그 페이지 안에 있는 모든 링크를 찾아내 '앞으로 방문해야 할 페이지 목록'에 추가합니다. 이 목록을 흔히 프론티어(Frontier)라고 부릅니다. 크롤러는 이 목록에서 페이지를 하나씩 꺼내 방문하고, 방문할 때마다 또 새로운 링크를 발견해 목록에 계속 추가해나갑니다.
이미 방문한 페이지를 중복 방문하지 않는 방법
웹페이지들은 서로 복잡하게 얽혀 링크를 주고받기 때문에, 아무런 장치 없이 링크를 따라가기만 하면 같은 페이지를 여러 번 방문하게 될 위험이 큽니다. 그래서 크롤러는 이미 방문한 페이지의 주소를 별도로 기록해두고, 새로운 링크를 발견할 때마다 이 기록을 확인해서 이미 방문한 페이지라면 목록에 다시 추가하지 않도록 걸러냅니다.
간단한 예제로 이해하는 크롤링 과정
연결된 가상의 사이트 예시
다음과 같이 아주 작은 웹사이트 네 개가 서로 링크로 연결되어 있다고 가정해봅시다.
- 페이지 A: 페이지 B와 페이지 C로 링크가 걸려 있음
- 페이지 B: 페이지 D로 링크가 걸려 있음
- 페이지 C: 별도의 링크 없음
- 페이지 D: 다시 페이지 A로 링크가 걸려 있음
방문 순서가 어떻게 정해지는지 따라가 보기
크롤러가 페이지 A를 시드 URL로 삼아 탐색을 시작한다고 해봅시다. 먼저 페이지 A를 방문하고, 그 안에서 발견한 링크(B, C)를 방문할 목록에 추가합니다. 다음으로 목록에서 페이지 B를 꺼내 방문하고, 그 안에서 발견한 링크(D)를 목록에 추가합니다. 이어서 페이지 C를 방문하는데, 이 페이지에는 더 이상 새로운 링크가 없으므로 목록에 추가할 것이 없습니다. 마지막으로 페이지 D를 방문하는데, 이 페이지는 다시 페이지 A로 링크가 걸려 있습니다. 하지만 페이지 A는 이미 방문 기록에 남아 있으므로, 크롤러는 이를 다시 방문 목록에 추가하지 않고 넘어갑니다. 이렇게 해서 A, B, C, D 네 페이지를 중복 없이 한 번씩 모두 방문하고 탐색이 마무리됩니다. 실제 웹에서는 이 과정이 수십억 개의 페이지를 대상으로, 훨씬 복잡한 링크 구조 속에서 끊임없이 반복됩니다.
크롤러가 지켜야 할 규칙과 마주치는 문제들
robots.txt: 사이트가 크롤러에게 알려주는 접근 규칙
모든 웹사이트가 크롤러의 방문을 무조건 환영하는 것은 아닙니다. 그래서 웹사이트 운영자는 robots.txt라는 파일을 만들어, "이 폴더는 크롤러가 방문해도 되지만, 저 폴더는 방문하지 말아 달라"는 규칙을 명시할 수 있습니다. 신뢰할 수 있는 검색엔진의 크롤러들은 이 파일에 적힌 규칙을 확인하고 존중하며 탐색을 진행합니다.
같은 내용의 페이지를 중복으로 수집하지 않기
또 다른 문제는 완전히 다른 주소(URL)를 가지고 있지만 실제 내용은 거의 똑같은 페이지들이 인터넷에 매우 많다는 점입니다. 예를 들어 같은 상품 페이지가 주소 뒤에 붙는 옵션 값만 다르게 여러 개 존재하는 경우가 흔합니다. 크롤러는 이런 중복 페이지를 걸러내지 않으면 같은 내용을 반복해서 수집하느라 자원을 낭비하게 되므로, 페이지의 내용을 비교해 거의 동일한 페이지는 한 번만 수집하도록 하는 장치도 함께 갖추고 있습니다.
너무 자주 방문해서 서버에 부담을 주지 않도록 속도 조절하기
크롤러가 한 사이트를 짧은 시간 안에 지나치게 많이 방문하면, 그 사이트의 서버에 과도한 부담을 주어 정작 실제 사용자들이 사이트에 접속하기 어려워질 수 있습니다. 그래서 크롤러는 같은 사이트를 방문하는 속도를 적절히 조절하며, 서버에 부담을 주지 않는 범위 안에서 탐색을 진행하도록 설계되어 있습니다.
방대한 웹을 감당하기 위한 장치들
여러 대의 서버가 나누어 크롤링하는 분산 처리
전 세계 웹을 하나의 컴퓨터가 혼자서 모두 탐색하는 것은 사실상 불가능합니다. 그래서 실제 검색엔진은 수많은 서버를 동시에 가동해, 각 서버가 웹의 일부분씩을 나누어 병렬로 크롤링을 수행합니다.
새로운 페이지와 자주 바뀌는 페이지를 더 자주 방문하는 전략
또한 모든 페이지를 똑같은 주기로 다시 방문할 필요는 없습니다. 뉴스 사이트처럼 내용이 자주 바뀌는 페이지는 더 자주 방문해서 최신 정보를 반영하고, 오랫동안 내용이 바뀌지 않는 페이지는 상대적으로 드물게 재방문하는 방식으로 자원을 효율적으로 사용합니다.
크롤링과 SEO의 관계
내가 운영하는 웹사이트가 검색 결과에 나타나려면, 가장 먼저 검색엔진의 크롤러가 그 사이트를 방문해서 내용을 수집해야 합니다. 사이트 내부의 페이지들이 서로 링크로 잘 연결되어 있을수록, 그리고 다른 신뢰할 만한 사이트로부터 링크를 받을수록 크롤러가 내 사이트를 발견하고 방문할 가능성이 높아집니다. 이 때문에 사이트 구조를 명확하게 설계하고, 크롤러가 접근하기 쉬운 형태로 페이지를 구성하는 것이 검색엔진 최적화(SEO)의 기본이 됩니다.
정리하며
웹 크롤러는 링크를 따라 자동으로 웹페이지를 방문하며, 검색엔진이 검색 결과를 즉시 보여줄 수 있도록 미리 방대한 웹 정보를 수집해두는 역할을 합니다. 시드 URL에서 출발해 링크를 따라 이동하고, 중복 방문을 피하며, robots.txt 같은 규칙을 존중하고, 방대한 규모를 감당하기 위해 여러 서버로 나누어 작업하는 등 겉보기엔 단순해 보이는 이 작업 뒤에는 정교한 설계가 숨어 있습니다.
Q.내 웹사이트가 크롤링되고 있는지 어떻게 확인하나요?
Q.robots.txt로 크롤링을 막으면 검색에 아예 노출되지 않나요?
Q.크롤링과 인덱싱은 같은 개념인가요?
Written by

부스트키워드 팀
검색 데이터로 키워드의 검색량, 트렌드, 검색 의도를 파악하고 마케팅 의사결정을 돕는 도구 부스트키워드를 만듭니다.
