Elasticsearch 기본 개념
- 시간이 갈수록 증가하는 문제를 처리하는 분산형 RESTful 검색 및 분석 엔진
- Elastic Stack의 핵심과도 같은 Elasticsearch는 데이터를 중앙에 저장하여 예상 가능한 항목을 탐색하거나 예상치 못한 항목을 밝혀낼 수 있도록 지원
- 기본적으로 모든 데이터를 색인하여 저장하고 검색, 집계 등을 수행하며 결과를 클라이언트 또는 다른 프로그램으로 전달하여 동작하게 되는 것.
특징
- OpenSource
- Elasticsearch의 핵심 기능들은 Apache 2.0 라이센스
- Elastic Stack의 모든 제품들은 (https://github.com/elastic) github repository에서 소스들을 찾을 수 있음
- 6.3 버전 부터는 Elastic 라이센스와 Apache 라리센스가 섞여 있지만 각각의 버전에 대해 별도 배포판이 존재하고 license 파일에서 어떤 경로의 파일들이 어떤 라이센스로 되어 있는 지 확인 가능
- 현재는 x-pack 디렉터리 아래 있는 파일들만이 Elastic 라이센스를 따르고 있으며, 그 외 파일들은 Apache 라이센스를 따름.
- 루씬이 자바로 만들어졌기 때문에 Elasticsearch도 마찬가지로 자바로 코딩 되어 있음
- 실시간 분석(real-time)
- 하둡(Hadoop)과 달리 Elasticsearch는 Elasticsearch 클러스터가 실행되고 있는 동안에는 계속해서 데이터가 입력 (검색엑진에서는 색인 - indexing 이라고 표현합니다.)되고, 그와 동시에 실시간에 가까운 (near real-time) 속도로 색인된 데이터의 검색, 집계가 가능
- 하둡(Hadoop)의 경우 기본적으로 배치 기반의 분석 시스템으로 분석에 사용될 소스 데이터, 분석을 수행 할 프로그램을 올려 놓고 분석을 실행하여 결과 셋이 나오도록 하는 하나의 루틴으로 실행
- 전문(full text) 검색 엔진
- 루씬은 기본적으로 역파일 색인(inverted file index)라는 구조로 데이터를 저장
- 루씬을 사용하는 Elasticsearch도 마찬가지로 색인된 모든 데이터를 역파일 색인 구조로 저장하여 가공된 텍스트를 검색 → 이런 특성을 전문(full text) 검색이라고 칭함
- JSON 문서 기반 Elasticsearch는 내부적으로 역파일 색인 구조로 데이터를 저장하고 있으나, 사용자의 관점에서는 JSON 형식으로 데이터를 전달
- JSON형식은 간결하고 개발자들이 다루기 편한 구조로 되어 있어 색인 할 대상 문서를 가공하거나 다른 클라이언트 프로그램과 연동하기에 용이
- 또한 key-value 형식이 아닌 문서 기반으로 되어 있기에 복합적인 정보를 포함하는 형식의 문서를 있는 그대로 저장이 가능하며, 사용자가 직관적으로 이해하고 사용할 수 있음
- Elasticsearch에서 질의에 사용되는 query문이나 query에 대한 result도 모두 JSON 형식으로 전달되고 리턴됨
- 다만 JSON형식 만이 Elasticsearch가 지원하는 유일한 형식이기에 사전에 입력할 데이터를 JSON형식으로 가공하는 것이 필요
- CSV, Apache log, syslog 등과 같이 널리 사용되는 형식들은 Logstash에서 변환을 지원
- RESTFul API
- 현재 대규모 시스템들은 대부분 마이크로 서비스 아키텍처(MSA, Micro Service Architecture)를 기본으로 설계 되어짐
- 이러한 구조에서 빠질 수 없는 것이 REST API와 같은 표준 인터페이스
- Elasticsearch는 REST API를 기본으로 지원하며 모든 데이터 조회, 입력, 삭제를 http 프로토콜을 통해 REST API로 처리
- 멀티테넌시(Multitenancy)
- Elasticsearch의 데이터들은 인덱스(index) 라는 논리적인 집합 단위로 구성되며 서로 다른 저장소에 분산되어 저장
- 서로 다른 인덱스들을 별도의 커넥션 없이 하나의 질의로 묶어서 검색하고, 검색 결과들을 하나의 출력으로 도출할 수 있음 → 이러한 Elasticsearch의 특징을 멀티테넌시라 칭함