IT/Elasticsearch

[Elasticsearch] 1. 개념 간단히 이해하기

snapcoder 2023. 11. 27. 15:31
728x90
반응형
SMALL

📌 스포요약

- Beats 티끌모아 수집, 원격수집, 수집 > Logstash 데이터 종합 수집 > Elasticsearch 저장/검색 > Kibana 시각화/모니터링

Elastic Stack 구조

 

📌 Elasticsearch 란 무엇인가?

- Ealstic Stack의 핵심 솔루션으로 루씬(Lucene) 기반 검색 엔진임.

- 전문 검색(full text search) 기능 제공이 목적임.

- 자바로 개발됨

- (어느 남편이 아내의 요리 레시피 검색을 도와주기 위해 만들었다고..)

- (구글 검색엔진처럼, 회사 DB를 like문보다 효율적으로 검색 가능하다고 생각하면 편함)

 

📌 Elasticsearch 의 특징

- 오픈소스 검색엔진(https://github.com/elastic)

- 고차원적인 전문(full text) 검색

- 통계 분석

- 스키마리스 (Schemaless) : 정형화되지 않은 다양한 형태의 문서도 자동 색인/검색 가능

- 비정형 데이터 색인/검색 가능 (관계형DB와의 차이점)

- 형태소 분석 통해 자연어 처리도 가능 (관계형DB와의 차이점)

- 역색인 구조 기반 빠른 검색 속도 보장 (관계형DB와의 차이점)

- 준 실시간 분석 시스템

- RESTFul API

- 멀티테넌시 (multitenancy) : 서로 다른 인덱스라도 검색 필드명이 같으면 여러 인덱스를 한번에 조회 가능.

- Document-Oriented : 여러 계층의 데이터를 JSON 형식의 구조화된 문서로 인덱스에 저장 가능.

- 확장성과 가용성 : 샤드라는 작은 단위로 나눠 분산구조로 확장할 경우 대용량의 문서를 보다 효율적으로 처리 가능.

- 역색인 (Inverted Index) : 루씬 기반의 검색엔진으로 역색인을 지원함.

 

📌 Elasticsearch 의 한계

- '실시간'이 아니다. 일반적으로 색인된 데이터는 통상적으로 1초 뒤에나 검색이 가능해진다. 색인된 데이터는 내부적 커밋(Commit)과 플러시(Flush) 같은 복잡한 과정을 거치기 때문에 실시간이 아니다. 엄밀히 따지자면 준 실시간(Near Realtime)이라고 할 수 있다.

- 트랜잭션과 롤백 기능을 제공하지 않는다. 엘라스틱서치는 기본적으로 분산 시스템으로 구성된다. 전체적인 클러스터의 성능 향상을 위해 시스템적으로 비용 소모가 큰 롤백(Rollback)과 트랜잭션(Transaction)을 지원하지 않기 때문에 최악의 경우 데이터 손실의 위험이 있다.

- 데이터의 업데이트를 제공하지 않는다. 엘라스틱서치는 업데이트 명령이 요청될 경우 기존 문서를 삭제하고 변경된 내용으로 새로운 문서를 생성하는 방식을 사용한다. 이러한 이유로 단순 업데이트에 비해서는 상대적으로 많은 비용이 발생한다. 이를 통해 불변적(Immutable)이라는 이점을 취할 수도 있다.

 

 

 

 

📌 Logstash 란 무엇인가?

- 원래 Elasticsearch와 별개로 다양한 데이터 수집과 저장을 위해 개발된 프로젝트였었음.

- Elasticsearch의 입력 수단으로 Logstash를 사용하기 시작함. (데이터 수집 도구)

- 입력, 필터, 출력 3가지 기능 수행함.

 

📌 Kibana 란 무엇인가?

- 시각화 도구의 가장 인기있는 녀석임. (Elasticsearch는 Restful 한 속성과 JSON 문서 기반 통신을 지원 > http 프로토콜을 이용해 어떤 클라이언트와도 손쉽게 연동이 가능하기 때문에 다양한 시각화 도구들이 개발되고 있음)

- 기본메뉴 3가지

   1. Discover : 색인된 소스 데이터들의 검색, 필터링, 히스토그램 그래프 표시

   2. Visualize : 집계 기능 기반 데이터 통계를 차트로 표시

   3. Dashboard : 시각화 도구들을 조합해서 화면에 종합적으로 표시

 

📌 Beats 란 무엇인가?

- 경량 데이터 수집기임. (일종의 포워더 성격의 원격 수집기)

구글에서 개발된 Go 언어로 개발됨.

- Logstash의 다양한 기능 > 프로그램 부피 커짐 > 모든 단말에 Logstash 설치 부담됨 > 원격 수집기 필요 > Beats 탄생

- Packetbeat, Libbeat, Filebeat, Metricbeat, Winlogbeat, Auditbeat 등등이 있음. (자세한 설명은 여기서)

 

 

 

📌 용어비교 (엘라스틱서치 vs 관계형 데이터베이스)

- 인덱스 vs 데이터베이스

- 샤드 vs 파티션

- 타입 vs 테이블

- 문서 vs 행

- 필드 vs 열

- 매핑 vs 스키마

-Query DSL vs SQL

 

📌 용어정리

- [명사] 인덱스 (index, indices) : 데이터 저장 공간. (색인 과정을 거친 결과물, 또는 색인된 데이터가 저장되는 저장소. Elasticsearch에서 도큐먼트들의 논리적인 집합을 표현하는 단위.)

- 샤드 (shard) : 클러스터에서 데이터를 배포하는 단위. (다수의 샤드로 문서를 분산저장하여 데이터 손실 위험 최소화)

- 타입 (type) : 인덱스의 논리적 구조. 하나의 인덱스에 하나의 타입만 존재가능.

- 문서 (document) : 행의 개념. JSON 포맷으로 데이터 저장 최소 단위.

- 필드 (Field) : 열의 개념. (이긴한데 보다 동적인 데이터 타입.) 하나의 필드에 다수의 데이터 타입 가능.

- 매핑 (Mapping) : 스키마의 개념. 문서의 필드와 필드의 속성을 정의하고 그에 따른 색인 방법을 정의하는 과정.
- 검색 (search) : 인덱스에 들어있는 검색어 토큰들을 포함하고 있는 문서를 찾아가는 과정.
- 질의 (query) : 사용자가 원하는 문서를 찾거나 집계 결과를 출력하기 위해 검색 시 입력하는 검색어 또는 검색 조건

- [동사] 색인 (indexing) : 데이터가 검색될 수 있는 구조로 변경하기 위해 원본 문서를 검색어 토큰들로 변환하여 저장하는 일련의 과정.

※ 원본데이터 > 색인 > 인덱스 > 검색 > 사용자 제공

 

 

📌 참고자료

- Elastic 가이드 북 링크

- 참고링크1 : Elastic Stack - ElasticSearch

- 참고링크2 : Elasticsearch로 빅데이터 다뤄보기 01.개념정리

- 도서 : 엘라스틱 스택 개발부터 운영까지 (김준영 정상운 지음, 박재호 감수)

- 다음 게시글 : [Elastic Search] 2. 데이터 처리

728x90
반응형
LIST