개발놀이터

Elasticsearch 본문

CS 지식/데이터베이스

Elasticsearch

마늘냄새폴폴 2023. 3. 17. 01:11

이번 포스팅에서는 Elasticsearch에 대해서 알아보겠습니다. 

 

Elasticsearch가 뭐야? 라고 물으면 "index 아냐?", "검색 엔진이잖아", "데이터베이스 분석하는 툴이지", 구글같은거?" 이런 많은 대답이 오고 갈 수 있는 이유는 Elasticsearch가 위의 모든 내용을 포함하고 있기 때문입니다. 

 

Elasticsearch는 웹사이트나 document에서 간단한 검색부터, 로그데이터를 분석하고 모으는 일이나, 데이터를 분석하고 시각화해주는 똑똑한 비즈니스 툴이죠.

 

이번 포스팅에서는 Elasticsearch가 어쩌다 가장 인기있는 엔터프라이즈 검색 엔진이 되었는지 그리고 가장 인기있는 DBMS 탑10에 이름을 올리게 되었는지에 대해서 설명해보겠습니다. 

 

 

Elasticsearch가 뭐야?

Elasticsearch는 자바로 개발된 Apache의 Lucene(루씬)의 오픈소스 검색, 분석 엔진에서 떨어져나온 기술입니다. Elasticsearch는 Lucene의 오픈소스 프레임워크의 확장버전이죠. 

 

Elasticsearch는 큰 볼륨의 데이터를 실시간으로 수밀리초안에 저장하고 검색하고 분석하도록 해줍니다. 이렇게 빠르게 작업을 수행할 수 있는 이유는 텍스트를 직접적으로 검색하는 것 대신 인덱스로 검색하기 때문인데요. Elasticsearch는 테이블이나 스키마 대신 document에 기반한 구조를 갖고 있고 REST API를 확장적으로 사용해 데이터를 저장하고 검색할 수 있습니다. 

 

이 말은 NoSQL에서 가진 특징인 free schema 의 특징과 REST API가 가진 특징을 모두 담고 있어서 확장에도 유연하게 대처할 수 있고 대용량의 데이터를 담는데도 큰 무리가 없는 시스템이라는 의미입니다. 

 

 

Elasticsearch의 구조

Document

Document는 JSON으로 표현된 Elasticsearch안에서 인덱스화될 수 있는 정보들의 가장 기본적인 단위입니다. RDBMS에서 row(행)에 해당하는 값이 바로 document입니다. 

 

Elasticsearch에서 document는 단순히 텍스트 이상이 될 수 있습니다. document는 JSON으로 인코딩된 정형데이터인데요. 이 데이터들은 숫자, 문자, 날짜의 값을 가질 수 있습니다. 

 

각각의 document는 유니크 ID를 가지고 있고 데이터 타입이 주어집니다. 이 데이터 타입은 document가 어떤 엔티티 타입인지를 지시해줍니다. 

 

Index

인덱스는 Elasticsearch 안에서 쿼리할 수 있는 가장 높은 수준의 엔티티입니다. 인덱스는 우리가 RDBMS에서 보던 스키마와 비슷한 구조를 가지고 있죠. 

 

인덱스 안에있는 document들은 굉장히 논리적으로 연관성이 있습니다. 예를 들어서 이커머스 웹사이트에서 우리는 인덱스로 고객, 상품, 주문 등등을 가질 수 있습니다. 

 

이 인덱스는 document에서 인덱싱, 검색, 업데이트, 삭제 실행을 하는 동안 인덱스를 참조하기 위하여 사용되는 이름으로부터 식별하게 됩니다. 

 

Inverted Index

Elasticsearch에서 인덱스는 Inverted index(이하 역색인) 으로 불리웁니다. 이 역색인은 검색엔진이 작동하는 매커니즘입니다. 

 

index(색인)는 흔히 책앞에 있는 목차를 생각하시면 편하고, 역색인은 책 맨 뒤에 나오는 단어별로 몇페이지에 나오는지 수록되어있는 그것을 떠올리시면 됩니다. 

 

이렇게 역색인으로 분리시킴으로써 Elasticsearch는 아주 큰 데이터세트에서 전문을 가장 빠른 방법으로 찾아낼 수 있게 되었습니다. 

 

 

 

Cluster

