검수요청.png검수요청.png

일래스틱서치

해시넷
Asadal (토론 | 기여)님의 2019년 7월 13일 (토) 04:14 판 (같이 보기)
이동: 둘러보기, 검색
일래스틱서치(Elastic Search) 로고
일래스틱서치(Elastic Search) 로고와 글자

일래스틱서치(Elastic Search)는 아파치(Apache) 루신(Lucene) 기반의 검색엔진이다. 일래스틱서치는 모든 종류의 문서를 검색하는데 사용할 수 있다. 실시간 검색 기능뿐만 아니라 강력한 집계 기능을 제공해 실시간 분석 엔진으로도 활용이 가능하다. 데이터를 저장할 수 있어 NoSQL 저장소로도 활용할 수 있고, 웹 서버나 데이터베이스(DB) 서버에 응용 프로그래밍 인터페이스(API)를 지원한다. 일래스틱서치는 확장성과 유연성이 매우 뛰어나 플러그인을 이용해 기능을 확장할 수 있다.

개요

일래스틱서치는 가변 검색 및 실시간에 가까운 검색을 제공하며 multi-tenancy를 제공한다. 일래스틱서치는 분산 방식으로 키에 따라 여러 샤드가 구성되는 방식으로 각 샤드는 0개 이상의 복제물을 가질 수 있다. 각 노드는 하나 이상의 샤드를 관리하며 작업을 올바른 샤드로 할당시켜 주는 조율자 역할을 한다. 리밸런싱 및 라우팅은 자동으로 수행되며 연관 데이터는 종종 동일한 인덱스에 저장된다. 이는 하나 이상의 프라이머리 샤드와 0개 이상의 복제물 샤드로 이루어진다. 또 인덱스가 만들어지면 프라이머리 샤드의 수는 변경이 불가능하다. 일래스틱서치는 루신을 사용하고, JSON과 자바 API를 통해 모든 기능을 최대한 활용한다. 그 밖의 기능으로 '게이트웨이'가 있으며 장기간의 인덱스 지속성을 관리한다. 일래스틱서치는 실시간 GET 요청을 지원하므로 NoSQL 데이터스토어의 역할에 적합하지만, 분산트랜잭션 면에서는 부족하다.

특징

  • JSON 기반의 스키마 없는 저장소 : 일래스틱서치는 검색엔진이지만, NoSQL처럼 사용이 가능하다. 데이터 모델을 JSON으로 사용하고 있어서, 요청과 응답을 모두 JSON 문서로 주고받고 소스 저장도 JSON 형태로 저장한다. 스키마를 미리 정의하지 않아도, JSON 문서를 넘겨주면 자동으로 인덱싱한다. 숫자나 날짜 등의 타입은 자동으로 매핑한다.
  • Multi-tenancy : 하나의 일래스틱서치 서버에 여러 인덱스를 저장하고, 여러 인덱스의 데이터를 하나의 쿼리로 검색할 수 있다.
  • 확장성과 유연성 : 플러그인을 이용해 기능을 확장할 경우 Thrift 플러그인이나 Jetty 플러그인을 사용하면 전송 프로토콜을 변경할 수 있다. 필수 플러그인이라고 할 수 있는 BigDesk나 Head를 설치하면 일래스틱서치 모니터링 기능을 사용할 수 있게 된다.
  • 분산 저장소 : 인덱스는 각각의 샤드마다 구성된다. 각각의 샤드는 0개 이상의 복제본을 가진다. 일래스틱서치는 클러스터링을 지원하며 클러스트가 가동될 때 여러 노드중 하나가 메타데이터 관리를 위한 마스터 노드로 선출된다. 마스터 노드가 다운되면 자동으로 클러스트 내의 다른 노드가 마스터가 된다.

