제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(5년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.
similar chart finder
내 종목의 차트는 상승하는 차트일까요?
3.35.36.208
웹 아키텍처에서의 전문 검색 서비스 이해
이번 학기(3-2)에 '정보검색과 웹' 강의와 '데이터베이스' 강의를 수강하며 ElasticSearch에 대해 알게 되었습니다. 아직 배우진 않았지만 보아하니 데이터베이스 인기순위 7위에 올라와있고, 뭔가 기존에 알던 데이터베이스와는 다른 느낌이었습니다.
웹 아키텍처에서도 전문 검색 서비스라는 항목이 있던데, 오늘 이것이 어떤 역할을 하는지 공부해 보겠습니다.
참고로 전문(specialty) 검색이 아니라 전문(full text) 검색이더군요.. ㅋㅋ 처음에 전자인 줄 알았네요
전문 검색 서비스란
전문 검색 서비스는 사용자가 입력한 검색어를 전체 텍스트 데이터에서 찾아내는 기능을 제공하는 서비스입니다. 이 기능은 웹 사이트나 애플리케이션에서 사용자가 원하는 정보를 빠르게 찾을 수 있게 돕는 중요한 요소입니다.
전문 검색 서비스는 단순히 텍스트 데이터를 검색하는 것을 넘어서, 검색어의 동의어 처리, 오타 자동 수정, 관련성에 따른 검색 결과 정렬 등 다양한 기능을 제공합니다.
전문 검색 서비스의 작동 원리
전문 검색 서비스는 크게 두 단계로 작동합니다.
- 색인 생성(Indexing): 이 단계에서는 검색 대상이 되는 텍스트 데이터를 분석하여 색인(Index)을 생성합니다. 색인은 텍스트 데이터의 내용을 효율적으로 검색할 수 있도록 구조화한 데이터 구조입니다. 색인 생성 과정에서는 텍스트 데이터를 토큰화(Tokenization), 정규화(Normalization), 형태소 분석(Stemming) 등의 과정을 거쳐 색인을 생성합니다.
- 검색(Querying): 검색 단계에서는 사용자가 입력한 검색어를 색인에서 찾아내는 과정입니다. 이 과정에서는 검색어의 동의어 처리, 검색 결과의 정렬, 검색 결과의 페이징 등 다양한 기능이 수행됩니다.
전문 검색 서비스의 종류
웹 아키텍처에서 사용되는 전문 검색 서비스에는 여러 종류가 있습니다.
- Elasticsearch: Elasticsearch는 실시간 분산 검색 및 분석 엔진으로, 전문 검색 서비스를 제공합니다. 빅 데이터를 실시간으로 검색하고 분석하는 데 사용되며, 높은 확장성을 가지고 있습니다.
- Solr: Solr는 Apache Lucene을 기반으로 한 오픈 소스 검색 플랫폼입니다. Solr는 전문 검색, 필터링, 페이싱 등 다양한 검색 기능을 제공하며, 높은 확장성과 안정성을 가지고 있습니다.
- Algolia: Algolia는 호스팅이 되는 전문 검색 서비스를 제공하는 클라우드 기반 플랫폼입니다. 사용자 친화적인 검색 인터페이스와 빠른 검색 속도를 제공합니다.
이 중 Elasticsearch를 가장 많이 사용한다고 합니다. Elasticsearch는 아래에서 더 자세히 알아보겠습니다.
전문 검색 서비스의 주요 기능
전문 검색 서비스는 사용자가 원하는 정보를 빠르게 찾을 수 있도록 돕는 다양한 기능을 제공합니다. 그중에서 몇 가지 주요 기능을 살펴봅시다.
- 텍스트 분석: 전문 검색 서비스는 텍스트 데이터를 분석하여 색인을 생성하는 기능을 제공합니다. 이 과정에서는 텍스트 데이터를 토큰화, 정규화, 형태소 분석 등의 과정을 거쳐 색인을 생성합니다.
- 동의어 처리: 전문 검색 서비스는 검색어의 동의어를 자동으로 처리하는 기능을 제공합니다. 이를 통해 사용자가 '스마트폰'이라고 검색하면 '휴대폰', '모바일' 등의 동의어를 포함한 검색 결과를 얻을 수 있습니다.
- 정렬과 페이징: 전문 검색 서비스는 검색 결과를 관련성 순으로 정렬하고, 페이징을 통해 사용자에게 편리하게 제공하는 기능을 가지고 있습니다.
- 오타 자동 수정: 전문 검색 서비스는 사용자의 오타를 자동으로 수정하거나, 오타에 대한 검색 결과를 제공하는 기능을 가집니다.
Elasticsearch 이해
Elasticsearch란
Elasticsearch는 실시간 분산 검색 및 분석 엔진으로, 전문 검색 서비스를 제공합니다. 빅 데이터를 실시간으로 검색하고 분석하는 데 사용되며, 높은 확장성을 가지고 있습니다.
Elasticsearch는 JSON 기반의 RESTful API를 제공하며, Apache Lucene을 기반으로 구현되어 있습니다. 또한, Elasticsearch는 여러 노드에서 데이터를 분산 처리하여 높은 처리량과 빠른 검색 속도를 제공합니다.
Elasticsearch의 주요 구성요소
- 인덱스(Index): Elasticsearch에서 데이터는 '인덱스'라는 단위로 저장됩니다. 인덱스는 유사한 특성을 가진 문서의 모음이며, 각 인덱스는 하나 이상의 '샤드(Shard)'로 나뉩니다.
- 샤드(Shard): 샤드는 인덱스의 일부를 가진 Elasticsearch의 기본적인 작업 단위입니다. 샤드를 통해 Elasticsearch는 데이터를 여러 노드에 분산 저장하고 병렬 처리를 할 수 있습니다.
- 노드(Node): Elasticsearch에서 노드는 단일 서버를 의미합니다. 각 노드는 여러 샤드를 저장할 수 있으며, 데이터의 검색, 저장 등의 작업을 처리합니다.
Elasticsearch는 어떤 경우에 사용해야 할까?
- 로그 분석 및 시스템 모니터링: 로그 데이터를 실시간으로 수집하고 분석하여 시스템의 상태를 모니터링하거나 문제를 빠르게 파악하고 대응할 필요가 있는 경우에 Elasticsearch를 사용하면 좋습니다.
- 실시간 검색 기능: 웹 사이트나 애플리케이션에서 사용자가 원하는 정보를 실시간으로 검색할 수 있도록 하는 기능이 필요한 경우에도 Elasticsearch가 유용합니다.
- 빅 데이터 분석: 대량의 데이터를 실시간으로 처리하고 분석해야 하는 경우, Elasticsearch의 분산 처리 기능과 빠른 검색 속도를 활용할 수 있습니다.
- 추천 시스템: 사용자의 행동 패턴을 분석하고 이를 바탕으로 개인화된 추천을 제공하는 추천 시스템을 구현할 때 Elasticsearch를 활용하면 효과적입니다.
Elasticsearch와 MySQL의 주요 차이점
Elasticsearch와 MySQL은 각각 다른 목적과 요구사항에 맞게 설계된 데이터 저장 시스템입니다.
- 데이터 모델: MySQL은 관계형 데이터베이스로, 데이터를 엄격한 스키마에 따라 테이블에 저장합니다. 반면에 Elasticsearch는 NoSQL 데이터베이스로, JSON 형태의 도큐먼트를 저장합니다. 이는 Elasticsearch가 훨씬 더 유연한 데이터 모델을 가지고 있음을 의미합니다.
- 검색 기능: MySQL은 기본적인 텍스트 검색 기능을 제공하지만, Elasticsearch는 이를 훨씬 더 넘어서 복잡한 전문 검색 기능을 제공합니다. Elasticsearch는 빠른 전체 텍스트 검색, 정확도 스코어링, 퍼사드 검색 등의 기능을 제공합니다.
- 실시간 분석: Elasticsearch는 실시간 데이터 처리와 분석을 지원합니다. 이는 대량의 데이터를 실시간으로 색인화하고, 이를 바탕으로 실시간 대시보드 등을 제공할 수 있음을 의미합니다. 반면에 MySQL은 이러한 실시간 분석에는 제한적입니다.
Elasticsearch의 장단점
Elasticsearch는 그 특성상 여러 가지 장점을 가지고 있지만, 동시에 몇 가지 주의해야 할 단점도 가지고 있습니다.
장점
- 빠른 검색 속도: Elasticsearch는 대량의 데이터를 빠르게 처리하고 검색할 수 있습니다. 이는 Elasticsearch가 빅 데이터를 처리하는 데 매우 효과적이라는 것을 의미합니다.
- 실시간 분석: Elasticsearch는 데이터를 실시간으로 색인화하고 분석할 수 있습니다. 이는 실시간 대시보드, 알림, 추천 등의 기능을 제공하는 데 매우 유용합니다.
- 유연한 데이터 모델: Elasticsearch는 JSON 형태의 도큐먼트를 저장하므로, 데이터 스키마를 미리 정의할 필요가 없습니다. 이는 데이터 구조가 자주 바뀌는 경우에 매우 유용합니다.
단점
- 트랜잭션 지원 부족: Elasticsearch는 ACID 트랜잭션을 완벽하게 지원하지 않습니다. 따라서, 트랜잭션을 필요로 하는 애플리케이션에서는 주의가 필요합니다.
- 복잡성: Elasticsearch는 매우 강력하고 유연하지만, 그만큼 복잡하기도 합니다. 특히 클러스터 관리, 샤딩, 복제 등의 고급 기능을 사용하려면 상당한 학습이 필요합니다.
'웹 아키텍쳐' 카테고리의 다른 글
웹 아키텍처8 - 클라우드 서비스와 AWS(아무것도 모르고있다가 돈 날림) (0) | 2024.02.17 |
---|---|
웹 아키텍처7 - 데이터 파이프라인(나는 데이터 파이프라인을 사용하는 걸까?) (0) | 2024.02.17 |
웹 아키텍처5 - 메세징 시스템과 Kafka - 디도스 방지 가능? (0) | 2024.02.17 |
웹 아키텍처4 - 캐싱 시스템과 Redis (23.11.9) (0) | 2024.02.17 |
웹 아키텍처3 - 웹 애플리케이션 서버(WAS) - 스프링은 WAS? (0) | 2024.02.17 |