1️⃣ 엘라스틱서치(Elasticsearch)란?
Elasticsearch는 분산 검색 및 분석 엔진으로, 대량의 데이터를 실시간으로 저장, 검색, 분석할 수 있는 NoSQL 기반의 검색 엔진임.
기본적으로 Apache Lucene을 기반으로 하며, JSON 기반 REST API를 제공하여 사용이 간편함.
💡 주요 특징:
✅ 빠른 검색 속도 → 역색인(Inverted Index) 기술을 사용하여 빠르게 검색 가능
✅ 확장성(Scalability) → 분산 시스템을 지원하여 대량의 데이터 처리 가능
✅ RESTful API 지원 → JSON 기반 요청을 사용하여 손쉽게 데이터 조회
✅ 실시간 분석 가능 → 로그, 메트릭, 이벤트 데이터 등을 실시간으로 분석
2️⃣ 엘라스틱서치와 관계형 DB 비교
비교 항목 | 엘라스틱서치(Elasticsearch) | 관계형 DB (MySQL, PostgreSQL 등) |
데이터 저장 구조 | JSON 문서 기반 | 테이블, 행, 열 기반 |
검색 방식 | 역색인 (Inverted Index) | 인덱스 + 풀스캔 |
속도 | 검색에 최적화됨 (빠름) | CRUD 연산 최적화됨 |
확장성 | 분산 시스템 지원 | 수직 확장(Scale-up) 중심 |
데이터 변경 | 실시간 색인 | 트랜잭션 기반 |
주요 사용 사례 | 로그, 검색엔진, 실시간 분석 | CRUD 중심의 일반적인 애플리케이션 |
💡 즉, Elasticsearch는 대량의 데이터를 빠르게 검색하는 데 최적화된 솔루션임.
3️⃣ 엘라스틱서치 기본 개념
✅ 1) 클러스터(Cluster)
• Elasticsearch의 기본 단위로, 여러 개의 노드(Node)로 구성됨.
• 클러스터 내의 노드들은 서로 데이터를 공유하며 분산 처리를 수행함.
cluster.name: my-elasticsearch-cluster
✅ 2) 노드(Node)
• 클러스터에 속한 각 개별 서버를 의미함.
• 노드에는 데이터를 저장하거나 검색 요청을 처리하는 역할이 있음.
• 노드 종류:
• Master Node: 클러스터를 관리하는 역할
• Data Node: 데이터를 저장하고 검색을 수행
• Ingest Node: 데이터 변환 및 전처리를 수행
✅ 3) 인덱스(Index)
• RDBMS의 데이터베이스(Database)와 유사한 개념
• 특정 유형의 문서(Document)를 저장하는 논리적인 공간
• 예: user-data라는 인덱스를 생성하면 사용자 정보 저장 가능
PUT /user-data
✅ 4) 타입(Type) [7.x 버전부터 제거됨]
• RDBMS의 테이블(Table)과 유사한 개념이었으나, 7.x 버전부터 제거됨.
• 현재는 인덱스별로 여러 개의 데이터 구조를 저장하는 방식으로 대체됨.
✅ 5) 문서(Document)
• RDBMS의 행(Row)과 유사한 개념
• 하나의 JSON 데이터로 저장됨
• 예: user-data 인덱스에 사용자 정보를 저장
POST /user-data/_doc/1
{
"name": "홍길동",
"age": 30,
"email": "hong@example.com"
}
✅ 6) 샤드(Shard)
• 대용량 데이터를 여러 개의 노드에 분산 저장하기 위한 단위
• 데이터가 많아질수록 샤드를 늘려서 확장 가능
• 기본적으로 Primary Shard(기본 샤드) + Replica Shard(복제 샤드) 구조를 가짐.
💡 샤드 개수 예시
{
"settings": {
"index": {
"number_of_shards": 3, // 기본 샤드 개수
"number_of_replicas": 1 // 복제 샤드 개수
}
}
}
4️⃣ 엘라스틱서치 REST API 사용법
✅ 1) 인덱스 생성
PUT /products
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"name": { "type": "text" },
"price": { "type": "double" },
"category": { "type": "keyword" }
}
}
}
→ products라는 인덱스를 생성하고, name, price, category 속성을 정의함.
✅ 2) 문서 추가 (데이터 입력)
POST /products/_doc/1
{
"name": "노트북",
"price": 1200000,
"category": "전자제품"
}
→ products 인덱스에 노트북 데이터를 저장.
✅ 3) 문서 조회 (데이터 검색)
GET /products/_doc/1
→ id = 1인 문서(노트북 정보)를 가져옴.
✅ 4) 검색 쿼리 (상품명으로 검색)
GET /products/_search
{
"query": {
"match": {
"name": "노트북"
}
}
}
→ 노트북을 포함하는 데이터를 검색.
✅ 5) 문서 수정
POST /products/_update/1
{
"doc": {
"price": 1100000
}
}
→ id=1인 상품의 가격을 110만원으로 변경.
✅ 6) 문서 삭제
DELETE /products/_doc/1
→ id=1인 상품을 삭제.
5️⃣ 엘라스틱서치 사용 사례
💡 어디에 사용될까?
사용 사례 | 설명 |
🔍 검색 엔진 | 대용량 문서를 빠르게 검색 (e.g., 네이버, 구글 검색엔진) |
📊 로그 분석 | ELK 스택(Elasticsearch + Logstash + Kibana)과 함께 사용하여 서버 로그 분석 |
🏦 데이터 모니터링 | 금융 거래 데이터 실시간 분석 및 이상 탐지 |
🛒 이커머스 추천 시스템 | 상품 검색, 추천 기능 (e.g., 쿠팡, 아마존) |
📱 소셜 미디어 분석 | 트위터, 인스타그램 등에서 키워드 기반 검색 |
🎯 결론
✅ Elasticsearch는 빠른 검색과 실시간 분석이 필요한 시스템에 최적화된 NoSQL 엔진.
✅ JSON 기반 RESTful API를 제공하여 사용이 간편함.
✅ 샤드(Shard)와 레플리카(Replica)로 분산 저장하여 확장성 확보.
✅ 로그 분석(ELK 스택), 검색 시스템, 추천 시스템 등에 활용 가능.
출처 : ChatGPT
'DB > Elasticsearch' 카테고리의 다른 글
Nori 한글 형태소 분석기, KNN 서치 (0) | 2025.04.23 |
---|---|
N-gram (0) | 2025.04.13 |