Elasticsearch란 무엇일까?
오늘 커피챗을 진행했는데 Elasticsearch(이하 ES)에 대한 얘기가 나왔지만, 고성능의 검색엔진 정도로 알고 있어서 사전적 정의로 정확히 풀어내지 못했다.
ES는 분산형 RESTful 검색 및 분석 엔진으로 엘라스틱 스택의 중심에 위치한다. 엘라스틱 스택은 차세대 데이터 플랫폼이며 검색·분석·데이터 저장소 역할을 하는 ES, 데이터 수집을 담당하는 비츠(Beats), 정제·전처리를 수행하는 로그스태시(Logstash), 시각화·관리 기능을 제공하는 키바나(Kibana)로 구성된다.
위의 내용을 보면 검색 엔진의 역할을 한다는 것을 알 수 있지만 정확히 어떻게 동작하는 지 와닿지 않는다. 아래의 RDB와 비교하는 글들을 보면 동작 원리를 이해하기 쉽다.
ES와 RDB는 어떤 차이가 있을까?
엘라스틱은 매우 빠른 속도와 확장성, 복원성뿐 아니라 정형·비정형 데이터를 모두 수용할 수 있는 유연성을 가지고 있다. 이 같은 장점으로 인해 단순 검색엔진으로 활용하는 단계를 넘어 빠른 데이터 확인이 필요한 모든 분야에서 관심을 끌고 있다.
하지만 ES가 RDB를 완전히 대체할 수는 없다. 그 이유는 데이터 저장 방법에 대한 차이에 있다. RDB는 행을 기반으로 데이터를 저장하고, ES는 단어를 기반으로 데이터를 저장한다. 이러한 저장 방식을 보며 NoSQL의 문서저장방식과 유사하다고 생각했다.
이 둘은 RDB와 NoSQL의 관계처럼 저장 방식에 따라 차이가 존재한다. RDB는 데이터 간 관계성을 가지고 있으므로 수정/삭제 시 한 번의 요청으로 관계된 데이터가 처리되어 빠른 속도의 장점을 가지고 있다.
반대로 ES는 단어 기준으로 데이터가 저장되므로 수정/삭제에는 중복 데이터에 대한 많은 리소스가 소요되어 성능이 나쁘고, 사전형 구조의 특성 상 Key값으로 접근하여, 검색 시 속도에 강점을 갖는다.
이것이 ES가 RDB를 완전히 대체할 수 없는 중요한 이유 중 하나이다. 따라서 데이터 특성상 수정과 삭제가 많은 경우에는 RDB와 엘라스틱 영역을 나누어 아키텍처링 하는 것이 필요하다.
[참고]
엘라스틱서치(Elasticsearch)에서 관계형 데이터 모델링 하기
[데이터베이스] Elasticsearch란?