Search & AI/Elasticsearch

Elasticsearch란?

슝슝이입니다 2025. 3. 25. 22:40
반응형

1. Elasticsearch란 무엇인가?

Elasticsearch는 오픈소스 분산 검색 엔진으로, Apache Lucene을 기반으로 만들어졌습니다. 단순한 텍스트 검색을 넘어서, 대규모의 정형/비정형 데이터에 대한 검색 및 분석을 실시간으로 처리할 수 있습니다. 로그 분석, 모니터링, 데이터 탐색, 검색 서비스 등 다양한 분야에서 핵심 인프라로 사용됩니다.

✅ 핵심 키워드: Full-text search, 분산(Distributed), 실시간(Real-time), RESTful API

 

2. 철학: 검색을 중심으로 한 데이터 저장

Elasticsearch의 가장 큰 철학은 "검색이 핵심이다"라는 것입니다. 일반적인 RDBMS는 데이터를 정규화된 형태로 저장하고 나중에 조회하지만, Elasticsearch는 검색을 위한 데이터 구조로 저장하고 인덱싱하는 데 초점을 맞춥니다.

이 철학은 Lucene 기반의 데이터 구조와도 연결됩니다. 데이터를 저장할 때부터 검색 최적화 구조로 인덱싱하여, "나중에 검색을 빠르게"가 아니라 "처음부터 검색을 위해 설계"된 시스템입니다.

 

3. 핵심 메커니즘

📦 3.1. Index / Document / Field

  • Index: RDBMS의 데이터베이스(DB)에 해당하는 논리적 단위
  • Document: JSON 형식으로 저장되는 실제 데이터 단위 (RDBMS의 row에 해당)
  • Field: Document 내부의 key-value 구조 (RDBMS의 column)

Elasticsearch는 JSON 형태로 데이터를 저장하고, 각 field에 대해 자동 또는 수동으로 매핑(mapping) 규칙을 적용합니다.

 

🧱 3.2. 분산 구조: Node, Cluster, Shard, Replica

  • Node: Elasticsearch가 설치된 하나의 서버 인스턴스
  • Cluster: 여러 Node가 모여 하나의 논리적인 검색 시스템을 형성
  • Shard: Index가 나뉘어진 물리적 단위 (병렬 처리와 확장성 확보)
  • Replica: Shard의 복제본 (가용성과 부하 분산 확보)

기본적으로 하나의 Index는 여러 Shard로 분산 저장되고, 각 Shard는 여러 Node에 분산되어 저장됩니다.

 

⚙️ 3.3. 역색인(Inverted Index)

Elasticsearch의 핵심 동작은 바로 역색인(Inverted Index) 구조입니다. 이는 전통적인 색인 방식과 반대이며, 다음과 같이 작동합니다:

 
일반 색인: 문서 → 포함된 단어
역색인: 단어 → 포함된 문서 목록

 

이 구조 덕분에 특정 단어가 포함된 문서를 매우 빠르게 검색할 수 있으며, Full-text 검색 성능이 극대화됩니다.

 

🔍 3.4. 분석기(Analyzer)

Elasticsearch는 텍스트 데이터를 저장할 때 분석기(Analyzer)를 이용해 다음과 같은 처리를 수행합니다:

  1. Tokenizer: 문장을 토큰(단어) 단위로 나눔
  2. Filter: 소문자 변환, 불용어 제거, 형태소 분석 등

예를 들어 "The Quick Brown Fox"라는 문장은 다음과 같이 분석될 수 있습니다:

→ ["the", "quick", "brown", "fox"] → ["quick", "brown", "fox"]

사용자가 직접 분석기를 정의할 수도 있고, 내장된 언어별 분석기를 사용할 수도 있습니다.

 

4. 사용하는 알고리즘 및 기술

📐 4.1. TF-IDF (Term Frequency-Inverse Document Frequency)

Elasticsearch는 문서의 **관련도(relevance)**를 계산할 때 전통적으로 TF-IDF를 사용합니다:

  • TF: 단어의 등장 빈도
  • IDF: 드물게 등장하는 단어일수록 가중치 부여

→ 특정 검색어가 드물게 등장하면서 해당 문서에 자주 나온다면, 해당 문서를 더 높은 점수로 평가합니다.

⚖️ 4.2. BM25

최근에는 기본 알고리즘으로 BM25를 사용합니다. 이는 TF-IDF의 개선 버전으로, 문서 길이에 대한 보정, 과도한 TF 영향 제한 등 현실적인 조정을 포함합니다.

🧠 4.3. Boolean Retrieval Model

검색 질의(Query DSL)는 내부적으로 Boolean Retrieval Model을 기반으로 합니다:

  • must: 해당 조건을 반드시 만족하는 문서
  • should: 만족하면 점수 증가
  • must_not: 제외할 조건

→ 복합적인 검색 조건을 정교하게 구성할 수 있습니다.

🔄 4.4. 정렬 및 점수 계산

  • Score는 BM25나 사용자 정의 스크립트 기반으로 계산됩니다.
  • 정렬은 _score, 시간, 알파벳, 사용자 필드 등으로 유연하게 설정 가능.

 

5. 실시간(Real-time) 아님: Near Real-Time(NRT)

많은 사람들이 Elasticsearch를 실시간 검색 엔진이라고 생각하지만, 정확히는 **Near Real-Time(NRT)**입니다.

  • 문서를 저장하고 바로 검색되는 것이 아니라, 내부적으로 refresh interval(기본 1초) 주기로 검색 가능 상태로 변환됩니다.
  • 이 Refresh 과정이 성능과 실시간성 사이의 밸런스를 조절합니다.

 

6. 요약

반응형