Elastic Search의 개념과 주요 기능 그리고 장점
Elasticsearch를 자세히 공부하기전에
Lucene, Solr, 그리고 Elasticsearch는 모두 Apache Lucene에 기반을 둔 검색 엔진입니다.
각각은 서로 다른 특징과 장점을 가지고 있습니다.
Lucene은 Java로 작성된 고성능의 전문 검색 엔진 라이브러리입니다.
Lucene은 기본적인 검색 기능을 제공하지만, 분산 검색, 복제, 샤딩, 인덱싱 관리 등의 기능은 제공하지 않습니다.
Solr는 Lucene 위에 구축된 오픈 소스 검색 서버로, HTTP 요청을 통해 Lucene의 모든 검색 기능을 제공합니다.
Solr는 분산 전문 검색, 패싯팅, 거의 실시간 인덱싱, 고가용성, NoSQL 기능, Hadoop과 같은 빅 데이터 도구와의 통합, Word 및 PDF와 같은 리치 텍스트 문서 처리 등의 강력한 기능을 제공합니다.
Elasticsearch는 또한 Apache Lucene 위에 구축된 오픈 소스 검색 엔진으로, REST API를 사용하여 Lucene의 강력한 인덱싱 및 검색 기능을 확장합니다. Elasticsearch는 데이터의 분산에 대한 인덱스와 샤드 개념을 사용하며, 시계열 및 NoSQL 데이터에 적합하게 완전히 JSON 기반입니다. Elasticsearch는 분산 전문 검색, 고가용성, 강력한 쿼리 DSL, 다중 테넌트, 지리적 검색, 수평적 확장 등의 주요 기능을 제공합니다.
이들 각각은 서로 다른 요구 사항과 환경에 따라 적합할 수 있습니다.
예를 들어, 간단한 전문 검색 설정이 필요한 경우에는 Solr가 더 나은 선택일 수 있습니다.
반면에 검색을 사용자 정의해야 하는 경우에는 Elasticsearch와 Solr이 더 나은 선택일 수 있습니다.
Elasticsearch의 기본 용어
Near Realtime (NRT):
Elasticsearch는 거의 실시간 검색 플랫폼입니다.
Cluster:
Cluster는 하나 또는 그 이상의 노드들(서버들)의 모임입니다. 하나의 클러스터에 여러 개의 노드를 가질 수 있습니다.
Node:
Node는 Cluster의 부분이 되는 하나의 서버입니다.
Index:
Index는 비슷한 성격을 가진 document의 집합입니다.
Type:
Type은 index에서 논리적인 카테고리입니다.
Shards & Replicas:
큰 크기의 index를 Shard라고 불리는 여러 개의 조각으로 나눌 수 있습니다. 고가용성을 제공하기 위해 샤드의 내용을 복제해 둡니다. 원본 역할을 담당하는 샤드는 primary shard가 되고 복제된 샤드는 replica shard가 됩니다.
Elasticsearch는 Apache Lucene에 기반을 둔 분산형 RESTful 검색 및 분석 엔진입니다.
데이터를 중앙에 저장하여 손쉽게 확장되는 광속에 가까운 빠른 검색, 정교하게 조정된 정확도, 강력한 분석을 제공합니다.
정형 데이터, 비정형 데이터, 위치 정보, 메트릭 등 다양한 유형의 데이터를 사용자가 원하는 방식으로 검색하고 결합할 수 있도록 지원합니다.
또한, 빠릅니다. 빠른 결과 문제에 대한 답을 얻게 되면 데이터와의 관계도 즉시 바뀌게 됩니다.
모든 유형의 인프라에서 실행이 가능합니다.
노트북 컴퓨터부터 페타바이트의 데이터가 포함된 수백 개의 서버까지, 프로토타입에서 운영 배포까지 이어지는 모든 과정을 원활하게 처리할 수 있습니다.
Elasticsearch의 주요 기능은 다음과 같습니다.
풀텍스트 검색:
풀텍스트 검색을 지원하여 사용자가 원하는 정보를 빠르게 찾을 수 있습니다.
고급 분석:
데이터를 분석하고 패턴을 찾는 데 도움이 되는 고급 분석 기능을 제공합니다.
위치 기반 정보 검색:
위치 기반 정보를 검색하는 기능을 제공하여 지리적인 위치에 따른 데이터 검색이 가능합니다.
언어 기반이 아닌 REST API: Elasticsearch는 언어에 구애받지 않는 REST API를 제공하여 다양한 언어로 개발된 애플리케이션에서도 쉽게 사용할 수 있습니다.
고가용성:
클러스터 내의 노드 간에 데이터를 복제하여 고가용성을 보장합니다.
수평적 확장성:
데이터와 트래픽이 증가함에 따라 쉽게 확장할 수 있는 수평적 확장성을 제공합니다.
클러스터 보안:
클러스터의 보안을 위한 다양한 기능을 제공합니다.
이 외에도 로그 모니터링, 인프라 모니터링, 애플리케이션 성능 모니터링 등 다양한 기능을 제공합니다.
Elasticsearch는 다음과 같은 장점을 가지고 있습니다:
Schemaless와 문서지향:
Elasticsearch는 JSON 구조를 사용하여 기존의 RDMS와 같은 엄격한 구조를 적용하지 않습니다. 비정형 데이터는 비구조적이며, 스키마 (Schema)가 다이나믹하게 변할 수 있습니다.
검색능력 (Searching):
기본적으로 검색엔진이기 때문에 검색 기능 뿐만 아니라 특히 Full-text 검색 능력이라는 강력한 기능을 탑재하고 있습니다.
분석 (Analytics):
데이터를 분석하고 패턴을 찾는 데 도움이 되는 고급 분석 기능을 제공합니다.
풍부한 API와 REST 지원:
기본적으로 Java, C#, Python, PHP, Javascript, Ruby, Perl 등 20개의 프로그램 언어를 지원하며, 기본적으로 Elasticsearch는 REST API를 제공하여 REST API를 사용하는 모든 언어에서 HTTP 형식으로 사용할 수 있습니다.
쉬운 작동, 쉬운 확장:
single node instance로 작동을 하며, 수백 개의 스케일 아웃을 쉽게 할 수 있습니다.
근접 실시간 (Near real-time) :
데이터를 삽입한 순간 약 몇초정도는 이 단계를 지나며 그 후 검색을 할 수 있습니다.
빠른 속도 (Lightning-fast) :
Lucene (Java 기반의 검색엔진 라이브러리)의 DNA를 가지고 있기 때문에 단어 입력 후 문서를 찾는 속도가 다른 NoSQL들에 비해 매우 빠릅니다.
내고장성 (Fault-tolerant) :
노드 실패시 replicate(복제)된 다른 노드에서 데이터를 가져오며, 네트워크 실패 시 다른 마스터 복제본으로 선택합니다.
이러한 장점들로 인해 Elasticsearch는 다른 검색 엔진과 비교했을 때 빠른 검색 속도, 유연한 데이터 구조, 강력한 분석 기능 등을 제공하여 많은 사용자들에게 선호되고 있습니다.