웹 아키텍쳐

웹 아키텍처6 - 전문 검색 서비스와 ElasticSearch

dodo4723 2024. 2. 17. 09:55
728x90
반응형

제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(5년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.

 

비슷한 차트 검색기

 

similar chart finder

내 종목의 차트는 상승하는 차트일까요?

3.35.36.208

 

 

웹 아키텍처에서의 전문 검색 서비스 이해

이번 학기(3-2)에 '정보검색과 웹' 강의와 '데이터베이스' 강의를 수강하며 ElasticSearch에 대해 알게 되었습니다. 아직 배우진 않았지만 보아하니 데이터베이스 인기순위 7위에 올라와있고, 뭔가 기존에 알던 데이터베이스와는 다른 느낌이었습니다.

 

웹 아키텍처에서도 전문 검색 서비스라는 항목이 있던데, 오늘 이것이 어떤 역할을 하는지 공부해 보겠습니다.

참고로 전문(specialty) 검색이 아니라 전문(full text) 검색이더군요.. ㅋㅋ 처음에 전자인 줄 알았네요


 

전문 검색 서비스란

전문 검색 서비스는 사용자가 입력한 검색어를 전체 텍스트 데이터에서 찾아내는 기능을 제공하는 서비스입니다. 이 기능은 웹 사이트나 애플리케이션에서 사용자가 원하는 정보를 빠르게 찾을 수 있게 돕는 중요한 요소입니다.

 

전문 검색 서비스는 단순히 텍스트 데이터를 검색하는 것을 넘어서, 검색어의 동의어 처리, 오타 자동 수정, 관련성에 따른 검색 결과 정렬 등 다양한 기능을 제공합니다.


 

전문 검색 서비스의 작동 원리

전문 검색 서비스는 크게 두 단계로 작동합니다.

  1. 색인 생성(Indexing): 이 단계에서는 검색 대상이 되는 텍스트 데이터를 분석하여 색인(Index)을 생성합니다. 색인은 텍스트 데이터의 내용을 효율적으로 검색할 수 있도록 구조화한 데이터 구조입니다. 색인 생성 과정에서는 텍스트 데이터를 토큰화(Tokenization), 정규화(Normalization), 형태소 분석(Stemming) 등의 과정을 거쳐 색인을 생성합니다.
  2. 검색(Querying): 검색 단계에서는 사용자가 입력한 검색어를 색인에서 찾아내는 과정입니다. 이 과정에서는 검색어의 동의어 처리, 검색 결과의 정렬, 검색 결과의 페이징 등 다양한 기능이 수행됩니다.

 

전문 검색 서비스의 종류

웹 아키텍처에서 사용되는 전문 검색 서비스에는 여러 종류가 있습니다.

  1. Elasticsearch: Elasticsearch는 실시간 분산 검색 및 분석 엔진으로, 전문 검색 서비스를 제공합니다. 빅 데이터를 실시간으로 검색하고 분석하는 데 사용되며, 높은 확장성을 가지고 있습니다.
  2. Solr: Solr는 Apache Lucene을 기반으로 한 오픈 소스 검색 플랫폼입니다. Solr는 전문 검색, 필터링, 페이싱 등 다양한 검색 기능을 제공하며, 높은 확장성과 안정성을 가지고 있습니다.
  3. Algolia: Algolia는 호스팅이 되는 전문 검색 서비스를 제공하는 클라우드 기반 플랫폼입니다. 사용자 친화적인 검색 인터페이스와 빠른 검색 속도를 제공합니다.

이 중 Elasticsearch를 가장 많이 사용한다고 합니다. Elasticsearch는 아래에서 더 자세히 알아보겠습니다.


 

전문 검색 서비스의 주요 기능

전문 검색 서비스는 사용자가 원하는 정보를 빠르게 찾을 수 있도록 돕는 다양한 기능을 제공합니다. 그중에서 몇 가지 주요 기능을 살펴봅시다.

  1. 텍스트 분석: 전문 검색 서비스는 텍스트 데이터를 분석하여 색인을 생성하는 기능을 제공합니다. 이 과정에서는 텍스트 데이터를 토큰화, 정규화, 형태소 분석 등의 과정을 거쳐 색인을 생성합니다.
  2. 동의어 처리: 전문 검색 서비스는 검색어의 동의어를 자동으로 처리하는 기능을 제공합니다. 이를 통해 사용자가 '스마트폰'이라고 검색하면 '휴대폰', '모바일' 등의 동의어를 포함한 검색 결과를 얻을 수 있습니다.
  3. 정렬과 페이징: 전문 검색 서비스는 검색 결과를 관련성 순으로 정렬하고, 페이징을 통해 사용자에게 편리하게 제공하는 기능을 가지고 있습니다.
  4. 오타 자동 수정: 전문 검색 서비스는 사용자의 오타를 자동으로 수정하거나, 오타에 대한 검색 결과를 제공하는 기능을 가집니다.



Elasticsearch 이해

Elasticsearch란

Elasticsearch는 실시간 분산 검색 및 분석 엔진으로, 전문 검색 서비스를 제공합니다. 빅 데이터를 실시간으로 검색하고 분석하는 데 사용되며, 높은 확장성을 가지고 있습니다.

 

Elasticsearch는 JSON 기반의 RESTful API를 제공하며, Apache Lucene을 기반으로 구현되어 있습니다. 또한, Elasticsearch는 여러 노드에서 데이터를 분산 처리하여 높은 처리량과 빠른 검색 속도를 제공합니다.

Elasticsearch의 주요 구성요소

  1. 인덱스(Index): Elasticsearch에서 데이터는 '인덱스'라는 단위로 저장됩니다. 인덱스는 유사한 특성을 가진 문서의 모음이며, 각 인덱스는 하나 이상의 '샤드(Shard)'로 나뉩니다.
  2. 샤드(Shard): 샤드는 인덱스의 일부를 가진 Elasticsearch의 기본적인 작업 단위입니다. 샤드를 통해 Elasticsearch는 데이터를 여러 노드에 분산 저장하고 병렬 처리를 할 수 있습니다.
  3. 노드(Node): Elasticsearch에서 노드는 단일 서버를 의미합니다. 각 노드는 여러 샤드를 저장할 수 있으며, 데이터의 검색, 저장 등의 작업을 처리합니다.

 

Elasticsearch는 어떤 경우에 사용해야 할까?

  1. 로그 분석 및 시스템 모니터링: 로그 데이터를 실시간으로 수집하고 분석하여 시스템의 상태를 모니터링하거나 문제를 빠르게 파악하고 대응할 필요가 있는 경우에 Elasticsearch를 사용하면 좋습니다.
  2. 실시간 검색 기능: 웹 사이트나 애플리케이션에서 사용자가 원하는 정보를 실시간으로 검색할 수 있도록 하는 기능이 필요한 경우에도 Elasticsearch가 유용합니다.
  3. 빅 데이터 분석: 대량의 데이터를 실시간으로 처리하고 분석해야 하는 경우, Elasticsearch의 분산 처리 기능과 빠른 검색 속도를 활용할 수 있습니다.
  4. 추천 시스템: 사용자의 행동 패턴을 분석하고 이를 바탕으로 개인화된 추천을 제공하는 추천 시스템을 구현할 때 Elasticsearch를 활용하면 효과적입니다.

 

Elasticsearch와 MySQL의 주요 차이점

Elasticsearch와 MySQL은 각각 다른 목적과 요구사항에 맞게 설계된 데이터 저장 시스템입니다.

  1. 데이터 모델: MySQL은 관계형 데이터베이스로, 데이터를 엄격한 스키마에 따라 테이블에 저장합니다. 반면에 Elasticsearch는 NoSQL 데이터베이스로, JSON 형태의 도큐먼트를 저장합니다. 이는 Elasticsearch가 훨씬 더 유연한 데이터 모델을 가지고 있음을 의미합니다.
  2. 검색 기능: MySQL은 기본적인 텍스트 검색 기능을 제공하지만, Elasticsearch는 이를 훨씬 더 넘어서 복잡한 전문 검색 기능을 제공합니다. Elasticsearch는 빠른 전체 텍스트 검색, 정확도 스코어링, 퍼사드 검색 등의 기능을 제공합니다.
  3. 실시간 분석: Elasticsearch는 실시간 데이터 처리와 분석을 지원합니다. 이는 대량의 데이터를 실시간으로 색인화하고, 이를 바탕으로 실시간 대시보드 등을 제공할 수 있음을 의미합니다. 반면에 MySQL은 이러한 실시간 분석에는 제한적입니다.

 

Elasticsearch의 장단점

Elasticsearch는 그 특성상 여러 가지 장점을 가지고 있지만, 동시에 몇 가지 주의해야 할 단점도 가지고 있습니다.

장점

  1. 빠른 검색 속도: Elasticsearch는 대량의 데이터를 빠르게 처리하고 검색할 수 있습니다. 이는 Elasticsearch가 빅 데이터를 처리하는 데 매우 효과적이라는 것을 의미합니다.
  2. 실시간 분석: Elasticsearch는 데이터를 실시간으로 색인화하고 분석할 수 있습니다. 이는 실시간 대시보드, 알림, 추천 등의 기능을 제공하는 데 매우 유용합니다.
  3. 유연한 데이터 모델: Elasticsearch는 JSON 형태의 도큐먼트를 저장하므로, 데이터 스키마를 미리 정의할 필요가 없습니다. 이는 데이터 구조가 자주 바뀌는 경우에 매우 유용합니다.

단점

  1. 트랜잭션 지원 부족: Elasticsearch는 ACID 트랜잭션을 완벽하게 지원하지 않습니다. 따라서, 트랜잭션을 필요로 하는 애플리케이션에서는 주의가 필요합니다.
  2. 복잡성: Elasticsearch는 매우 강력하고 유연하지만, 그만큼 복잡하기도 합니다. 특히 클러스터 관리, 샤딩, 복제 등의 고급 기능을 사용하려면 상당한 학습이 필요합니다.
반응형