01 ElasticSearch 개념
01 ElasticSearch 개념
1. Note
1. Note
- 벡터 디비와 어느정도 구분이 필요할듯
- 벡터디비는 임베딩시켜서 의미를 기반으로 검색
- 엘라스틱서치는 제이슨으로 만들어서 조건이나 키워드를 검색함.
- 각기 상황에 대한 목적이나 방향성을 보고 무엇을 할지 선택해야할듯
벡터DB, 엘라스틱서치
구분 벡터DB 엘라스틱서치 검색 방식 의미 유사도 키워드/조건 매칭 입력 자연어 문장 많이 사용 JSON DSL 많이 사용 내부 비교 벡터 거리 계산 inverted index 강점 의미 이해 정확한 필터링/속도 예시 “강아지 키우기 팁” ≈ “반려견 초보 가이드” “title에 강아지 포함”
2. ElasticSearch
1. ElasticSearch
- 오픈소스 기반의 대용량 데이터를 빠르게 검색하고 조회하기 위한 분산 검색 엔진
- 데이터를 저장하면서, 그 데이터를 매우 빠르게 검색·분석할 수 있게 만든 검색 특화 데이터베이스에 가까움
- 검색을 위해 데이터를 색인(Indexing)해서 빠르게 찾아주는 엔진
2. 주요특징
1. 매우 빠른 검색 성능
- 일반 DB처럼 데이터를 처음부터 끝까지 찾는 방식이 아니라, 역색인(Inverted Index) 기반으로 검색
1 2 3 4 5 6 7 8 9 10 11 12 13 14
-- 일반적인 DB는 전체를 순서대로 맥북을 조회하여 일치여부를 검증함. SELECT * FROM product WHERE name LIKE '%맥북%' -- 엘라스틱 서치는 데이터가 있다면 1번 문서: 맥북 프로 2번 문서: 아이패드 프로 3번 문서: 맥북 에어 -- 단어 중심으로 색인을 구성 맥북 → 1,3 프로 → 1,2 아이패드 → 2
- 검색할 때 계산하는 것이 아니라, 저장할 때 검색 준비를 끝내두는 것에 가까움
2. 전문 검색(Full Text Search)에 강함
- 사람이 실제 검색하는 방식에 가까운 검색을 지원
- 오타 허용(Fuzzy Search)
- 유사 단어 검색
- 부분 일치 검색
- 문맥 기반 검색
- 흐름
1 2 3 4 5
# 검색문장 '쿠버네티스를 공부하고 있습니다' # 핵심단어 추출하여 조회 '쿠버네티스','공부'
3. JSON 기반 Document 저장 구조
- 엘라스틱서치는 데이터를 JSON 형태(Document) 로 저장
1 2 3 4 5 6
{ "name": "맥북 프로", "price": 3200000, "brand": "Apple" } # 새로운 속성이 생겨도 그냥 Key만 추가하여 유연하게 저장 가능함 - 지속적으로 쌓이고 변경되는 경우 유리함.
- 로그 데이터
- 사용자 이벤트
- 비정형 데이터
- AI 메타데이터
4. Near Real Time 검색 지원
- 데이터를 저장하고 거의 즉시 검색 가능함
- Near Real Time (준실시간)
- 상품을 등록하면 몇 초 안에 검색 결과에 노출될 수 있음
- 성능 최적화를 위해 데이터를 즉시 검색 가능 상태로 만들지 않고, 일정 주기마다 refresh를 수행
5. 분산 처리와 수평 확장(Scale Out)
- 처음부터 대용량 분산 환경을 고려해 설계
- 데이터가 많아지면 단순히 서버 성능만 높이는 것이 아니라 서버를 추가 해서 확장할 수 있음
- 하나의 Cluster로 구성
- 데이터는 내부적으로 Shard(샤드) 단위로 분산 저장
- 데이터가 커질수록 서버를 붙여서 확장하기 쉬운 구조
6. 장애 대응(High Availability)
- 데이터 복제를 통해 장애 상황에도 대응할 수 있음
Primary Shard,Replica Shard로 구성됨.- Primary Shard가 문제가 생기면 Replica shard가 대체됨
- 검색 서비스 안정성이 높으며, 대규모 서비스 환경에서 많이 사용하게됨
7. 강력한 집계(Aggregation) 기능
- 단순 검색 엔진이 아니라 분석 엔진 역할도 수행
- 카테고리별 판매량
- 가장 많이 검색된 키워드
- 평균 결제 금액
- 시간대별 사용자 수
8. REST API 기반 동작
- 엘라스틱서치는 대부분 기능을 HTTP API 로 제공
1 2
POST /products/_doc # 저장 GET /products/_search 검색
- JSON 기반 요청/응답 구조라서, Spring Boot와 같은 백엔드 프레임워크와 연동하기 쉬움
3. 검색 패턴
| 방식 | 구분 | 특징 | 느낌 | 주로 사용하는 곳 |
|---|---|---|---|---|
match | Query(검색 방식) | 일반 검색 | "맥북" 관련 결과 | 쇼핑몰, 게시글 검색 |
term | Query(검색 방식) | 정확 일치 검색 | "ACTIVE" 딱 같은 값 | 상태값, ID 검색 |
match_phrase | Query(검색 방식) | 단어 순서 중요 | "맥북 프로" 붙어야 함 | 정확한 상품명 |
slop | Query 옵션 | 단어 거리 허용 | "맥북 최신형 프로"도 허용 | 유연한 문장 검색 |
fuzzy | Query(검색 방식) | 오타 허용 | "맥북프러" → "맥북 프로" | 검색창 오타 보정 |
multi_match | Query(검색 방식) | 여러 필드 검색 | title + description | 통합 검색 |
bool | Query(검색 방식) | 조건 조합 | 검색 + 가격필터 + 브랜드 | 실무 대부분 |
3. ElasticSearch 구조
1. 구조
1. 전체구조

