반응형

 

안녕들 하시죠!

이번시간에는 Elasticsearch에 대해 알아보겠습니다.

 

Elasticsearch

아파치 루씬을 기반으로 한 대표적인 검색엔진이다.

Java로 개발되었으며 역색인과 분산처리 등 기존 검색 기능의 한계를 극복하여 현재 다수의 기업에서 활용하려는 시도를 많이 하고있다.

 

검색 서비스 > 검색 시스템 > 검색 엔진

 

# 검색 엔진

광활한 웹에서 정보를 수집해 검색 결과를 제공하는 프로그램이다. (Elasticsearch)

 

 

# 검색 시스템  

대용량 데이터를 기반으로 신뢰성 있는 검색 결과를 제공하기 위해 검색엔진을 기반으로 구축된 시스템을 통칭하는 용어이다.

수집기를 이용해 방대한 데이터를 수집하고 이를 다수의 검색엔진을 이용해 색인하고 검색 결과를 UI로 제공한다.

 

# 검색 서비스

검색엔진을 기반으로 구축한 검색 시스템을 활용해 검색 결과를 서비스로 제공한다.

 

검색시스템의 구성요소

 

# 수집기

웹사이트, 블로그, 카페 등 웹에서 필요한 정보를 수집하는 프로그램이다.

 

# 스토리지

DB에서 데이터를 저장하는 물리적인 저장소.

검색엔진은 색인한 데이터를 스토리지에 보관한다.

 

# 색인기

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

색인기는 다양한 형태소 분석기를 조합해 정보에서 의미가 있는 용어를 추출하고 검색에 유리한 역색인 구조로 데이터를 저장한다.

 

# 검색기

검색기는 사용자 질의를 입력받아 색인기에서 저장한 역색인 구조에서 일치하는 문서를 찾아 결과로 반환한다.

질의와 문서가 일치하는지는 유사도 기반의 검색 순위 알고리즘으로 판단한다.

검색기 또한 색인기와 마찬가지로 형태소 분석기를 사용해 사용자 질의에서 유의미한 용어를 추출해 검색한다.

따라서 사용하는 형태소 분석기에 따라 품질이 달라진다.

 

 

 

 

엘라스틱서치와 관계형 데이터베이스 비교
엘라스틱서치 관계형 데이터베이스
index database
shard partition
type table
document row
field column
mapping schema
Query DSL SQL

 

추가, 검색, 삭제, 수정 기능 비교

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

기능 데이터베이스 질의 문법
GET 데이터 조회 SELECT
PUT 데이터 생성 INSERT
POST 인덱스 업데이트, 데이터 조회 UPDATE, SELECT
DELETE 데이터 삭제 DELETE
HEAD 인덱스의 정보 확인 -
엘라스틱서치 장점

 

# 엘라스틱서치는 유연하다

역색인되는 문자열 전체를 정책에 따라 소문자 혹은 대문자로 생성하고 쿼리가 들어오는 필터를 색인 시간과 검색 시간에 동일하게 지정한다면 해당하는 쿼리에 어떠한 문자열이 들어와도 검색이 가능해진다.

 

# 구조화되지 않은 비정형 데이터도 검색이 가능하다.

 

# 오픈소스 검색엔진

루씬 기반으로 개발된 오픈소스 검색엔진, 버그의 빠른 수정.

 

# 전문 검색 (Full Text) 검색이 가능하다.

내용 전체를 색인해서 특정 단어가 포함된 문서를 검색한다.

 

# 통계 분석

비정형 로그 데이터를 수집하고 한곳에 모아 통계분석이 가능하고 키바나를 통해 신시간으로 쌓이는 로그를 시각화하고 분석할 수 있다.

 

# 스키마리스

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

 

# RESTful API

HTTP 기반의 RESTful API를 지원하기 떄문에 요청뿐 아니라 응답에도 JSON 형식을 사용해 플랫폼에 종속되지 않고 사용이 가능하다.

  

# 멀티테넌시

서로 상이한 인덱스일지라도 검색할 필드명만 같으면 여러 개의 인덱스를 한번에 조회할 수 있다.

 

# Document-Oriented

여러 계층의 데이터를 JSON 형식의 구조화된 문서로 인덱스에 저장할 수 있다.

계층 구조로 문서도 한번의 쿼리로 쉽게 조회할 수 있다.

 

# 역색인

예를 들어 검색엔진이란 단어가 포함된 모든 문서를 찾아야 한다고 하자.

일반적으로는 처음부터 끝까지 모든 문서를 읽어야만 원하는 결과를 얻을 수 있다.

하지만 역색인 구조는 해당 단어만 찾으면 단어가 포함된 모든 문서의 위치를 알 수 있기 때문에 빠르게 찾을 수 있다.

 

# 확장성과 가용성

엘라스틱서치를 분산 구성해서 확장한다면 대량의 문서를 좀 더 효율적으로 처리할 수 있다.

분산환경에서 데이터는 샤드라는 작은 단위로 나뉘어 제공되며, 인덱스를 만들 때마다 샤드의 수를 조절할 수 있다.

이를 통해 데이터의 종류와 성격에 따라 데이터를 분산해서 빠르게 처리가 가능하다.

 

엘라스틱서치 단점

# 준 실시간

내부적으로 커밋과 플러시 같은 복잡한 과정 때문에 1초정도의 딜레이가 있다.

 

# 트랜잭션과 롤백 기능을 제공하지 않는다.

 

# 데이터의 업데이트를 제공하지 않는다.

데이터의 업데이트 명령이 요청될 경우 기존 문서를 삭제하고 변경된 내용으로 새로운 문서를 생성하는 방식을 이용한다.

비용이 많이 들지만 => 불변적이라는 이점을 취할 수 있다.

 

참고서적 권택환 외 5명 「엘라스틱서치 실무 가이드」 위키북스(2019) p1~10

 

오늘은 여기까지입니다 감사합니다.

+ Recent posts