Elasticsearch 클러스터는 다 같이 연결된 하나이상의 노드 인스턴스들의 그룹입니다. Elasticsearch에서 클러스터의 진정한 힘은 분산된 작업처리, 검색, 인덱싱 능력입니다. 

 

어떤 노드가 어느 클러스터에 포함되기 위해서는 이름에 의해 클러스터의 구성원이 되도록 설정되기 때문에 이 이름은 매우 중요합니다. 

 

 

Node

노드는 클러스터의 일부분인 싱글 서버입니다. 하나의 노드는 데이터를 저장하고, 클러스터의 인덱싱과 검색기능에 참여합니다. 노드는 크게 세가지로 분류할 수 있습니다. Master Node, Data Node, Client Node 이렇게 셋으로 나눌 수 있습니다. 

 

Master Node

마스터 노드는 Elasticsearch 클러스터를 통제하고, 모든 클러스터에 걸친 인덱스 생성과 삭제, 노드의 생성과 삭제와 같은 작업에 대한 책임이 있습니다. 

 

Data Node

데이터 노드는 데이터를 저장하고, 데이터와 연관된 예를 들어검색이나 집계같은 작업을 수행합니다. 

 

Client Node

클라이언트 노드는 클러스터 앞에서 마스터 노드에 대한 요청과 데이터 노드와 연관된 요청을 수행합니다. 

 

 

Shards

Elasticsearch는 샤드라고 부르는 인덱스를 다수의 조각으로 쪼개는 능력을 제공합니다. 각각의 샤드는 그 자체로 완전히 동작합니다. 다수의 샤드를 통해서 인덱스안에서 document로 쪼갬으로써 그리고 다수의 노드로부터 샤드로 쪼갬으로써 Elasticsearch는 충분한 데이터를 가지고 있을 수 있게 됩니다. 

 

이런 샤드들은 하드웨어 트러블이나 클러스터에 노드를 추가하면서 생기는 증가된 쿼리 캐퍼시티를 보호해줄 수 있습니다. 

 

 

Replica (복제)

Elasticsearch는 흔히 replica shard라고 불리는 인덱스의 샤드를 하나 이상의 복제된 인덱스로 만들 수 있게 도와줍니다. 

 

기본적으로 replica shard는 primary shard를 복제한 샤드인데요. 이러한 복제는 충분한 데이터를 제공하고, 하드웨어 트러블이나 서버의 증가하는 검색이나 document를 탐색하는 읽기 요청에 의한 오버헤드를 막아줍니다. 

 

 

 

이러한 Elasticsearch에 대한 전체 도식화를 살펴보면 다음과 같습니다. 

 

 

Elasticsearch는 사실 Elasticsearch, Logstash, Kibana를 합친 ELK의 한 부분입니다. 물론 Elasticsearch가 이 셋중에 가장 핵심적인 역할을 수행하지만 나머지 두개도 ELK에서 꽤나 높은 수준의 서비스를 제공합니다. 

 

이 다음은 ELK중 L, K에 해당하는 Logstash, Kibana에 대해서 알아보도록 하겠습니다. 

 

  • Logstash : 다양한 소스 (DB, csv파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 Elasticsearch로 전달하는 역할을 합니다. 
  • Elasticsearch : Logstash로부터 받은 데이터를 검색 및 집계하여 필요한 정보를 획득하는 역할을 합니다. 
  • Kibana : Elasticsearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링 하는 툴입니다. 

 

쉽게 얘기해서 Kibana는 데이터 시각화 툴, Logstash는 데이터 집계 툴, Elasticsearch는 이런 데이터들을 검색하고 집계하여 필요한 정보를 수집하는 툴 이라고 볼 수 있겠습니다. 

 

 

 

여기까지 Elasticsearch에 대해서 알아봤습니다. 후..이번 포스팅은 정말 힘들었습니다. NoSQL은 이해하는데 그렇게 어렵지 않았는데 Elasticsearch는 굉장히 빡세네요. 처음보는 데이터 구조라 그런 것 같습니다.

 

긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~

 

 

출처

https://www.knowi.com/blog/what-is-elastic-search/

 

Elasticsearch: What it is, How it works, and what it’s used for - Knowi

When people ask, “what is Elasticsearch?”, some may answer that it’s “an index”, “a search engine”, an “analytics database”, “a big data solution”, that “it’s fast and scalable”, or that “it’s kind of like Google”. Dependi

www.knowi.com