Database

Elastic Search란?

Atriel 2025. 6. 8. 18:22

엘라스틱 서치를 쉽게이해하면

RDBMS가 아닌

NoSQL의 성격을지닌 하나의 데이터베이스 이면서

동시에 강력한 검색엔진의 성격도 띄고있는 개념이라 생각하면된다.

 

NoSQL로써 당연히 스키마는 없고 (Schemaless)
Json의 형태를 띄는 데이터베이스이다.

 

B-Tree 구조가 아닌 역색인(Inverted Index) 방식을 사용하여 단어나 문장을 매우 빠르게 찾음

 

자연어 처리(NLP) 기능이 내장

        - 단어를 쪼개는 토큰화 / 불필요한 단어를 거르는 필터링 / 비슷한 형태로 바꿔주는 정규화가 자동 지원

단순 텍스트뿐 아니라, 조건 검색(필터링) 정렬까지 가능

 

대량의 리뷰도 빠르게 검색 가능

 

검색의 특징 = 빠른 검색 속도 -> 반정형화, ETL 형태로 많이 쓰인다

 

 

ElasticSearch의 특징

 

특징이라 적었지만 공부할 목차라 봐도 될꺼같음

 

스키마리스(Schema-less)

  미리 엄격한 데이터 구조를 정하지 않고 유연하게 데이터를 추가할 수 있지만, 성능을 위해선 매핑을 명확히 설정하는 것을 권장함.

 

분산 시스템(클러스터링)

  데이터를 여러 노드에 나누어 저장(샤딩)하여 대량 데이터를 분산 처리함  노드가 늘어날수록 검색 성능이 향상됨.

 

높은 확장성(Scalability)과 고가용성(High Availability)

  클러스터 노드를 쉽게 추가하거나 제거할 수 있으며 장애가 발생해도 서비스가 중단되지 않도록 설계됨.

 

실시간(Real-time) 데이터 처리 및 분석

  데이터가 추가되자마자 빠르게 인덱싱되어 거의 실시간으로 검색 가능함.

  실시간 대시보드나 로그 분석 시스템 등에서 유용함.

 

RESTful API 지원

  HTTP 통한 RESTful 방식으로 접근하며 JSON 형태로 데이터를 처리함 개발자들이 쉽게 접근 및 연동 가능함.

 

유연한 질의(Query DSL)

  JSON 기반의 강력하고 세밀한 검색 조건 설정이 가능함.

 

다양한 분석 및 집계(Aggregations) 기능

  검색 결과를 기반으로 다양한 통계, 집계, 분석을 할 수 있음.

 

자동 인덱스 관리(ILM: Index Lifecycle Management)

  오래된 인덱스 자동 삭제, 백업, 압축 등 자동으로 인덱스를 관리할 수 있는 기능을 제공함.

 

 

역색인? 이란

일반적인 색인구조는 문서를 찾아서 문서를 열면 안에 문서내용이 있다.

하지만 Elastic Search의 역색인구조는

찾고자하는 단어를 먼저 찾은다음에
그 단어가 들어있는 문서(Document)를 찾는다.

 

그래서 Elastic Search는 단어를 먼저찾는 구조를 사용하기위해

문서의 내용을 "Analyzer" 라는 기능으로 내부 텍스트를 분석(토큰화) 해서 저장한다.

 

이러한 구조덕분에 문서의 모든데이터를 확인할 필요가 없고

미리 분석된 역색인을 조회해서 검색을 하면되기 때문에

빠른 검색속도를 보장한다.

 

 

Index

Elasticsearch에서 데이터의 논리적인 저장 공간 = Table

 

Document

Index 내에 저장되는 JSON 형태의 데이터 단위

{
  "_index": "orders",
  "_id": "1",
  "_source": {
    "orderId": "ORD-123",
    "orderDate": "2025-04-09T15:00:00",
    "totalAmount": 120.50,
    "customer": {
      "customerId": "CUST-456",
      "name": "Alice Smith",
      "email": "alice.smith@example.com",
      "address": {
        "street": "123 Main St",
        "city": "Seoul",
        "country": "South Korea"
      }
    },
    "items": [
      {
        "productId": "PROD-001",
        "productName": "Laptop",
        "quantity": 1,
        "price": 100.00
      },
      {
        "productId": "PROD-002",
        "productName": "Mouse",
        "quantity": 1,
        "price": 20.50
      }
    ]
  }
}

이런 느낌으로 Document가 있고 Document안에 Document가 존재할수있다.

위에 코드에서 보다싶이 Document안에 source, customer, items등의 Document가 있고

심지어 그중 customer는 그안에 또 address Document가 존재함

 

Field

Document 내 데이터 항목 (필드 타입의 중요성)

 

Mapping

Index의 스키마 정의, 데이터 타입 지정

 

Analyzer

텍스트 처리 및 검색 정확성 향상을 위한 분석기

Cluster, Node, Shard, Replica 등 구성 요소의 상호작용

 

->> 텍스트를 검색 가능한 토큰으로 변환하는 핵심 구성요소

3단계 처리 과정:

  • Character Filter: 문자 레벨 전처리 (HTML 태그 제거 등)
  • Tokenizer: 텍스트를 개별 토큰으로 분할
  • Token Filter: 토큰 정제 (소문자 변환, 불용어 제거 등)

Cluster (클러스터)
여러 노드가 모여 하나의 논리적 단위를 구성

 

Node (노드)
클러스터를 구성하는 개별 서버 인스턴스

  • Master Node: 클러스터 상태 관리
  • Data Node: 실제 데이터 저장 및 검색 처리
  • Coordinating Node: 클라이언트 요청 라우팅

Shard (샤드)
인덱스를 물리적으로 분할한 단위, 데이터를 여러 노드에 분산 저장

Replica (레플리카)
Primary Shard의 복사본으로 고가용성과 검색 성능 향상

동작 구조: Primary Shard와 Replica는 서로 다른 노드에 배치되어 장애 시 가용성 보장하며, 검색 시 둘 다 활용하여 성능을 향상시킴