Elastic Search란?
방대한 양의 데이터를, 거의 실시간에 가깝게 저장, 검색, 분석 할 수 있도록 하는 오픈소스 분산 검색 엔진이다.
ELK Stack이란?
Elastic Search, Logstash, Kibana 3개를 합쳐 ELK라고 부른다. 보통 로그 분석으로 사용되며, 여기서 특히 Elastic Search가 범용성이 높아 단독으로 사용되는 경우가 많다.
- FileBeat : 로그 파일 Logstash에게 전달하기 위한 놈
- Logstash : 다양한 소스의 로그 또는 데이터를 수집, 집계, 파싱하여 ElasticSearch에게 전달하는 놈
- ElasticSearch : Logstash로 부터 받은 데이터를 검색 및 집계하는 역할
- Kibana : ElasticSearch로 검색한 데이터를 GUI로 시각화 및 모니터링 할 수 있도록 해주는 역할
ElasticSearch와 RDB의 비교
ElasticSearch도 일종의 No SQL DB이다. 따라서, 약간 개념은 다르지만, RDB의 개념과 비슷하게 친숙해지기 위한 비교 표. 비슷하게 역시 Cluster를 구성해서 여러개의 node를 두고, index안에서도 여러개의 샤드를 나누고 replica하는 등 고가용성 유지를 위해 구성할 수 있다.
→ Index안에 Shard안에 Type안에 여러개의 Field를 가진 Document가 있다고 보면 됩니다. mapping은 각 document의 필드의 속성을 정의하는 것입니다. (타입 같은거, 한번 생성한 맵핑 타입은 변경 못합니다.)
ElasticSearch의 특징
1. Scale Out : 샤드를 통해 규모가 수평적으로 늘어날 수 있음
2. 고가용성 : Replica를 통한 데이터 안정성
3. Schema Free : No SQL Document DB이기 때문에 (Json 문서로 검색) 스키마 개념 x
4. Restful : 데이터 CRUD 작업은 HTTP RESTFUL API를 통해 수행됨
ex)
curl -XPOST 'localhost:9200/victolee/blog/1?pretty' -d '
{"postName" : "elasticsearch", "category" : "IT"}' -H 'Content-Type: application/json'
→ victolee(Index), blog(Type), 1(ID, 지정하지 않을 시 자동 생성), pretty(사람이 보기 좋은 형태로 결과 반환해라 명령), -d (추가할 데이터), -H (헤더를 명시) → Document 생성
5. 역색인 구조 (Inverted Index)
- RDB에서 Index의 반대 개념
- 기존의 Index는 목차처럼 위치를 보고 데이터를 찾아가는 개념
딱 실생활에서 와닿는 개념을 예시로 들면 RDB의 Index는 책 맨 앞에 있는 목차이다. 우리가 위치를 보고 해당 페이지로 이동해서 정보를 얻는다. 반대로 ElasticSearch의 역색인은 책 맨 뒤에 있는 찾아보기 같은 개념이다. 즉 단어를 보고 위치를 찾아가는 개념이다. 특정 키워드가 어딨는지 찾아보고 정보를 얻는다.
-> 따라서 이러한 역색인 구조 때문에 RDB에서 Like문으로 Full Text Search하는 것 보다 특정 키워드에 따른 검색이 훨씬 빠르다!! 뿐만 아니라, 여러 단어변형/동의어/유의어를 활용해서 검색되게도 할 수 있다. 예를 들어서, "자동차"라고 검색해도 "차량"으로도 검색되게 하고 싶을 수 있다. RDB는 이게 좀 힘든데, ElasticSearch는 동의어 사전을 구성해서 이를 쉽게 구현이 가능하다.
ElasticSearch API
ElasticSearch에서는 여러가지 기능들에 접근할 수 있도록 제공해주는 엔드포인트. 종류가 굉장히 많으므로 일부만 다룰 것. 아래 공식 문서에 자세히 나와있습니다.
이후, 다룰 ElasticSearch의 각종 기능들은 API를 통해서 호출된다고 보시면 됩니다.
'BackEnd > DB' 카테고리의 다른 글
[DB] CSV 파일 데이터 DB에 업로드 (8) | 2024.11.13 |
---|---|
[DB] ElasticSearch Index 설정과 텍스트 분석 (0) | 2024.11.08 |
[DB] Redis, 실제 개발에서 어떻게 활용할 수 있을까? (0) | 2024.05.10 |