기본 용어

  • 인덱스/타입/문서(index/type/document) : 일래스틱서치의 데이터 계층이다.
  • 필드(field) : 일래스틱서치에서 문서는 JSON인데, JSON의 각 프로퍼티를 일래스틱서치에서 필드라 부른다.
  • 매핑(mapping) : 인덱스/타입/문서의 규칙을 정의한 것이다.
  • 색인(index) : 일래스틱서치가 문서를 검색할 수 있도록 색인 데이터를 만들어두는 과정이다.
  • 색인(index) : 위 index의 명사형으로, 색인 작업을 거쳐 만들어진 색인 데이터를 의미한다.
  • 클러스터/노드(cluster/node) : 여러 대의 서버를 묶어서 구동하기 위해 사용되는 개념이다. 각 서버가 노드, 서버의 묶음이 클러스터이다.
  • 샤드/복사본(shard/replica) : 일래스틱서치는 색인 데이터를 하나의 물리적 데이터 공간에만 저장하는게 아니라, 여러 개의 저장공간에 나누거나 복사할 수 있다. 여기서 shard가 성능향상을 위해 데이터를 여러 물리적 공간에 나눠 저장하는 것이고, replica는 한 노드가 실패했을 때에도 검색 서비스 제공이 가능하도록 데이터를 여러 물리적 공간 또는 노드에 복제해 두는 것이다.
  • QueryDSL : JSON으로 표현되는 일래스틱서치의 검색 문법이다.

설치 및 실행

  • 자바 설치
  • 일래스틱서치 설치 : 실행 옵션에는 보안, 메모리 설정, 분산환경(클러스터/노드) 설정 등이 포함되어 있지만, 첫사용 시에는 설정을 바꾸지 않아도 무방하다.
  • 한글 형태소 분석기 설치 : 일래스틱서치는 한국어를 위한 분석기를 내장하고 있지 않다. 띄어쓰기만으로 단어를 분리할 경우 검색 품질이 매우 떨어지기 때문에 한국어 전용 분석기를 사용해야 한다. 일래스틱서치용으로 공개된 한글 형태소 분석기로는 은전한닢(MeCab-ko analyser)이 있다.
  • 인덱스, 타입 준비(스키마 설정) : RDBMS의 스키마 설계에 대응하는 과정이다.
  • 인덱스 설정 : 인덱스 설정에서 사용할 샤드와 복사본의 개수, 분석기 등을 설정할 수 있다.
  • 타입 매핑 : 매핑을 만들어 두어야 매핑에 따라 색인이 만들어지므로 꼭 필요한 단계이다.
  • 인덱스 생성 : 일래스틱서치 서버에 REST API로 요청을 보내 인덱스를 생성한다. 만일 인덱스를 미리 생성하지 않은 채로 문서를 입력할 경우, 서버가 문서의 내용을 참고해 인덱스와 매핑을 자동 생성한다.
  • 문서 색인(삽입) 요청 보내기 : 문서를 삽입하면 앞에서 만든 매핑에 따라 색인이 생성된다. 문서를 삽입할 때는 문서 리소스 URL에 PUT 요청을 보내면 된다. 이때, 인덱스, 타입, 문서 ID에 해당하는 문서가 존재하지 않으면 문서가 생성되고, 문서가 이미 존재하면 새 버전으로 갱신된다. 문서의 내용은 매핑에 따라 색인 처리되며, 색인 전의 본 내용도 저장되므로 _source 내장 필드를 통해 꺼낼 수 있다.
  • 검색 요청 보내기 : GET 요청을 문서 리소스 URL을 지정해 보내 문서를 조회할 수 있다.

사용 방법

일래스틱서치에서 데이터를 가져오는 방법은 다양하지만, 일래스틱서치의 대시보드 애플리케이션인 '키바나(Kibana)'를 통해 가져오기가 가장 쉽고 편리하다.

  • 키바나를 이용해 데이터를 가져오는 경우
  1. 키바나 쿼리를 이용해 원하는 데이터를 화면에 표시한다.
  2. 화면에 표시된 데이터가 실시간일 필요가 없는 경우 CSV로 데이터를 내보낸다.
  3. 실시간 데이터를 분석할 경우에는 현재 데이터를 볼 수 있는 쿼리(query DSL)를 생성해 직접 데이터를 요청하면 된다.

사용시 유의점

  • 일래스틱서치를 검색 데이터에 활용하고 원본 데이터는 따로 보관한다.
  • River 보다는 Logstash 사용을 권장한다.
  • 원본 데이터를 Logstash에 바로 입력 가능한 JSON 형식으로 저장해서 AWS의 S3같은 곳에 압축해서 보관한다.

서버 구성 시 유의점

  • 1개의 노드에 할당하는 메모리는 30GB를 넘지 않도록 한다.
  • ES의 힙메모리 사이즈는 서버 전체 메모리의 50%가 넘지 않도록 한다.
  • HD 보다는 SSD에서 성능이 월등히 향상된다.

참고자료

같이 보기


  검수요청.png검수요청.png 이 일래스틱서치 문서는 소프트웨어에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.