- 레벨
1 2 3 4 5
Cluster (전체 시스템) └── Node (개별 서버, 여러 대) └── Index (문서 묶음, MySQL의 DB와 비슷) └── Shard (Index의 조각, 분산 저장 단위) └── Document (실제 데이터, JSON 한 건)
2. 클러스터
- 클러스터
- 여러 개의 노드를 하나의 검색 시스템처럼 묶은 단위
- 하나의 검색 서비스를 위해 여러 노드가 협력하는 구조
- 주요 역할
- 데이터 저장 및 검색 관리
- 노드 간 데이터 분산
- 장애 발생 시 복구
- 검색 요청 병렬 처리
클러스터 상태
상태 의미 GreenPrimary + Replica 샤드 모두 정상 YellowPrimary 정상, Replica 일부 미배치 RedPrimary 샤드 손실 → 일부 데이터 검색 불가
3. 노드
- 노드
- Elasticsearch가 실행되는 서버(인스턴스) 1대
- 클러스터 내부에서 실제 CPU, 메모리, 디스크 자원을 사용하여 검색과 저장 작업을 수행
Coordinating Node가 필요한 Data Node들에 요청해서 데이터를 찾고 결과를 합침
- 주요 역할
- 검색 요청 처리
- 샤드 저장
- 데이터 분산 처리
- 병렬 검색 수행
노드 역할 종류
역할 설명 Master Node클러스터 상태 관리 및 노드/샤드 관리 Data Node실제 데이터 저장 및 검색 수행 Ingest Node데이터 전처리(Pipeline) 수행 Coordinating Node요청 분배 및 결과 병합 ML Node머신러닝 작업 수행
4. 샤드
- 샤드
- 데이터를 여러 조각으로 분산 저장하는 단위
- 대용량 데이터를 효율적으로 처리하기 위해 데이터를 여러 개로 나누어 저장
- 샤드 구성
1 2 3 4 5 6 7 8 9 10 11 12 13
# 각 데이터 노드는 N개의 샤드를 가짐 # DataNode에만 붙는거는 맞지만, 몇개가 붙는지는 Master Node가 결정함. Node1 (Data Node) ├─ Primary Shard1 └─ Replica Shard2 Node2 (Data Node) ├─ Primary Shard2 └─ Replica Shard3 Node3 (Data Node) ├─ Primary Shard3 └─ Replica Shard1
샤드 종류
종류 설명 Primary Shard원본 데이터 저장 Replica ShardPrimary 복제본, 장애 대응 및 읽기 성능 향상
This post is licensed under CC BY 4.0 by the author.