[Elasticsearch] 기본 개념

최영섭·2024년 5월 27일
0

0. 배경 및 요구사항

1) 배경

  • 현재 ASKu서비스를 운영중에 있고 이 서비스의 검색기능이 기존 mysql의 단순 쿼리에 의존하고 있어 이를 개선하고자 하고 있다.

2) 요구사항

  • 본격적인 elastic search사용 전에 기본적인 개념을 알고자 한다.

1. Elasticsearch란

  • 엘라스틱 서치는 검색을할때나 분석을 할때 사용하는 오픈소스이다.
  • 이는 수평적으로 덧붙일 수 있고(horiaontal scalability) 데이터를 많이 넣어도 안정성있게 사용할 수 있고(reliability) 쉽게 관리할 수 있다(easy management).
  • Apache Lucene위에서 만들어졌다.
  • 이전까지는 Logstash와 Kibana를 함께 사용하면서 ELK stack을 많이 사용했었다.

Distributed Nature

자동으로 사용가능한 노드에 데이터와 쿼리부하를 분산처리함. 이를 통해 대용량 데이터를 거의 실시간으로 처리할 수 있도록 함.

elasticsearch의 핵심적인 부분인데 elasticsearch는 http web interface와 구조의 제약이 없는 json document내에서 향상된 full-text search 성능을 위해 만들어졌다.

Scalability

수백 대, 심지어 수천 대의 서버로 확장할 수 있으며, 페타바이트 규모의 구조화된 데이터와 비구조화된 데이터를 처리할 수 있음

Flexibility

다양한 소스로부터 이질적인 데이터 유형을 인덱싱할 수 있고 복잡한 검색 기능을 제공

2. Elasticsearch구조

Document & Field

elastic search의 가장 작은 유닛 하나가 Document, Document내부에 field가 존재

//Document
{
	"name": "John" // field
}

3. Common Use Cases

  • Enterprise Search (기업 검색):
    • 기업이 전체 디지털 콘텐츠를 색인하고, 웹사이트나 내부 네트워크에서 고급 검색 기능을 가능하게 하기 위해 사용됨. 예를 들어, 대기업의 직원들이 회사의 지식 관리 시스템에서 필요한 문서를 신속하게 검색할 수 있게 도움을 줌.
  • Logging and Log Analysis (로그 및 로그 분석):
    • Logstash(데이터 파이프라인의 일종) 및 Kibana(dashboard)와 함께 사용하여 로그 분석에 Elasticsearch를 사용함. IT 운영, 보안, 성능 모니터링에 대한 로그 데이터에 대한 인사이트를 제공함. 예를 들어, 서버 로그를 분석하여 비정상적인 트래픽을 감지하고 신속하게 대응할 수 있음.
  • Security Information and Event Management (SIEM) (보안 정보 및 이벤트 관리):
    • 조직에서 보안 데이터를 실시간으로 분석 및 시각화하여 위협 탐지 및 컴플라이언스 관리에 도움을 주기 위해 Elasticsearch를 사용함. 예를 들어, 침입 탐지 시스템에서 발생한 경고를 분석하여 신속하게 보안 조치를 취할 수 있음.
  • Data Analysis (데이터 분석):
    • Elasticsearch는 빅 데이터 분석에 활용되며(실시간으로 하고싶을 때), 사용자가 대량의 데이터를 빠르고 다양한 방식으로 탐색할 수 있게 함. 예를 들어, 마케팅 데이터를 분석하여 고객 행동 패턴을 파악하고, 효과적인 마케팅 전략을 수립할 수 있음.
  • Personalization and Recommendations (개인화 및 추천):
    • 전자상거래 웹사이트는 Elasticsearch를 사용하여 사용자 행동과 상호작용을 분석하고, 개인화된 제품 추천과 동적 콘텐츠를 제공함. 예를 들어, 온라인 쇼핑몰에서 사용자가 선호할 만한 상품을 추천하여 구매 가능성을 높이는 데 사용됨.

4. How does Elasticsearch work?

