DB/Elasticsearch

[Elasticsearch] 엘라스틱서치

baek-dev 2025. 2. 27. 19:13

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