Elasticsearch는 무엇인지?
•
Elasticsearch는 검색 및 분석을 위한 오픈 소스 분산 검색 엔진입니다.
•
JSON 형식의 문서를 저장하고, 강력한 검색 및 분석 기능을 제공합니다.
•
분산 환경에서 운영되며, 대용량 데이터를 효율적으로 색인화하고 검색할 수 있습니다.
Elasticsearch를 이해 하기 위한 주요 키워드
•
노드 : 노드는 간단하게 말하면 Elasticsearch가 설치된 각 서버를 의미합니다.
◦
마스터 노드 : 마스터 노드는 클러스터 관리를 담당합니다. 새로운 노드의 가입, 클러스터 내의 노드 상태 모니터링, 인덱스 생성 및 삭제와 같은 관리 작업을 담당합니다. 하지만 데이터를 저장하거나 검색하는 주된 역할을 하는것은 아닙니다.
◦
데이터 노드 : 이름 그대로, 실제로 데이터를 저장하고 검색하는 데 사용됍니다. 이 노드들은 클러스터의 실질적인 작업을 수행하며, 사용자의 요청에 따라 데이터를 처리하고 반환합니다.
◦
서버 하나에 Elasticsearch를 설치하면 마스터노드이기도 하면서 데이터노드이기도 합니다.
◦
만약 두개의 서버에 Elasticsearch를 설치하면 각각 마스터노드-데이터노드가 있게 되는데, 마스터노드끼리 클러스터로 연결되면 1개의 환경으로 간주되며, 마스터노드간의 통신을 통해 클러스터의 일관성을 유지하고 관리합니다.
•
클러스터 : 클러스트는 간단하게 말하면 여러 노드의 집합체라고 볼 수 있습니다. 이들이 함께 작동해서 데이터를 효율적으로 관리하고 검색할 수 있는 환경이 제공됩니다.
◦
마스터 노드간의 연결은 elasticsearch.yml 라는 설정 파일에서 클러스터 환경을 설정하게 됩니다. 아래와 같이 마스터노드1, 마스터노드2가 있다면 my-cluster 라는 동일한 클러스터 환경에 연결 시킬 수 있게 됩니다.
cluster.name: my-cluster
node.name: master-node-1
node.master: true
node.data: true
discovery.seed_hosts: ["master-node-2"]
cluster.initial_master_nodes: ["master-node-1", "master-node-2"]
Shell
복사
•
샤드 : 샤드는 간단히 데이터의 조각이라고 생각하면 됍니다. Elasticsearch는 대용량의 데이터를 처리할 수 있도록 데이터를 여러 파티션으로 나눠서 저장하는데, 이 작은 조각을 샤드라고 부릅니다.
◦
데이터를 분산해서 효율적으로 처리하고 공유할 수 있는 샤드라는 개념은 비유적으로 유사한 사례를 예를 들면 토렌트에서 여러 사용자가 파일의 조각을 다운로드하고 동시에 업로드하는 것을 생각해보면 파일 조각이라는 개념을 체감 할 수 있습니다.
◦
Elasticsearch에서 각 샤드는 데이터의 일부를 저장하고 검색에 참여하여 전체 클러스터의 성능을 향상시킵니다.
엘라스틱 서치를 왜 이 프로젝트에서 적용하려 하는지?
•
프로젝트에서 Elasticsearch를 도입하는 주된 이유는 검색성능의 개선입니다.
•
MySQL로부터 가져온 도서 데이터를 Elasticsearch에 적재하면, 특히 텍스트 기반의 검색과 분석이 필요한 경우에 강력한 선택지가 될 수 있습니다.
•
Elasticsearch는 분산 구조로 설계되어 있어, 대용량 데이터셋에 대한 높은 성능을 제공합니다.
기존 MySQL과의 차이점?
구분 | MySQL | Elasticsearch |
데이터 모델 | 관계형 데이터베이스로, 테이블과 스키마를 기반으로 구조화된 데이터를 저장합니다. | 비관계형 데이터 스토리지로, JSON 형식의 문서를 저장하며, 각 문서는 필드 및 값의 집합으로 구성됩니다. |
검색 및 쿼리 | SQL 쿼리를 사용하여 정형화된 데이터에 대한 검색을 수행합니다. | 텍스트 기반의 검색을 강화한 쿼리 언어를 사용하며, 비정형 데이터의 검색에 특화되어 있습니다. |
검색 성능 | 일반적으로 정형 데이터의 인덱싱 및 검색에 효과적이지만, 텍스트 검색 및 다양한 집계 작업에는 제한이 있을 수 있습니다. | 텍스트 기반의 검색에 특화되어 있어, 대용량 텍스트 데이터의 실시간 검색이 빠르게 수행됩니다. |
분산 아키텍처 | 전통적으로 단일 서버에서 실행되는 중앙 집중형 아키텍처를 갖습니다. | 분산 환경에서 운영되며, 여러 노드로 구성된 클러스터를 형성하여 데이터를 저장하고 처리합니다. |
용도 | 트랜잭션 처리 및 정형 데이터의 저장 및 검색에 적합합니다. | 대용량 텍스트 데이터의 검색 및 분석에 특화되어 있으며, 로그 분석, 모니터링, 검색 엔진 등 다양한 용도로 사용됩니다. |
어떤 결과가 예상되는지?
•
Elasticsearch를 도입함으로써 검색 쿼리의 응답 시간이 향상될 것으로 기대됩니다.
•
Elasticsearch의 색인화된 데이터는 빠르게 검색 가능하며, 다양한 쿼리 및 집계 작업을 효과적으로 수행할 수 있습니다.
•
또한, Elasticsearch의 강력한 검색 및 집계 기능을 활용하여 사용자 경험을 향상시킬 수 있습니다.
Elasticsearch 기술 구현 후 다뤄볼만한 추가적인 성능 개선 방안?
현재 프로젝트에서는 기본적인 Elasticsearch의 설정을 기반으로 환경을 구축하는것을 목표로 했습니다. 기본 설정 상태에서의 성능 자체만으로 검색 성능이 뛰어난 부분을 테스트를 통해 확인했습니다.
하지만 추후 보다 많은 데이터, 복잡한 데이터 구조 등 추가적인 성능 개선안이 필요한 상황이 발생 할 수 있습니다. 이에 따라 Elasticsearch에서도 어떤 방식으로 성능을 추가적으로 확보 할 수 있을지 방안에 대해 키워드를 수집해두었습니다.
이는 곧, Elasticsearch는 현재 기본 설정 상태보다 높은 고점으로 성능 개선을 도전 할 수 있는 기술이며 이와 관련된 학습과 구현이 추가적 필요하다고 판단됩니다.
앞으로 도전해봐야 할 Elasticsearch 내에서의 추가적인 성능 개선 키워드