무작정 개발.Vlog

[Elastic Search] 기초 개념잡기

by 무작정 개발
반응형

 

본 포스팅은 ELK Stack 7.x 버전 기준으로 정리하였습니다. 잘못된 부분이 있다면 댓글로 지적해주시면 감사하겠습니다 

 

ElasticSearch
ElasticSearch


1. ElasticSearch 란?

ElasticSearch는 Apache Lucene(아피치 루씬) 기반의 Java 오픈소스 분산 검색 엔진이다.

그리고 Rest API를 기본으로 지원하며 모든 데이터 조회, 입력, 삭제를 Http 프로토콜을 통해 Rest API로 처리한다.

 

Elastic Search 특징

  • Scale out
    • 샤드(Shard)를 통해 규모가 수평적으로 늘어날 수 있다.
  • 고가용성
    • 레플리카(Replica)를 통해 데이터의 안전성 및 신뢰성을 보장한다.
  • Restful
    • 데이터의 CRUD 작업은 HTTP Restful API를 통해 수행하고, 각각 다음과 같이 대응한다.
Data CRUD Elastic Search Restful
SELECT GET
INSERT PUT
UPDATE POST
DELETE DELETE

ElasticSearch는 검색 엔진 개발에 단독으로 사용되기도 하며,

ELK( ElasticSearch / Logstatsh / Kibana ) 스택으로 사용된다.  ELK 스택은 다음과 같다.

 

Elastic Search + Logstash + Kibana를 묶어 ELK 스택이라는 서비스명을 제공했으나 5.0.0 버전부터
Beats가 포함되면서 Elastic 스택이란 이름으로 서비스가 제공되고 있다.

 

ELK Stack
ELK Stack

  • Elastic Search
    • 루씬(Apache Lucene) 기반의 Full Text로 검색이 가능한 오픈소스 분석 엔진
    • Rest API를 이용해 처리하고, 대량의 데이터를 신속하게 저장, 검색, 분석이 가능하다.
  • Logstash
    • 플러그인을 이용해서 데이터 집계와 보관, 서버 데이터 처리를 담당
    • 파이프라인으로 데이터를 수집해 필터를 통해 변환 후 Elastic Search로 전송
    • Logstash의 데이터 처리 : 입력 -> 필터 -> 출력
      • 입력 : 데이터 저장소에서 데이터를 입력 받음
      • 필터 : 데이터 확장, 변경, 필터링, 삭제 등 가공
      • 출력 : 데이터를 데이터 저장소로 전송
  • Kibana
    • Elastic Search의 빠른 검색을 통해 데이터를 시각화 및 모니터링
    • Elastic Search에 색인된 데이터들을 관리 및 가공할 수 있는 Node.js로 개발된 관리 도구
    • Discover, Visualize, DashBoard 3개의 기본 메뉴와 다양한 App들로 구성되어 있고, 플러그인을 통해 설치 가능
  • Beats
    • 데이터를 Logstash 혹은 Elastic Search로 전송하는 도구
    • Logstash와 비슷한 기능을 가진 경량 로그 수집 파이프라이닝 툴 -> Go 언어로 개발되었음

 

출처 : https://www.edureka.co/blog/elk-stack-tutorial/
출처 : https://www.edureka.co/blog/elk-stack-tutorial/


2. Elastic Search와 DB 비교

Elastic Search는 DB 구조와 유사하여 비교하면서 설명하면 이해하기 쉽다.

DB Elastic Search
Table (테이블) Index (인덱스)
Row (행) Document (문서)
Column (열) Field (필드)
Schema (스키마) Mapping (매핑)
Elastic Search 7.x 버전 이전에는 Type이 존재하였는데 7.x 버전이 되면서 Type이 사라졌다.
자세한 내용은 하단 첨부 글 참조

[ElasticSearch] 7.x 버전 전 후 의 차이점

 

[ElasticSearch] 7.x 버전 전 후 의 차이점

1. ElasticSearch 7.x 이전 버전 Type (타입)이 존재했음 -> DB의 Table (테이블)과 유사한 개념 DB( ex:Mysql) ElasticSearch DataBase (데이터베이스) Index (인덱스) Table (테이블) Type (타입) Row (행_가로)..

backendcode.tistory.com

 

3. Elastic Search 아키텍처

Elastic Search의 개념들은 RDBMS에서도 존재하는 개념들이다.

하단의 사진은 Elastic Search의 아키텍처이다.

ElasticSearch 아키텍처 구조
출처 :https://github.com/exo-archives/exo-es-search

[ 논리적 구조 ]

(1) Document (도큐먼트, 문서)

Elastic Search 데이터 최소 단위 (RDBMS의 Row와 유사)이다.

JSON 오브젝트 하나하나의 Document는 다양한 필드(Field)로 구성되어 있으며, 이 필드에는 데이터 필드에 해당하는

