Elasticsearch를 제대로 활용하려면 먼저 Elasticsearch 구조와 기본 용어를 이해하는 것이 중요합니다.
Index, Shard, Node, Cluster 같은 개념은 처음엔 낯설지만,
검색 엔진의 핵심을 파악하는 데 꼭 필요한 기초 지식입니다.
이번 글에서는 이러한 기본 개념들을 하나씩 정리해 보고
Elasticsearch 구조에 대해 살펴보겠습니다.
1. Elasticsearch 구조도
Cluster, Node, Index, Shard, Segment, Document, Field, Mapping
1. Cluster: 노드들의 집합(최상위 단위)
Cluster(클러스터) 는 하나 이상의 노드로 이루어진 최상위 단위로, Elasticsearch 전체 시스템을 의미합니다.
같은 클러스터 이름을 공유하는 노드들이 클러스터 상태(인덱스/샤드 메타데이터)를 공유하고, 쿼리를 분산 처리합니다.
2. Node (노드)
클러스터를 구성하는 개별 서버 단위입니다. 한 클러스터에는 여러 노드가 존재합니다.
- Master: 클러스터 메타데이터 관리(샤드 할당, 인덱스 생성/삭제 등). 선출된 1대가 Master.
- Data Node: 색인·검색의 계산/저장 리소스를 맡는 실무형 노드.
- Coordinating Node: 분산 쿼리를 팬아웃하고 결과를 머지하는 게이트웨이.
- Ingest Node: 수집 단계에서 전처리 파이프라인 수행(파싱·정규화·마스킹 등).
한 물리 서버에 역할을 겸할 수도 있고, 규모가 커지면 역할을 분리합니다.
3. Index (인덱스)
데이터를 논리적으로 묶어 관리하는 단위입니다. RDB의 Database(혹은 큰 테이블 묶음)라고 생각하시면 이해하기 편합니다.
그리고 인덱스는 생성 시 샤드/리플리카 개수 등의 설정을 가집니다.
예시:
PUT my-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": { "properties": { "title": { "type": "text" } } }
}
4. Shard (샤드)
인덱스를 쪼개서 분산 저장하는 단위, 인덱스의 물리적 파티션이라고 할 수 있습니다.
데이터와 색인을 분산시켜 처리량과 확장성을 높입니다.
- Primary Shard: 원본 데이터 저장
- Replica Shard: 복제본 저장 (고가용성 & 부하 분산)
여기까지의 Cluster / Node / Shard 개념을 구조도로 보고 넘어 갑시다.
Cluster / Node / Shard
- Cluster
Elasticsearch에서 가장 큰 단위입니다. 여러 Node가 모여 하나의 Cluster를 이루며, 같은 Cluster 안에 있는 Node들은 데이터를 공유하고 검색을 협력합니다. - Node
Cluster를 구성하는 개별 서버입니다. 실제 데이터를 저장하고, 검색 및 색인 요청을 처리합니다. Node는 역할에 따라 구분되며, 여러 개의 Node가 모여 안정성과 확장성을 보장합니다. - Shard
이미 위에서 설명했듯이 Index를 물리적으로 쪼갠 단위입니다. Primary Shard와 Replica Shard로 나뉘며, Primary는 실제 데이터를 저장하고 Replica는 고가용성과 부하 분산을 위해 존재합니다.
요약하자면, Cluster는 Node들의 집합, Node 안에는 여러 Index가 있고, Index는 여러 Shard로 나뉘어 저장되는 구조입니다.
여기서 Shard를 또 자세히 들여다 봅시다.
5. Segment (세그먼트)
Lucene에서 실제 데이터가 저장되는 가장 작은 단위입니다.
- 샤드 내부는 수많은 Segment로 구성됩니다.
- Segment는 불변(immutable) 구조라 새 데이터가 들어올 때마다 새로운 Segment가 만들어지고, 주기적으로 병합(merge)됩니다. 검색은 결국, Segment 단위에서 실행됩니다.
6. Document (도큐먼트)
실제 데이터 객체입니다. ES에 저장되는 최소 단위로, JSON 형태입니다.
RDB로 치면 Row에 해당하며, 각 속성은 필드로 표현됩니다.
예시:
{
"_id": "doc1",
"title": "크림치즈",
"price": 4900,
"tags": ["food","cheese"],
"ts": "2025-09-01"
}
샤드는 이렇게 구성되어 있습니다.
7. Field (필드)
Document는 JSON 한 건이고, 그 안의 각 키-값 쌍이 Field입니다. 도큐먼트 내부의 개별 데이터 항목이라고 할 수 있습니다.
{
"_id": "doc1",
"title": "크림치즈", ← Field
"price": 4900, ← Field
"tags": ["food","cheese"], ← Field
"ts": "2025-09-01" ← Field
}
문서의 속성(키)과 값으로 이루어집니다. RDB의 Column과 비슷합니다.
필드는 타입을 가집니다: keyword, text, long, date, boolean, nested, object, flattened 등.
- keyword: 정확 일치/집계/정렬용(토큰화 X)
- text: 전문 검색용(토큰화 O, 분석기 적용)
- nested: 배열 내부의 독립 문서처럼 다뤄야 할 때
- object: 하위 필드를 갖는 객체
- flattened: 임의 키가 많은 반정형 JSON을 한 덩어리로 다룰 때
이는 다음의 'Mapping'을 기준으로 처리 됩니다.
8. Mapping (매핑)
인덱스 각 필드의 데이터 타입과 분석 방법을 정의하는 스키마입니다.
각 Field는 매핑(Mapping)에 따라 저장·색인 방식이 달라집니다.
- title: text → 분석기(Analyzer)로 토큰 분리 후 역색인
- title.keyword: keyword → 전체 문자열 그대로 저장
- price: integer → 숫자로 저장, DocValues 생성
- ts: date → 내부적으로 epoch milliseconds 로 변환
- Dynamic Mapping: 스키마에 없는 필드를 자동 생성. 편리하지만 과도하면 필드가 폭증할 수 있어(별도 글에서 다룸) 기본은 명시적 매핑을 추천합니다.
- 멀티 필드: 하나의 필드를 text와 keyword로 동시에 저장해 검색+집계를 함께 쓰는 패턴 입니다.
이 순서로 Elasticsearch에 데이터가 저장되는 흐름도 중요한데, 이 부분은 다음 포스팅에서 다루도록 하겠습니다.
2. 노드 타입 정리
- Master Node
클러스터를 제어하는 중심 역할을 맡습니다. 인덱스 생성/삭제, 노드 관리, 샤드 할당 등 클러스터의 메타데이터를 관리합니다. 안정적인 운영을 위해 보통 여러 개의 Master 후보 노드를 두고 장애 대비를 합니다. - Data Node
실제 데이터가 저장되는 노드입니다. 색인과 검색 요청을 직접 처리하기 때문에 CPU, 메모리, 디스크 사용량이 많습니다. 운영 환경에서는 리소스 모니터링이 필수입니다. - Coordinating Node
클라이언트 요청을 받아 적절한 Data Node나 Master Node로 전달하고, 응답을 취합해 최종 결과를 반환하는 역할을 합니다. 즉, 요청을 조율하는 허브 역할입니다. - Ingest Node
데이터가 저장되기 전에 전처리를 담당합니다. 예를 들어 로그 문서가 들어오기 전에 특정 필드를 파싱하거나 변환하는 작업을 수행할 수 있습니다.
3. 정리
- Elasticsearch 구조는 크게 Document → Index → Shard → Node → Cluster 로 이어지는 계층 구조를 가진다.
- Document는 JSON 단위 데이터이며, Index는 Document 집합, Shard는 Index의 물리적 파티션이다.
- Node는 Cluster를 구성하는 개별 서버이고, Node의 역할에 따라 Master, Data, Coordinating, Ingest로 구분된다.
- 이러한 구조 덕분에 Elasticsearch는 대규모 데이터에 대해 안정적이고 빠른 분산 검색이 가능하다.
다음 편에서는 Elasticsearch의 실제 동작 방식과 데이터가 어떻게 저장·검색되는지,
그리고 샤드·리플리카 설정이 어떻게 이루어지는지를 알아보겠습니다.
'ES' 카테고리의 다른 글
Elasticsearch 데이터는 어떻게 저장되고 검색될까? (0) | 2025.09.19 |
---|---|
Elasticsearch 역색인이란? Inverted Index (1) | 2025.09.17 |
Elasticsearch 비밀번호 변경 초기화 하는 법 (0) | 2025.09.17 |
Elasticsearch란? 개요와 ELK 스택 (0) | 2025.09.16 |
Elasticsearch SSLHandshakeException: PKIX path building failed 해결 (1) | 2025.09.16 |
댓글