검색 엔진(Search Engine)
검색 엔진의 목적은 딱 한 가지이다. 쿼리/키워드에 가장 적합한 결과물을 사용자에게 제공해주는 것.
검색 엔진은 프로그램을 가리키는 것이고, 그 프로그램을 제공하는 사이트를 검색 사이트라고 한다. 웹의 정보를 긁어오는 소프트웨어는 크롤러라고 하고, 그 행위는 크롤링이라고 부른다.
어떤 검색 엔진들은 FTP 서버나 웹 사이트의 파일 검색 결과를 포함하며, 이미지나 토렌트 파일 또는 특정 부류의 웹사이트에 특화된 웹 검색 엔진도 있다.
크롤링이란
웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위다. 크롤링하는 소프트웨어는 크롤러(crawler)라고 부른다. 검색 엔진에서도 유사한 것을 필수적으로 사용하는데, 웹 상의 다양한 정보를 자동으로 검색하고 색인하기 위해 사용한다. 이 때는 스파이더(spider), 봇(bot), 지능 에이전트라고도 한다. 사람들이 일일이 해당 사이트의 정보를 검색하는 것이 아니라 컴퓨터 프로그램의 미리 입력된 방식에 따라 끊임없이 새로운 웹 페이지를 찾아 종합하고, 찾은 결과를 이용해 또 새로운 정보를 찾아 색인을 추가하는 작업을 반복 수행한다. 그러니까, 우리가 검색 사이트에서 검색할 때는 실제로 웹을 검색하는 것이 아니다. 검색 사이트의 웹 색인을 검색하는 것이다. 검색 엔진은 사용자가 검색하기도 전에 검색 색인에 웹페이지에 관한 정보를 구성한다. 이 과정이 없으면 검색 결과를 얻기까지 엄청난 시간이 소요된다. 검색 엔진은 최대한 많은 웹을 색인으로 생성하기 위해 노력한다. 방대한 자료를 검색하는 특징은 있으나 로봇의 검색 기능을 역이용하여 순위를 조작하거나 검색을 피할 수 있는 단점도 있다. 네이버, 구글 등도 이런 봇을 이용해 운영된다.
검색 엔진의 원리
검색 엔진은 다음과 같은 순서로 동작한다.
- 인터넷상의 수많은 문서들을 수집해야 하고(문서 수집/크롤링)
- 수집한 데이터를 검색엔진이 사용하기 쉽게끔 정리 및 분류하여 검색엔진 데이터베이스에 저장해둔다. (색인/인덱싱)
- 그리고 사용자가 검색어를 입력했을때 색인해둔 데이터를 사용해 입력된 검색어에 가장 적합한 문서들을 사용자에게 가져다 준다.(검색 키워드 처리)
1. 문서 수집/크롤링
검색 엔진은 HTML로 되어있는 웹페이지에서 추출한 텍스트를 축적하여 동작한다. 이 페이지들은 웹사이트의 모든 링크를 따라다니면서 문서를 모으는 문서수집기(웹 크롤러, 이전에는 웹 스파이더)가 추출한다. 모은 문서는 검색엔진 서버로 보내진다. 만약 사이트에 연결된 링크가 없다면 크롤러 입장에서는 찾기 힘든 사이트가 된다. 문서 수집 작업은 단순하고 무작위적인 문서의 수집일 뿐 이게 검색 결과에 영향을 미치지는 않는다.
크롤러는 공개되어있는 사이트/문서만 수집할 수 있다. 로봇 규약에 따라 수집금지된 곳은 예외처리된다. 크롤러에 대한 사이트/문서의 공개 여부는 사이트의 robot.txt 파일을 이용해서 설정할 수 있다.
2. 색인/인덱싱
개별 페이지의 내용은 색인을 위해 분석된다. 각 단어와 문구(쿼리)에 가중치(weight)와 연관도(relevance)를 부여 하고 최종 결과 값을 인덱스(색인)한다. 예를 들어 문서 제목, 페이지 내용, 목차, 기타 등등으로 영역을 나누어 추출하고 분석한다. 이후 검색어가 들어올 것을 대비해 이 웹페이지 데이터는 DB에 적절히 색인된다. 색인은 정보를 최대한 빨리 찾을 수 있도록 돕는다.
3. 검색 키워드 처리
사용자가 검색엔진에 검색어를 넣으면 엔진은 색인을 조사, 평가해서 가장 잘 맞는 문서를 내놓는다. 보통 문서 제목 및 검색어가 담겨있는 본문을 추출하여 짧은 요약을 생성해 함께 보여준다.
대략적인 조사/평가 기준은 다음과 같다.
- 해당 페이지가 검색어를 몇 번 포함하는지
- 그 검색어가 나오는 곳이 제목인지, URL인지, 페이지의 검색어에 동의어가 나오는지
- 해당 페이지가 양질의 웹사이트인지, 아니면 스팸인 페이지인지
이런 요소를 조합하여 각 페이지의 전반적인 평점을 매기고 이에 따라 검색결과를 내보내게 된다. (구글 기준… 더 자세한 것은 이 문서 참고)
많은 검색엔진은 검색어를 좀 더 한정짓기 위해 and, or, not과 같은 논리연산자를 지원한다. 논리연산자는 ‘이고’, ‘혹은’, ‘아닌’이라는 말 그대로의 한정기능을 제공한다. 그 엔진은 입력된 단어들이나 구를 있는 그대로 검색해준다. 몇몇 검색엔진은 인접검색 기능을 제공하기도 하는데 이는 검색어 사이의 거리까지 고려해 검색하는 것이다.
많은 검색엔진은 가장 좋은 문서를 상위에 올리기 위해 정렬방법을 고민한다. 어떻게 문서를 찾아낼 것인가와 어떤 순서로 문서를 정렬해 보여줄 것인가는 검색엔진에 따라 천차만별이다. 이 방법도 인터넷 사용 유형과 기술 발전에 따라 계속 변해왔다.