1) Data Distribution and Storage (데이터 분배 및 저장)

  • Indexing (색인):
    • 데이터가 Elasticsearch에 저장될 때, JSON 형식의 문서로 저장됨. 이 문서들은 인덱스라는 논리적 단위로 그룹화되며, 인덱스는 하나의 데이터베이스처럼 작동함. 예를 들어, 뉴스 기사 데이터베이스를 만든다면, 각 기사는 하나의 문서로 저장되고, 이 문서들은 뉴스 기사 인덱스에 속하게 됨. Elasticsearch는 이러한 문서를 색인하여 검색 쿼리에 빠르게 응답할 수 있게 최적화함.
  • Sharding (샤딩):
    • 인덱스는 여러 샤드로 나뉘어져 클러스터의 여러 노드에 분산됨. 예를 들어, 큰 데이터베이스를 하나의 서버에 저장하면 성능 문제가 발생할 수 있지만, 샤딩을 통해 데이터를 여러 서버에 분산시키면 처리 성능과 가용성을 크게 향상시킬 수 있음. 샤드는 데이터를 수평으로 분할하여 각 샤드가 전체 데이터의 일부분을 저장함.
  • Replicas (복제본):
    • 복제본은 기본 샤드의 복사본으로, 데이터의 가용성과 내구성을 보장함. 예를 들어, 기본 샤드가 저장된 서버에 장애가 발생하더라도, 복제본이 있는 서버에서 데이터를 계속 제공할 수 있음. 이는 데이터 손실을 방지하고, 읽기 쿼리의 부하를 분산시켜 시스템의 전체 성능을 향상시킴.

2) Search Mechnisms

  • Query Processing (쿼리 처리):
    • 키워드를 제출하면 제출되면, 이는 파싱(parsing)되어 Lucene 인덱스를 검색하는 데 적합한 형식으로 변환됨. 쿼리는 모든 관련 샤드(기본 샤드 또는 복제 샤드)에서 병렬로 실행됨.
  • Relevance Scoring (관련성 점수 매기기):
    • Elasticsearch는 다양한 관련성 점수 알고리즘(TF-IDF - 역문서 빈도(document안에 몇개의 키워드가 있는지 세는 것, 그리고 그 키워드가 얼마나 잘 분산되어있는지 보는것), BM25(Best matching 25) - 최적 일치 25 등)을 사용하여 각 문서가 쿼리와 얼마나 잘 일치하는지를 결정함. 이 점수 매기기는 검색 결과를 관련성에 따라 순위 매기는 데 도움을 줌.

3) Real-Time Operations

  • Near Real-Time (NRT) Search (거의 실시간 검색):
    • Elasticsearch의 주요 기능 중 하나는 거의 실시간으로 데이터를 검색하고 색인하는 능력임.
    • 작동 방식:
      • 메모리 내 버퍼: 들어오는 문서 데이터를 메모리 내 버퍼에 일시적으로 저장함.
      • 주기적 플러시: 이 버퍼를 주기적으로 디스크에 기록하여 새로운 인덱스 세그먼트를 생성함. 이를 통해 데이터는 빠르게 색인되고 검색 가능해짐.
    • 장점:
      • 사용자는 데이터가 시스템에 들어온 후 거의 즉시 검색할 수 있음.
      • 빠른 데이터 처리 및 색인으로 최신 데이터를 빠르게 접근할 수 있음.

4) Cluster Management (클러스터 관리)

  • Nodes and Clusters (노드와 클러스터):
    • 노드: Elasticsearch의 개별 서버를 노드라고 함. 각 노드는 데이터와 색인 기능을 제공함.
    • 클러스터: 여러 노드가 모여 클러스터를 구성하며, 클러스터는 데이터를 분산 저장하고, 모든 노드에서 검색 및 색인 기능을 제공함. 클러스터는 고유한 이름으로 구별되며, 이는 기본적으로 "elasticsearch"로 설정됨.
    • 예시: 대규모 애플리케이션에서 여러 서버가 하나의 클러스터로 묶여 데이터 검색 요청을 처리하고, 데이터의 가용성을 보장함.
  • Master Node (마스터 노드):
    • 마스터 노드는 클러스터의 핵심 역할을 담당함. 클러스터의 메타데이터 관리, 노드의 건강 상태 모니터링, 새로운 문서의 색인 및 샤드 할당 등을 수행함.
    • 마스터 노드는 클러스터의 안정성과 성능을 유지하는 데 중요한 역할을 함.
    • 예시: 클러스터에 새로운 데이터가 추가될 때, 마스터 노드는 데이터를 적절한 노드에 분산시키고, 클러스터 내에서 데이터를 효율적으로 관리함.
  • Node Communication (노드 통신):
    • 노드 간의 통신은 RESTful API를 통해 이루어짐. 이는 HTTP를 통한 JSON 형식을 사용하거나 내부 Elasticsearch 전송 프로토콜을 사용할 수 있음.
    • 이러한 통신은 클러스터 내의 모든 노드가 서로 데이터를 교환하고 협력하여 작업을 수행하는 데 필수적임.
    • 예시: 사용자가 검색 쿼리를 제출하면, 해당 쿼리는 클러스터의 여러 노드로 전달되어 병렬로 처리됨. 노드 간의 원활한 통신 덕분에 쿼리 결과를 신속하게 반환할 수 있음.

