검색이 갑자기 궁금해진 당신에게
검색 기능은 웹, 앱서비스에서 가장 중요한 요소 중 하나이다. 하다못해 사이드 프로젝트에서도 그놈의 돋보기는 빠지지 않는다. 이 글은 내가 검색 기획에 잠깐 관심이 생겼을 때 스터디했던 내용을 정리한 것으로, 검색 UX, 매개변수의 개념, 데이터베이스 검색과 검색 엔진의 차이, 그리고 검색 엔진 알고리즘이 처리되는 방식을 문외한 수준에서 매우 간단히 설명한다.
많은 시니어 서비스 기획자 분들이 온라인에 양질의 글을 남겨줌으로써 나 또한 급작스럽게 쉽게 공부할 수 있었고, 검색과 데이터 처리에 관심이 생긴 분들에게 유용한 참고 자료가 되길 바라는 마음으로 노션에서 블로그로 옮겨쓴다.
매개변수란?
"XX = OO” XX가 매개 , OO가 변수
여기서 XX는 매개변수(parameter), OO는 그에 대응하는 값(value)을 의미한다. 파라미터(매개변수)는 한 번에 여러 개를 포함할 수 있으며, 각 파라미터는 "&" 기호로 구분된다. 예를 들어, 네이버에서 '셔츠'와 '바지'를 검색했다고 가정해보자. URL은 아래와 같이 구성되며, 총 4개의 파라미터가 포함되어 있다.
[네이버에서 "셔츠"를 검색]
https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=셔츠
[네이버에서 "바지"를 검색]
https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=바지
여기서 query는 데이터베이스에서 정보 검색을 위해 요청하는 키워드를 나타낸다. 우리는 데이터베이스에 '셔츠'를 요청했기 때문에, query=셔츠로 URL이 구성된 것을 확인할 수 있다.
DB검색과 검색엔진
검색 기능을 붙이는 방법에는 크게 DB검색과 검색엔진이 있다.
DB검색은 상대적으로 간단한 구조를 가지며, SQL 같은 쿼리 언어를 사용한다. 특정 데이터에 대한 빠르고 정확한 조회를 하는 데 적합하며, 쿼리 최적화 및 인덱스 설정 등에 인력이 들어간다. 반면, 검색 엔진은 복잡한 구조를 가지고 있으나, 상용 솔루션 형태로 제공되기 때문에 오히려 접근이 쉽다. 검색엔진은 대규모 데이터를 처리하는 데 적합하며, 사용량에 따라 비용이 청구된다. (본인이 엔진이 만들 것이 아니라면 말이다...직접 검색 엔진을 개발하는 경우라면 높은 기술적 요구사항이 따른다.)
그 중 제일 유명한 솔루션으로는 Elastic Search(엘라스틱 서치), Algolia(알고리아), Apache Solr(아파치솔라)가 있다. 이 중 엘라스틱서치와 아파치솔라는 오픈소스 검색엔진으로 사용자 커뮤니티가 매우 활성화 되어있다.
검색 엔진을 활용해 검색이 이루어지는 과정
해당 글을 참고하여 작성하였다. 예를 들어, Apple Juice라는 단어를 검색하고 싶다고 가정해보자. 해당 단어가 검색 엔진에서 처리되는 과정을 아주 간략히 요약하면 다음과 같다.
1. 사용자가 쿼리를 입력
Apple Juice라는 검색어를 인터페이스를 통해 입력한다.
2. 서버로 쿼리 전송
Apple Juice가 검색 엔진 서버로 전송됩니다. 이때 HTTP 요청 등을 통해서 검색 엔진과 통신이 이루어진다.
3. 검색 엔진 서버 처리
검색 엔진 서버는 Apple Juice를 받고, 이를 처리하기 위해 검색 알고리즘에 따라 검색을 시작한다. 여기서의 검색 알고리즘을 바로 다음 단원에서 이어서 설명하고자 한다.
4. 검색 결과 제공
Apple Juice에 대한 검색 결과 중 사용자의 목적에 맞는 가장 적합한 결과를 순차적으로 보여준다.
검색 알고리즘이 필요한 이유
입력한 검색어가 완벽히 포함되는 문서를 찾는다면, 원하는 대로 검색결과가 나오지 않을 확률이 매우 높다. 즉, 사용자가 의도한 검색결과로 이어지지 않는다는 뜻이다. 가령 예시는 아래와 같다.
- Apple Juice 를 검색했을 때, red apple and orange juice 는 검색되지 않는다. (의미 확장)
- 서울시를 검색했을 때, 서울특별시는 검색되지 않는다. (의미 확장)
- Apple Juiec 를 검색했을 때, Apple Juice는 검색되지 않는다. (오탈자)
- 김포시장애인체육회를 검색했을 때, 김포 시장 애인 육회가 검색된다. (형태소 분석)
따라서, 입력한 검색어를 처리하기 앞서서 텍스트 전처리 과정이 필요한데, 안타깝게도 한국어는 이 과정이 복잡한 언어에 해당된다.