엘라스틱서치(ES - ElasticSearch)는 아파치 루씬(Lucene) 라이브러리를 기반으로 하는 분산 검색 엔진이다. ES는 데이터를 시각화해주는 키바나(kibana)와 엘라스틱서치에 색인할 데이터를 수집하고 변환하는 로그스태시(Logstash), 경량 데이터 수집 플랫폼 비츠(Beats)와 함께 ELK 스택을 이루고 있다.
엘라스틱서치는 분산 처리, HA, 수평적 확장성 등 엔터프라이즈에서 필요한 주요 기능들을 제공한다. 또 한, JSON 기반의 문서를 저장, 색인, 검색하기에 분한 NoSQL 스토리지 성격도 지니고 있지만 강력한 전문 검색 기능은 다른 NoSQL 과의 차이점이다.
1. 엘라스틱서치 기본 콘셉트
루씬은 데이터를 색인하고 검색하는 기능을 제공하는 검색 엔진의 코어 라이브러리다 엘라스틱 서치는 루씬을 코어로 이용해 JSON 문서의 저장, 색인, 검색 등 작업을 분산 처리하는 검색 엔진이다. 엘라스틱서치의 특징은 다음과 같다.
1.1 검색 엔진
엘라스틱서치는 검색 엔진이다. 단순 텍스트 매칭 검색뿐만 다음과 같은 기능들도 지원한다.
- 전문 검색 (full-text search)
- 다양한 종류의 검색 쿼리 지원
- 역색인으로 인한 검색 속도 향상
- 다양한 analyzer를 사용해 다양한 비즈니스 요구사항에 맞는 색인 구성
- 형태소 분석
1.2 분산 처리
데이터를 여러 노드에 분산 저장해서 검색이나 집께 작업 등을 수행할 때도 분산 처리를 지원한다.
1.3 고가용성 제공
클러스터를 구성하는 일부 노드에 장애가 발생해도 데이터 복제본을 이용해 중단 없이 서비스를 지속한다. 또 한, 서비스 장애 시 노드를 다시 띄워서 복제본 개수를 유지하면서 노드 간 데이터 균형을 자동으로 맞춘다.
1.4 수평적 확장성
갑자기 데이터양이 증가해서 많은 처리 능력이 요구될 때를 위해 수평적 확장을 지원한다. 단순히 새로운 노드에 ES를 설치해서 클러스터에 참여시키는 것만으로도 확장이 된다. 새 노드에 데이터를 복제하고 옮기는 것은 ES가 자동으로 수행한다.
1.5 JSON 기반의 REST API 제공
ES에 작업 요청을 보내기 위해선 JSON 기반 REST API를 사용해야 한다. 때문에 특별한 클라이언트를 설치하지 않아도 쉽게 통신할 수 있다.
1.6 데이터 안전성
ES는 높은 데이터 안전성을 제공한다. 데이터 색인 요청 후 200 OK를 받았다면 그 데이터가 디스크에 기록됨이 보장된다.
1.7 다양한 플러그인을 통한 기능 확장 지원
ES는 다양한 플러그인을 사용해 기능을 확장하거나 변경할 수 있다. 핵심 기능 역시 플러그인을 통해 제어할 수 있다.
1.8 준실시간(near real-time search) 검색
ES는 데이터를 색인하고 곧바로 조회할 수 있지만, 이런 검색 요청은 실패할 가능성이 높다. 역색인을 구성하고, 역색인으로부터 검색이 가능해지기까지 최대 1초 정도 시간이 걸리기 때문이다.
1.9 트랜잭션을 지원하지 않는다
ES는 트랜잭션을 지원하지 않는다.
1.10 사실상 조인을 지원하지 않는다
ES는 기본적으로 조인을 염두에 두고 설계되지 않았다. join이라는 특별한 데이터 타입이 있지만 아주 제한적인 상황을 위한 기능이기에 성능이 떨어진다.
출서 - 엘라스틱서치 바이블