데이터 타입(Type)이 들어간다. 그리고 중첩 구조를 지원하기에 Document 내부에 Document 삽입이 가능하다.

 

(2) Field (필드)

필드(Field)는 Document에 들어가는 데이터 타입으로 RDBMS의 열(Column)과 유사하다.

하지만 Elastic Search의 필드는 RDBMS 보다 동적이다. RDBMS(관계형 DB)에서는 하나의 열(Column)이 하나의 데이터 타입만

가질 수 있지만, Elastic Search에서는 하나의 필드(Field)가 여러 개의 데이터 타입을 가질 수 있다.

 

(3) Index (인덱스)

색인(Indexing) 과정을 거친 결과물 or 색인된 데이터가 저장되는 저장소이다. RDBMS의 Table과 유사하다.

Elastic Search에서는 Document들의 논리적인 집합을 표현하는 단위이다.

 

(4) Mapping (매핑)

매핑(Mapping)은 필드(Field)와 필드의 속성을 정의하고 색인 방법을 정의한다.

매핑 정보에 여러 가지 데이터 타입 지정이 가능하지만 필드명 자체는 중복이 불가능하다.

 

[ 추가적인 용어 개념 요약정리 ]

(1) 색인 (Indexing) - 데이터를 검색될 수 있는 구조로 변경하기 위해 원본 문서를 검색어 토큰들로 변환하여 저장하는 과정
(2) 검색 (Search) - 인덱스에 들어있는 검색어 토큰들을 포함하고 있는 문서를 찾아가는 과정
(3) 질의 (Query) - 사용자가 원하는 문서를 찾거나 집계 결과를 출력하기 위해 사용하는 검색어 혹은 검색 조건

 

출처 https://esbook.kimjmin.net/02-install/2.1
출처 https://esbook.kimjmin.net/02-install/2.1

 

[ 물리적 구조 ]

(1) Cluster (클러스터)

클러스터(Cluster)란 Elastic Search에서 가장 큰 시스템 단위를 의미하며, 최소 1개 이상의 노드로 이루어진 노드들의 집합이다.

서로 다른 클러스터끼리는 데이터의 교환 및 접근을 할 수 없는 독립적인 시스템으로 유지되고, 여러 대의 서버가

1개의 클러스터를 구성할 수 있고, 1개의 서버에 여러 개의 클러스터가 존재할 수 있다.

 

(2) Node (노드)

노드(Node)는 Elastic Search 클러스터에 포함된 단일 서버로서 데이터를 저장하고 클러스터의 색인화 및 검색 기능에 참여한다.

노드는 클러스터처럼 이름으로 식별되며, 특정 노드 이름으로 정의할 수 있고, 관리의 목적에 맞게 정의한다.

 

(3) Shard (샤드)

인덱스(Index) 내부에는 색인된 데이터들이 존재하는데 이 데이터들은 하나로 뭉쳐서 존재하지 않고 물리적 공간에

여러 개의 부분들로 나뉘어서 존재한다. 이러한 부분들을 샤드(Shard)라고 한다.

 

(4) Segment (세그먼트)

세그먼트(Segment)란 Elastic Search에서 문서(Document)의 빠른 검색을 위해 설계된 자료구조이다.

각 샤드는 다수의 세그먼트로 구성되어 있다. 

Elastic Search에 데이터를 저장하면, 이것을 메모리에 모아 두고 새로운 세그먼트를 디스크에 기록하여 검색을

리프레쉬(refresh)한다. 이로 인해 새로운 검색 가능한 세그먼트가 만들어지게 된다.

 

(5) Replica (레플리카)

레플리카(replica)는 또 다른 형태의 샤드(Shard)라고 말할 수 있다.

노드(Node)를 손실했을 경우 데이터의 신뢰성을 위해 샤드를 복제해둔 것이 레플리카이다.

따라서 shard와 replica는 서로 다른 노드에 존재하는 것을 권장한다. [ 하단 이미지 참조 ]

replica, shard는 다른 노드에 존재하는 것을 권장
replica, shard는 다른 노드에 존재하는 것을 권장


Elastic 스택에는 공식 문서가 존재하여 읽어보며 예제를 따라 해 보는 것이 많은 도움이 된다.

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/modules-discovery.html

 

Discovery and cluster formation | Elasticsearch Guide [7.17] | Elastic

Discovery and cluster formationedit The discovery and cluster formation processes are responsible for discovering nodes, electing a master, forming a cluster, and publishing the cluster state each time it changes. The following processes and settings are p

www.elastic.co

 

Elastic 스택 7 버전 기준으로 한글로 번역된 문서로 참고용으로 올리는데 이 예제를 따라 해 보면 많은 도움이 된다.

https://esbook.kimjmin.net/

 

Elastic 가이드 북 - Elastic 가이드북

7. 인덱스 설정과 매핑 - Settings & Mappings

esbook.kimjmin.net

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기