Post

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. 검색 패턴

방식구분특징느낌주로 사용하는 곳
matchQuery(검색 방식)일반 검색"맥북" 관련 결과쇼핑몰, 게시글 검색
termQuery(검색 방식)정확 일치 검색"ACTIVE" 딱 같은 값상태값, ID 검색
match_phraseQuery(검색 방식)단어 순서 중요"맥북 프로" 붙어야 함정확한 상품명
slopQuery 옵션단어 거리 허용"맥북 최신형 프로"도 허용유연한 문장 검색
fuzzyQuery(검색 방식)오타 허용"맥북프러""맥북 프로"검색창 오타 보정
multi_matchQuery(검색 방식)여러 필드 검색title + description통합 검색
boolQuery(검색 방식)조건 조합검색 + 가격필터 + 브랜드실무 대부분

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.