brunch

You can make anything
by writing

C.S.Lewis

by 디이프 Jan 30. 2024

Elasticsearch

현대 디지털 시대에서 데이터의 양이 기하급수적으로 증가함에 따라, 데이터로부터 유의미한 정보를 추출하고 신속하게 접근할 수 있는 것은 매우 중요해졌습니다. Elasticsearch는 이러한 점에서 중요한 역할을 할 수 있는 기술 중 하나입니다.




I. Elasticsearch 소개

Elasticsearch는 대량의 데이터를 신속하게, 거의 실시간에 가깝게 검색 및 분석할 수 있는 오픈소스 기반의 분산 검색 엔진입니다. 기본적으로 분산형 아키텍처를 기반으로 하며, Lucene을 내부 검색 엔진으로 사용합니다. Elasticsearch는 JSON형식의 문서를 색인화하고, 복잡한 검색 쿼리에 빠르게 응답할 수 있는 기능을 제공합니다.


II. Elasticsearch의 주요 기능

Elasticsearch의 핵심 기능은 6가지로 요약해 볼 수 있습니다.


1. 분산 검색 및 분석 기능 : Elasticsearch는 데이터를 여러 노드에 분산하여 저장하고 처리할 수 있습니다. 이 분산 구조는 검색 및 분석 작업을 빠르고 효율적으로 수행할 수 있도록 해줍니다. 사용자는 수십억 개의 문서에서도 거의 실시간으로 검색 결과를 얻을 수 있습니다.

2. 풀 텍스트 검색 : Lucene 기반의 풀 텍스트 검색 기능을 제공합니다. 이를 통해 사용자는 복잡한 텍스트 쿼리 및 다양한 검색 기능을 사용할 수 있으며, 높은 정확도와 성능으로 대량의 텍스트 데이터를 빠르게 처리할 수 있습니다.

3. 실시간 처리 : Elasticsearch는 데이터 색인화와 검색을 거의 실시간으로 처리할 수 있습니다. 새로운 데이터가 색인화되면 거의 즉시 검색 가능하며, 이는 빠른 데이터 분석과 인사이트 추출에 중요합니다.

4. 데이터 집계 : Elasticsearch는 복잡한 데이터 집계 및 분석 기능을 제공합니다. 이를 통해 사용자는 데이터 내 트렌드, 패턴, 요약 통계 등을 신속하게 파악할 수 있습니다.

5. 확장성 : Elasticsearch는 수평적으로 확장 가능한 구조를 가지고 있으며, 클러스터에 노드를 추가함으로써 처리 능력과 저장 용량을 쉽게 확장이 가능합니다.

6. 다양한 통합 옵션 : Elasticsearch는 다양한 데이터 소스와 통합할 수 있는 유연한 RESTful API를 제공합니다.


III. Elasticsearch의 데이터 구조 

Elasticsearch의 데이터 구조는 다음과 같은 기본 구성 요소로 이루어져 있으며, 각 구성 요소는 Elasticsearch가 데이터를 처리하고 저장하는 방식에 중요한 역할을 합니다.


도큐먼트(Document) : Elasticssearch에서 데이터의 최소 단위로, RDBMS의 Row와 유사합니다. 하나의 도큐먼트는 JSON 객체로 표현되며, 다양한 필드로 구성됩니다. 도큐먼트 내부에 또 다른 도큐먼트를 포함하는 중첩 구조를 지원하며, 이를 통해 복잡한 데이터 관계를 표현할 수 있습니다.

타입(Type) : 인덱스의 논리적 구조를 의미하며 인덱스당 하나의 타입만 사용할 수 있습니다.

필드(Field) : 필드는 도큐먼트 내의 데이터 타입으로, RDBMS의 열(Column)과 유사합니다. 하지만 Elasticsearch의 필드는 RDBMS보다 더 동적입니다. 하나의 필드가 여러 데이터 타입을 가질 수 있으며, 이는 데이터 구조의 유연성을 제공합니다.

매핑(Mapping) : 매핑은 필드의 속성을 정의하고, 어떻게 데이터가 색인 될지 결정합니다. 이는 데이터가 검색될 때 어떻게 처리될지를 지정합니다. 같은 이름을 가진 여러 필드가 존재할 수 없으며, 각 필드는 고유한 매핑 정보를 가집니다.

