Julie의 Tech 블로그

검색 엔진의 구조와 이해 본문

Tech

검색 엔진의 구조와 이해

Julie's tech 2022. 1. 22. 17:15
728x90

우리는 주로 인터넷을 통해 정보를 얻는다. 하지만 정보의 보고인 인터넷에서 원하는 정보만을 얻기는 어렵다.

우리는 이 과정에서 검색엔진의 도움을 받는다.

검색엔진은 사용자의 원하는 정보를 제공하기 위해 인터넷에 있는 데이터를 적절히 선별하여, 그 결과를 적절성에 따라 정렬하여 보여준다.

이 과정을 좀 더 다듬어 정리하면 아래와 같다 :

1) 크롤링(Crawling), 2) 인덱싱(Indexing), 3) 추출(Searching)

크롤링은 웹 로봇이 웹 페이지의 복사본을 만들어 웹 마다 어떤 정보가 담겨있는지를 파악하기 위해 저장하는 과정이다.

웹 로봇은 최초 페이지(아마 당시의 가장 인기 있고 접근이 많은 웹 페이지)에서 해당 페이지에 하이퍼링크로 걸려있는 다른 웹 페이즈들을 재귀적으로 방문하면서 페이지를 저장하게 된다.

우리가 웹 페이지를 만들게 되면, 서버에 robots.txt 파일을 만들어 웹 로봇에 대한 접근 제어를 할 수 있다.

예를 들어 흔한 인터넷 쇼핑몰 사이트의 경우, 나의 상품이 가격 비교 사이트에 올라가길 원치 않는 경우 상품 페이지에 대해 웹 크롤러의 접근을 제한할 수 있다. (User-agent 로 웹 크롤러의 이름을 적고, Disallow 항목에 상품상세 페이지 경로를 지정한다.)

반대로 내 사이트가 다양한 포털 사이트를 통해 홍보가 되길 원한다면, 웹 크롤러가 접근할 수 있도록 robots.txt 를 만들어 오픈해준다.

이와 관련된 좀 더 상세한 정보는 SEO(Search Engine Optimization) 에서 찾을 수 있을 것이다.

 

이처럼 웹 크롤러가 HTTP Get 메서드를 통해 HTML 파일 정보들을 모두 모아다 저장하게 되면,

이 정보에 대해 빠르게 접근할 수 있도록, 쉽게 말해 '정리'하는 과정을 거치게 된다.

즉 데이터를 모았으니 데이터를 사용할 수 있도록 가공하는 과정인 것이다.

이를 인덱싱이라고 부른다. 색인을 만드는 과정이다.

검색 엔진 시스템은 하나의 웹 페이지 안에 있는 모든 단어를 분류하여 해당 단어 색인 별로 웹 페이지를 저장해둔다.

이러한 색인 결과를 사용자가 보내는 input인 검색 키워드 별로 매핑해주어야한다.

이를 위해서는 가장 기본적으로 키워드와 매칭되는 정확도에 따라 결과를 보여주어야 할 것이다.

하지만 우리가 검색 엔진을 통해 검색하는 내용을 보면, 상황에 따라 검색하는 내용이 달라진다.

방법론에 대해 궁금할 수도 있고, 단순히 그 단어의 의미를 찾을 때도 있으며, 그 단어와 연관된 무언가를 찾을 때도 있다.

이러한 상황을 고려하여 검색 결과를 뿌려줄 수 있도록 검색 엔진은 고도화된다.

구글은 지식 그래프라는 알고리즘을 사용하여 검색어를 보여준다.

네트워크 그래프를 만들어 노드에는 키워드, 엣지에는 두 노드 간의 연관도를 표현한다.

예를 들어 특정 A라는 영화가 있으면, A라는 영화의 감독진, 제작진, 배우, 상영기간, 후기 등을 네트워크 그래프로 표현하는 것이다.

이를 통해 좀 더 검색어와 연관된 정보를 표현할 수 있는 것이다.

이 외에도 검색자의 위치, 검색어와의 정확도, 검색어와의 관련성, 출처의 신뢰성 등 여러 지표를 산출하여 가중치를 부여한뒤, 최종 값에 따라 랭킹을 매겨 검색 결과를 보여주게 된다.

이러한 지표를 산출하는 로직과, 지표들 간의 가중치를 부여하는 방식은 검색 엔진의 노하우일 것이다.

검색어를 시스템이 이해하기 위해서는 자연어 처리 과정도 필요하다. NLP 계열 알고리즘을 이용하여 검색어의 의미를 해석한다.

사용자가 검색한 내용이 구체적인지, 혹은 광범위한 개념인지를 파악하고, 사용자가 최신 정보를 필요로 하고 있는지,

검색한 키워드에서 정보를 필요로하는 '후기', 혹은 '방법'과 같은 단어가 포함되어 있는지를 파악하는 등의 과정도 포함된다.

또한 사용자가 오타를 발생했을 경우도 처리해주어야한다.

색인된 결과에서 관련성을 추출할 때는 검색어가 제목 혹은 본문에 포함되어 있는지, 포함 되어 있다면 얼마나 언급되는지 등을 파악한다.

제목에 포함되어 있을 수록 그 검색어와 관련성이 높다는 것이기 때문이다.

빈도성을 체크할 때는 단순히 단어가 많이 언급되는 것 외에도 연관 개념에 대한 내용도 함께 포함되어 있는지 확인하게 된다.

예를 들어 '개'라는 단어를 검색하면, '개' 가 많이 언급되는지 외에 '품종'이나 '사료'와 같은 연관 개념도 포함되어 있는지 확인한다.

사용자가 검색 결과에 대해 최적화된 경험을 겪게끔 하기 위해 검색 결과에 대해서도 웹사이트의 품질을 따지게 된다.

예를 들어 사용자가 접근한 화면이 태블릿이라면, 그 태블릿 화면에 맞게 적절하게 웹사이트가 구성되어 있는지,

혹은 사용자가 페이지에 접근했을 때 바로 원하는 페이지를 로딩해줄 수 있는 속도가 되는지가 해당한다.

이처럼 우리는 검색 엔진을 늘 일상 속에서 사용하고 있지만, 구체적으로 어떻게 동작하는 지에 대해서는 고민해본 적이 많이 없다.

이 글을 통해 검색 엔진의 개요와 구조를 대략적으로 이해하는데 도움이 되었음 한다.

반응형