토이 프로젝트를 준비하면서 엘라스틱서치를 사용해야하는 상황이 발생했습니다. CQRS를 참고하면서 개발하면서 Query 즉, Select하는 부분에 ElasticSearch를 선택하여 역색인 지원을 통한 매우 빠른검색을 활용하려고 하였으며 , 기존의 RDB에서는 단순 텍스트 매칭에 대한 검색만 제공하기 때문입니다. (요즘은 MySQL 의 최신버전에서는 n-gram 기반의 Full-text검색을 지원하지만 한글검색의 경우에는 아직 약한 기능을 제공한다고 합니다.)

비교

ElasticSearch에서의 CRUD 기능 비교

엘라스틱서치의 장점

데이터베이스 대용으로 사용 가능

NoSQL 데이터베이스처럼 사용이 가능합니다. 또한 분류가 가능하고 분산 처리를 통해 거의 실시간(NRT)에 데이터 검색이 가능합니다.

대량의 비정형 데이터 보관 및 검색 가능

기존 데이터베이스로 처리하기 어려운 대량의 비정형 데이터 검색이 가능하며, 전문 검색(Full-Text Search)과 구조 검색 모두를 지원합니다. 기본적으로는 검색엔진이지만 MongoDB나 Hbase처럼 대용량 스토리지로 사용도 가능합니다.

오픈소스 검색엔진

아파치 루씬(Lucene)기반 오픈소스 검색엔진으로 무료로 사용 가능하며, 많은 컨트리뷰터들이 실시간으로 소스를 수정해주기 때문에 버그가 발생하면 빠르게 해결됩니다.

전문 검색(Full-text Search)

내용 전체를 색인하여 특정 단어가 포함된 문서를 검색하는 것이 가능합니다.

통계 분석

비정형 로그 데이터를 수집하고 한 곳에 모아서 통계 분석이 가능하다. 키바나를 이용하면 시각화 또한 가능합니다.

스키마리스(Schemaless)

기존의 관계형 데이터베이스는 스키마라는 구조에 따라 데이터를 적합한 형태로 변경하여 저장 관리하지만 엘라스틱서치는 비정형의 다양한 형태의 문서도 자동으로 색인, 검색이 가능합니다.

RESTful API

RESTful API를 사용하여 HTTP통신 기반으로 요청을 받아 JSON 형식으로 응답한다는 것은 다양한 플랫폼에서 응용 가능하다는 것을 의미합니다.