인덱스(Index) : 여러 도큐먼트/타입들이 모여 하나의 인덱스를 이룹니다. 이는 RDBMS의 Database와 유사한 역할을 하며, 하나의 쿼리로 여러 인덱스의 데이터를 동시에 조회할 수 있는 멀티테넌시를 지원합니다.


IV. Elasticsearch의 물리 아키텍쳐

Elasticsearch 아키텍처는 클러스터, 노드, 샤드, 복제와 같은 핵심 개념들로 구성되어 있습니다. 이러한 개념은 Elasticsearch가 대용량 데이터를 효율적으로 저장하고 처리하는 데 중요한 역할을 합니다.


클러스터(Cluster) : 클러스터는 하나 이상의 Elasticsearch 노드들로 구성된 노드의 집합을 의미합니다. 클러스터는 데이터 및 요청을 여러 노드에 분산시켜 처리합니다. 이러한 방식은 높은 가용성과 확장성을 보장하며, 데이터 손실 위험을 최소화합니다.

노드(Node) : 노드는 Elasticsearch가 실행 중인 하나의 프로세스 혹은 인스턴스에 해당됩니다. 노드는 데이터 저장, 검색 작업 처리, 클러스터 관리 등 다양한 역할을 수행합니다.

샤드(Shard) : 샤드는 Elasticsearch에서 데이터를 분할하여 저장하는 기본 단위입니다. 샤드는 Primary shard와 replica shard로 구분되며, 이를 통해 데이터를 여러 노드에 분산시켜, 검색 및 색인 작업의 부하를 분산시켜줍니다.

복제(Replica) : 복제는 데이터의 가용성과 내결함성을 향상시키기 위해 사용됩니다. 각 주 샤드는 하나 이상의 복제 샤드를 가질 수 있으며, 이 복제 샤드는 다른 노드에 위치합니다. 노드 장애 발생 시, 복제 샤드가 주 샤드의 역할을 대신 수행할 수 있습니다.


Elasticsearch 물리 아키텍처



V. Elastic Stack

Elastic stack은 데이터를 수집, 실시간으로 검색, 분석 및 시각화할 수 있는 기술 모음이라 할 수 있습니다. Elastisearch, Logstash, Kibana, Beats 기술들 합쳐서 Elastic stack이라는 이름으로 부르고 있습니다. Elasticsearch는 이러한 기술들과 함께 연동해서 사용한다면 활용성이 극대화됩니다.


Beats : 경량 데이터 수집 도구로, 서버나 컨테이너에서 직접 데이터를 수집하여 elasticsearch나 logstash로 전송하는 역할을 합니다.

logstash :  서버 사이드 데이터 처리 파이프라인으로, 다양한 소스에서 데이터를 수집, 변환, 그리고 전송하는 역할을 합니다.

Kibana : Elasticsearch 데이터를 시각화하고 탐색하기 위한 사용자 인터페이스를 제공합니다.

Elastic Stack의 활용 흐름 

이러한 Elasticsearch의 특징들은 단순한 검색 엔진을 넘어서 대규모 데이터셋의 신속한 처리와 분석을 가능하게 만들어줍니다. Elasticsearch는 데이터를 기반으로 한 인사이트와 의사 결정을 지원하는 핵심 도구로 활용될 수 있습니다. 

데이터가 핵심 자산이 되는 만큼 대규모의 데이터를 신속하게 처리하고 분석하셔야 하는 분들은 한 번쯤 활용해봐도 좋을 기술이지 않을까 생각됩니다.



Reference

https://mahesh-mahadevan.medium.com/log-aggregation-using-bek-beats-elasticsearch-and-kibana-stack-and-ingest-apis-3cdd6f997637

https://velog.io/@koo8624/Database-Elastic-Search-2%ED%8E%B8-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98Architecture

https://twofootdog.tistory.com/53

https://yumdata.tistory.com/292

https://medium.com/@irene-zhou/rdbms-vs-elasticsearch-e1e8dd11818

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari