Elastic Search란?
Elastic Search는 JAVA 오픈소스 분산 검색 엔진. 데이터를 인덱싱하여 저장하고, 검색, 집계등의 기능을 수행한다.
대표적인 장점으로는 RDBMS에서 다루기 어려운 Full text Search 기능이 제공된다.
Elastic Search의 구조
Document
ElasticSearch에서 데이터의 최소 단위. RDBMS에서의 row를 생각하면 된다.
-> 실제로는 JSON 객체이며, 내부적으로 많은 Field와 Document 내부에 Document가 존재할 수 있다.
Field
Document 안에 들어가는 데이터. RDBMS의 Column
Type
여러 Document가 모여서 하나의 type을 이룬다. RDBMS의 table.
Index
데이터가 검색될 수 있는 구조로 변경하기 위해 원본 문석를 검색어 토큰들로 변환하여 저장한 것.
RDBMS의 Database 혹은 Table로 생각하면 된다.
Shard
Index가 분산되어 처리되는 단위. 각 Shard는 물리적 노드에 나뉘어서 저장된다.
1. Primary shard: 모든 document들은 하나의 primary shard에 저장된다. 기본 갯수는 5개
2. Replica Shard: Primary shard의 복제본. 원본데이터에 fault 발생시 복구하기 위해 사용
Elastic Search의 장점
Elastic Search가 Key word 기반 검색에서 RDBMS보다 Like query를 빠르게 검색할수 있다.
그중 가장 큰 이유는 데이터 색인방식에서의 차이가 있다.
역색인
Elastic Search는 기본적으로 역색인 방식으로 데이터를 색인한다. 이는 특정 키워드를 해당하는 문서 ID와 함께 저장하는 방식이다.
이와 반대로 RDBMS를 비교해보자면, RDBMS는 색인 방식을 사용하여 키워드 검색을 진행하는데 이는 B-tree 또는 해시 인덱스 데이터 구조를 사용한다고 보면 된다. 때문에 만약 특정 키워드를 찾기 위해서는 모든 데이터에 대해 검색을 진행해야한다.
그리고 이러한 검색 과정에서 실제 키워드 기반 검색 속도 차이가 난다고 볼 수 있다.
ElasticSearch vs RDBMS
주요 차이는 아래와 같다.
RDBMS | Elastic Search | |
주 목적 | 데이터 저장, 관계형 데이터 관리 | 빠르고 복잡한 검색 (특히 Full-text Search) |
데이터 모델 | 테이블, 스키마, 관계(Foreign Key 등) 기반 | JSON 문서 기반 (스키마는 유연) |
검색 속도 | 기본 인덱스 이용 - 일반적인 조회는 빠름, 복잡한 검색은 느릴 수 있음 | 검색 최적화(역색인 구조)로 매우 빠름 |
확장성 | 수직 확장(CPU, 메모리 업그레이드 중심) | 수평 확장(노드 추가) 아주 쉬움 |
Full-text Search | 느리거나 부가 설정 필요 | 기본 탑재, 초고속 검색 |
데이터 일관성 | 매우 강함 | eventual consistency(약한 일관성) |
정리를 해보자면 먼저 Elastic Search의 장점은 아래와 같다.
ElasticSearch는 Full-text 검색, 집계 등 다양한 기능을 지원 함으로 데이터 분석 및 검색 빠름
반면 RDBMS는
RDBMS는 주로 트랜잭션과 ACID 원칙을 지키므로 비즈니스 데이터를 저장하고 관리하는데 중점
결론적으로는 Full-text 검색, 키워드 검색이 필요한 경우에는 Elastic Search를 사용하고 기본 비즈니스 데이터를 ACID에 맞게 안정적으로 저장하고 관리하기 위해서는 RDBMS가 유리하다고 볼 수 있다. 그리고 주요 특징으로는 Elastic Search는 http 요청을 통해 검색을 진행하기 때문에, Full-text-Search이더라도 실제 검색 대상 데이터가 많을때 혹은 많아질 수 있을때 사용하는 쪽이 더 유리하다고 생각한다.(개인적인 의견)
'DevOps&Cloud' 카테고리의 다른 글
NAT(Network Address Translation) 이란 무엇이고 왜 필요한지 (0) | 2025.05.01 |
---|---|
CICD: JIB(Java Container Image Build) 장점과 언제 쓰는것이 좋을까 (1) | 2025.04.30 |
Kubernetes Architecture: Control Plane 과 Worker Node 이해하기 (0) | 2025.04.23 |
Helm이란? (0) | 2025.04.23 |
Reverse Proxy, LoadBalancer의 차이 알아보기 (0) | 2025.04.14 |