5) Analysis and Aggregation (분석 및 집계)

  • Analysis (분석):
    • 작동 방식: Elasticsearch는 데이터 색인 중에 텍스트 데이터를 분석하여 텍스트를 작은 단위인 토큰이나 용어로 분해함. 예를 들어, "Elasticsearch is powerful"라는 문장은 "Elasticsearch", "is", "powerful"이라는 토큰으로 분해됨.
    • 맞춤화: 사용자는 필요에 따라 토크나이저, 필터, 분석기를 사용자 정의할 수 있음. 이를 통해 다양한 언어 처리, 특수 문법 처리 등을 수행할 수 있음.
    • 예시: 한글 텍스트 분석을 위해 형태소 분석기를 사용하여 문장을 단어 단위로 분해하고, 불필요한 단어를 제거하는 필터를 적용할 수 있음.
  • Aggregation (집계):
    • 작동 방식: 집계는 데이터의 복잡한 요약 및 통찰을 제공하기 위해 사용됨.
    • 유형:
      • 메트릭 집계: 합계, 평균, 최대값, 최소값 등을 계산하여 데이터를 요약함.
      • 버킷 집계: 데이터를 그룹화하여 각 그룹에 대한 통계를 제공함.
      • 중첩 집계: 계층적으로 데이터를 탐색하여 더 복잡한 구조의 통계를 제공함.
    • 예시: 전자상거래 사이트에서 제품별 판매량을 집계하고, 특정 기간 동안의 평균 판매가를 계산하는 데 사용될 수 있음. 또한, 사용자의 나이대별 구매 패턴을 분석하기 위해 버킷 집계를 사용할 수 있음.

4. Elastic Stack

  1. Elasticsearch:
    • 기능: 데이터를 저장하고 검색하며 분석함.
    • 역할: Elasticsearch는 전체 스택의 중심으로서, 데이터를 색인하고 검색 쿼리를 처리하며, 분석 작업을 수행함. 사용자가 데이터를 빠르게 검색하고 분석할 수 있도록 고성능의 분산 검색 엔진을 제공함.
  2. Logstash:
    • 기능: 서버 측 데이터 처리.
    • 역할: Logstash는 다양한 소스에서 데이터를 수집하고 변환하여 Elasticsearch로 전송함. 데이터의 필터링, 변환, 형식 변환 등을 수행하여, 데이터를 적절한 형태로 가공함.
  3. Kibana:
    • 기능: 데이터 시각화 대시보드.
    • 역할: Kibana는 Elasticsearch에 저장된 데이터를 시각화하여 사용자에게 제공함. 대시보드, 차트, 그래프 등을 통해 데이터를 쉽게 분석하고 이해할 수 있도록 도움을 줌.
  4. Beats:
    • 기능: 데이터 수집기.
    • 역할: Beats는 서버나 어플리케이션에서 데이터를 수집하여 Logstash 또는 Elasticsearch로 전송함. 예를 들어, Filebeat는 로그 파일을 수집하고, Metricbeat는 시스템 및 서비스의 메트릭 데이터를 수집함.
  5. X-Pack:
    • 기능: 보안, 경고, 모니터링, 보고, 머신 러닝, 그래프 분석, SQL 기능 제공.
    • 역할: X-Pack은 Elastic Stack의 기능을 확장하여 보안(RBAC, 암호화, 감사 로그, IP 필터링), 실시간 경고 및 모니터링, 보고서 생성, 머신 러닝을 통한 이상 탐지, 그래프 분석 및 SQL 인터페이스를 제공함.

5. 결론

Elastic search에 대해 공부해보았는데 단순히 fulltext search만을 위해 사용하기에는 좀 과하다는 생각이 들었다. 방대한 데이터 내에서 검색을 할때 빠르게 할 수 있도록 하는 쪽에 더 집중되어 있는 것 같아 닭 잡는데 소잡는 칼을 쓰는 느낌이다.

조금 더 찾아보니 mysql내에서도 fulltext search를 사용할 수 있는 방법이 있어서 위에서 언급한 요구사항은 다른 방식으로 해소하려고 한다.

6. 참고

https://www.youtube.com/watch?v=XZQP7fMFHMM&t=170s

profile
세상에 필요한 것을 고민하고 그것을 만드는 과정에서 문제를 해결하는 일이 즐겁습니다. 창업, 백엔드, RAG에 관심을 가지고있습니다.

0개의 댓글