Elasticsearch란 무엇인가?
- Lucene 기반 오픈소스 검색 엔진 – Java 라이브러리 Lucene을 기반으로 개발된 분산 검색/분석 엔진
- JSON 문서 저장 및 검색 – 데이터를 JSON 형태의 문서로 저장하고, 빠르게 검색·집계할 수 있음
- Near Real-Time 검색 – 데이터 입력 후 거의 실시간으로 검색 가능 (기본 1초 주기 refresh)
- ELK 스택의 핵심 – Logstash/Beats (수집), Elasticsearch (저장/검색), Kibana (시각화)로 구성된 Elastic Stack의 중심 역할
Elasticsearch의 주요 특징 (Key Features & Advantages)
- 분산 및 확장성 – 멀티 노드 클러스터로 확장 가능, 데이터와 트래픽을 노드 간 분산하여 수평 확장 지원
- 고가용성 – 클러스터로 동작하여 일부 노드 장애에도 데이터 복제본으로 서비스 지속 (자동 failover)
- 유연한 스키마 – 미리 스키마를 정의하지 않아도 동적으로 필드 타입 결정 (Schema-On-Read); 필요시 Mapping으로 명시적 스키마 설정 가능
- 강력한 검색 및 집계 – 전문(full-text) 검색, 역색인(Inverted Index) 기반 빠른 질의, Aggregation을 통한 실시간 데이터 분석 가능
- RESTful API 지원 – HTTP/JSON 기반 API 제공. 별도 클라이언트 없이도 손쉬운 연동 (다양한 언어용 공식 클라이언트도 제공)
- 다양한 활용 분야 – 애플리케이션 검색 엔진, 로그/모니터링 분석(Observability), 추천 시스템 등 폭넓은 도구로 활용
클러스터와 노드 (Cluster & Node Architecture)

- 클러스터(Cluster): 여러 대의 Elasticsearch 노드(Node)가 협력하여 하나의 시스템처럼 동작하는 집합.
- 모든 노드는 클러스터 상태를 공유하며, 어떤 노드에 요청해도 동일한 결과를 반환함
- 클러스터 이름으로 논리적 식별되며, 같은 이름의 노드끼리 자동으로 클러스터 형성
- 노드(Node): 클러스터에 속한 단일 Elasticsearch 인스턴스 (보통 한 서버/컨테이너 = 1노드)
- 각 노드는 설정에 따라 여러 역할을 수행 가능 (기본적으로 모든 역할 활성화)
- 노드 수를 늘려 데이터 분산 및 부하 분산 가능 (수평 확장) – 단, 무조건 성능 향상은 아니며 데이터/질의 패턴에 따라 다름
Elasticsearch 노드의 유형 (Node Roles)

- 마스터 노드 (Master Node): 클러스터 메타데이터와 상태 관리 전담 노드
- 인덱스 생성/삭제, 노드 추가/제거, 샤드 할당 등의 클러스터 수준 작업 수행
- 클러스터 내 마스터 엘리자블(master-eligible) 노드 중 하나가 선출되며, 마스터 장애 시 다른 노드가 승계
- TIP: 안정적인 클러스터를 위해 일반적으로 3개의 전용 마스터 노드를 두어 quorum을 유지 (짝수보다 홀수 개 권장)
- 데이터 노드 (Data Node): 문서 데이터를 저장하고 인덱싱/검색 등의 실질적 데이터 작업 처리
- 인덱스의 프라이머리 샤드와 레플리카 샤드를 보유하며, 클라이언트 요청의 대부분(색인, 검색)을 담당
- CPU, 메모리, 디스크 등 리소스를 가장 많이 소모하는 노드 타입 (고사양 권장)