본문 바로가기
Etc

Elastic Search(6.1.1) 알아보기

by chuckolet 2019. 3. 6.

Introduction

당분간 Elastic Search(엘라스틱 서치)를 사용하게 되어서 공부했습니다.


엘라스틱 서치는 한마디로 정리하면 루씬 기반의 실시간 오픈소스 검색엔진입니다. 크게 아래의 두가지 특징을 가지고 있습니다.

1. 강력한 검색 기능

엘라스틱 서치는 검색엔진에 많이 쓰이며(ex. Github, Stackoverflow, Wikipedia, Goldman Sachs 등) 최근에는 빅데이터 로그 분석(Log Analytics), 메트릭 분석 등으로도 많이 사용되고 있습니다. 기존 데이터베이스에서 하기 힘들었던 전문검색(Full-Text Search), 문서의 점수화를 통한 정렬, 데이터 증가량에 상관 없는 실시간 검색 등을 구현 할 수 있습니다.

2. 대규모 분산 시스템 구축 지원

elastic에서 지원하는 클라우드 서비스 외에도 AWS나 Azure, Hadoop 같은 빅데이터 플랫폼과의 연동도 쉽게 가능합니다.

특징

좀 더 디테일하게 특징을 살펴보면,

1. 아파치 루씬 기반

JAVA로 개발된 검색 라이브러리인 아파치 루씬을 기반으로 만들어졌습니다. 그래서 루씬의 기능을 대부분 지원하며 JAVA로 개발 됐기 때문에 JAVA가 설치되어 있어야 합니다.

2. 실시간 분석(Real Time)

저장된 데이터가 검색에 사용되기 위해 별도의 재시작이나 상태 갱신이 필요하지 않습니다. indexing이 완료됨과 동시에 바로 검색(Real Time)이 가능합니다. 

3. 분산 시스템(Distributed System)

엘라스틱 서치는 여러 개의 노드로 구성된 분산(Distributed)시스템 입니다. 노드란 데이터를 indexing하고 검색 기능을 수행하는 엘라스틱 서치의 단위 프로세스 입니다. 시스템 규모에 따라 노드를 더 연결하거나 분리하면서 유연하게 시스템을 확장하거나 축소할 수 있습니다. 

4. 높은 가용성(High Avaliability)

엘라스틱 서치는 한 개 이상의 노드로 구성되고 각 노드는 1개 이상의 데이터 원본과 복사본을 가지고 서로 다른 위치에 나누어 저장합니다. 노드가 종료되거나 실행에 실패할 때 엘라스틱 서치는 노드의 상태를 감지하고 종료된 노드의 데이터를 다른 노드로 옮김으로서 항상 일저한 데이터의 복사본 개수를 유지하는데, 이를 통해서 높은 가용성(High Avaliability)과 안전성을 보장합니다.

5. 멀티 테넌시(Multi Tenancy)

엘라스틱 서치의 데이터는 여러 개의 분리된 인덱스들(Indices)에 그룹으로 저장됩니다. 인덱스는 관계형 DB에서 데이터베이스와 대응 대는 개념인데, 관계형 DB에서 다른 데이터베이스의 데이터를 검색하려면 별도의 커넥션을 생성해야되지만 엘라스틱 서치에서는 검색할 때, 서로 다른 인덱스의 데이터를 하나의 질의로 묶어서 검색하고 하나의 출력으로 모아줄 수 있습니다. 이런 특징을 멀티 테넌시(Multi Tenancy)라고 합니다.

6. 전문검색(Full Text Search)

엘라스틱 서치는 데이터 Indexing을 통한 전문 검색(Full Text Search)이 가능합니다. 

7. JSON 문서 기반

엘라스틱 서치에서는 기본적으로 문서의 모든 필드가 indexing되어서 JSON 구조로 저장됩니다. 그래서 모든 레벨의 필드에 접근이 쉽고, 매우 빠른 속도로 검색이 가능합니다.

8. RESTFul API

RESTFul API를 지원해서 URI를 사용한 동작이 가능합니다. 
ex1) 
$ curl -XPOST http://localhost:9200/books/book/1 -d '
{
  "title" : "Elastic Search Guide",
  "author" : "Kim",
  "pages" : 300
}'

ex2)
$ curl -XGET http://localhost:9200/books/book/1


데이터 색인(Indexing)


아파치 루씬과 엘라스틱 서치에서는 위의 Document1, 2, 3 같은 원본 문서를 indexing하여 해당 문서들의 텍스트를 추출한 뒤에 index 저장 공간에 역파일 색인(inverted Index) 형태로 저장합니다. 

관계형 DB는 책의 맨 앞에 주제 순으로 나온 목차, 엘라스틱 서치는 책의 맨 뒤에 키워드 순으로 나열된 인덱스 페이지라고 이해하면 쉽습니다. 

ELK 스택

ELK Pic

위의 그림은 ELK(Elastic Search, Logstash, Kibana)의 약자로 엘라스틱 서치를 이용해서 특정 로그를 수집하고 이를 시각화 하는 구조를 도식화 한 것 입니다.
Logstash는 데이터베이스에 무관하게 어떤 데이터든지 수집해주고, Kibana는 visualization 툴로 Elastic Search의 데이터를 보기 좋게 화면에 표현해주는 역할을 합니다.

Setup

1. 엘라스틱 클라우드를 사용하는 방법

2. AWS Elasticsearch Service를 이용해서 구축하는 방법

3. EC2 인스턴스에 오픈소스 엘라스틱서치를 직접 설치해서 구축하는 방법


처음 회원가입하면 14일간 무료 서비스를 제공하기 때문에 처음 접하시는 분들은 1번을 사용해보시는 것을 추천합니다.

How to use

기본 CRUD, API, Mapping, Bulk, Aggregation


References

시작하세요! 엘라스틱서치, 김종민(2015)

시작하세요! 엘라스틱서치 예제 코드

[ELK] 엘라스틱서치(ElasticSearch) 시작하기

제 글이 도움이 되셨다면 간단하게 '공감', '댓글' 부탁드립니다!



댓글