본문 바로가기

Backend Study/ELK Stack

검색 시스템 이해하기

이번에 대학교 선배가 운영하는 앱의 검색 엔진 개발을 부탁받게되었다. 수목원 프로젝트에서도 검색 엔진을 우리 회사에서 개발했는데, 내 담당부분이 아니라서 직접적으로 다뤄볼 기회가 없었다.

프로젝트 개발도 해야하고 담당자분에 퇴사 예정에  있어 유지보수를 내가 할 예정이라 차근차근 공부해보려고 한다!

Start!

1. 검색 시스템이란?

용어 정리

검색 엔진: 광활한 웹에서 정보를 수집해 검색 결과를 제공하는 프로그램, 검색 결과로 제공되는 데이터의 특성에 따라 구현 형태가 달라진다.

검색 시스템: 대용량 데이터를 기반으로 신뢰성 있는 검색 결과를 제공하기 위해 검색 엔진을 기반으로 구축된 시스템. 내부의 정책에 따라 관련도가 높은 문서를 검색 결과의 상위에 배치할 수 있다.

검색 서비스: 검색 결과를 서비스로 제공.

 

1.1.2 검색 시스템의 구성 요소

수집기: 웹 사이트, 블로그, 크페 등 웹에서 필요한 정보를 수집하는 프로그램. 파일, 데이터베이스, 웹 페이지 등 웹상의 대부분 정보가 수집 대상임.

스토리지: 데이터베이스에서 데이터를 저장하는 물리적 저장소, 검색 엔진은 색인한 데이터를 스토리지에 보관함. 

DB와 차이점이 뭘까?

색인기: 검색 엔진이 수집한 정보에서 사용자 질의와 일치하는 정보를 찾으려면 수집된 데이터를 검색 가능한 구조로 가공하고 저장해야한다. 이 역할을 해줌. 

검색기: 사용자의 질의를 입력받아 색인기에 저장한 역색인 구조에서 일치하는 문서를 찾아 결과로 반환. 질의와 문서가 일치하는지는 유사도 기반의 검색 순위 알고리즘으로 판단함. 검색기도 색인기와 마찬가지로 형태소 분석기를 이용해 사용자 질의에서 유의미한 용어를 추출하여 검색한다.

 

1.1.2 관계형 데이터베이스와의 차이점 

sql 문을 이용해 원하는 정보의 검색은 가능한데 텍스트 매칭을 통한 단순한 검색만 가능하다. 텍스트를 여러 단어로 변형하거나 여러 개의 동의어나 유의어를 활용한 검색은 불가능하다. 

반면 검색엔진은 데이터베이스에서는 불가능한 비정형 데이터를 색인하고 검색할 수 있다. 형태소 분석을 통해 사람이 구사하는 자연어의 처리가 가능하고 역색인 구조를 바탕으로 빠른 검색을 보장한다.

 

엘라스틱서치는 하나의 행을 문서라고 부르며, 해당 문서는 데이터베이스 테이블의 한 행을 의미한다.

 

엘라스틱서치에서 사용하는 HTTP 메서드

GET: 데이터 조회

PUT: 데이터 생성

POST: 인덱스 업데이트

DELETE: 데이터 삭제

HEAD: 인덱스의 정보 확인

 

엘라스틱서치를 사용하기 위한 간단한 API 요청 구조

curl -X (메서드) http://host:port/(인덱스)/(타입)/(문서 id) -d'{json 데이터}'

 

 

데이터베이스에서 

SELECT * FROM USER WHERE Name like '%가마돈%'

 

엘라스틱 서치에서 

GET http://localhost:9200/user/_search?q=Name:가마돈

 

같은 결과가 나올 수 있지만, 영어로 검색할 경우 달라질 수 있다.
엘라스틱서치는 조금 더 유연하다. 역색인되는 문자열 전체를 정책에 따라 소문자 혹은 대문자로 생성하고 쿼리가 들어오는 필터를 색인 시간과 검색 시간에 동일하게 지정한다면 해당하는 쿼리에 어떠한 문자열이 들어와도 검색이 가능해진다.

 

+ 데이터베이스는 스키마를 미리 정의해야만 데이터 저장과 조회가 가능한 반면 엘라스틱서치는 구조화되지않은 데이터까지 스스로 분석해 자동으로 필드를 생성하고 저장한다.

 

1.2.1 엘라스틱 서치의 장점

전문검색 : 내용 전체를 색인해서 특정 단어가 포함된 문서를 검색하는 것을 말한다. 다양한 기능별, 언어별 플러그인을 조합해 빠르게 검색할 수 있다.

스키마리스: 정형화되지 않은 다양한 형태의 문서도 자동으로 색인하고 검색할 수 있다.

역색인: 종이책의 마지막 페이지에서 제공하는 색인 페이지와 비슷하게 제공되는 특수한 데이터 구조이며, 해당 단어만 찾으면 단어가 포함된 모든 문서의 위치를 알 수 있기 때문에 빠르게 찾을 수 있다.

 

1.2.2 엘라스틱 서치의 단점

실시간이 아니다.

트랜잭션과 롤백 기능을 제공하지 않는다. (데이터 손실 위험)

데이터의 업데이트를 지원하지 않는다. (삭제 후 문서 생성)

 

 

'Backend Study > ELK Stack' 카테고리의 다른 글

엘라스틱서치 키바나로 스냅샷 생성하기  (0) 2023.01.24
4. 데이터 검색  (0) 2023.01.24
3.4 엘라스틱서치 분석기  (0) 2023.01.22
3. 데이터 모델링  (0) 2023.01.22
02. 엘라스틱서치 살펴보기  (0) 2023.01.12