Elastic Search?
오픈소스 분산 검색 엔진으로, 대용량 데이터를 빠르게 검색하고 분석할 수 있는 기능을 제공한다.
Apache Lucene 기반으로 만들어졌으며, REST API를 통해 다양한 언어로 쉽게 접근할 수 있다.
다양한 데이터 형식을 지원한다.
데이터 저장 시 인덱스를 생성하여 검색 속도를 높일 수 있으며, 분산 아키텍처를 지원하여 대용량 데이터 처리에 용이하다.
데이터 분석을 위한 다양한 기능들도 제공하고 있으며, Logstash와 Kibana와 같은 무료 오픈소스 도구들과 연동하여 데이터 수집, 분석, 시각화를 쉽게 할 수 있다.
1. 분산 시스템
데이터를 각 노드[^ft-node]에 분산하여 저장한다.
복사본을 유지하여 각종 충돌로부터 노드 데이터를 보호하며, DISCOVERY를 내정하여 별도의 분산 시스템 관리자가 불필요하다.
여러 개의 노드에 데이터를 색인
Indexing
[^ft-indexing]하고 검색, 저장한다.
항상 일정한 데이터 복사본의 개수를 유지하여 높은 가용성과 안정성을 보장한다.
2. 멀티 테넌시 (Multy tenancy)
여러 개로 분리된 인덱스[^ft-index]들을 그룹으로 저장한다.
각 테넌트가 Elasticsearch를 기반으로 하는 동일한 애플리케이션 인스턴스를 가지고 있다면, 테넌트 간에는 실행되는 쿼리 및 데이터 구조가 공통적이다.
멀티 테넌트 솔루션의 중요한 기준 중 하나는 각 테넌트가 다른 테넌트에 속한 데이터를 볼 수 없도록하는 것입니다. 이를 데이터 분리 제약이라고 한다.
3. 시스템 구조
- Cluster 클러스터
- 가장 큰 시스템 단위
- 하나의 클러스터는 여러 개의 노드로 구성되어있다.
- 여러 대의 서버가 하나의 클러스터를 구성할 수 있으며, 반대의 경우도 가능하다.
- 같은 클러스터의 이름으로 노드를 실행하는 것 만으로도 확장이 된다고 한다.
- Node 노드
- 마스터 노드
- 전체 클러스터 상태의 메타 데이터를 관리
- 기존의 마스터 노드가 종료되는 경우 새로운 마스터 노드가 선출된다.
- 데이터 노드
- 실제 데이터가 저장되는 노드
- 외부 접근이 차단되어있다.
- 노드 바인딩
- 같은 클러스터 이름을 가지고 실행된 노드는 자동으로 바인딩된다.
- 9200 PORT : REST API를 위한 HTTP 통신 포트
- 9300 PORT : 노드간 바인딩을 위해 할당된 포트
- 마스터 노드
- 네트워크 바인딩
- 네트워크에 있는 다른 서버의 노드와도 바인딩 할 수 있다.
- 네트워크 바인딩을 위한 Zen Discovery 기능 내장
- 멀티캐스트와 유니캐스트 모두 지원 하지만, 유니캐스트 사용을 권장한다.
- 샤드
- 데이터 검색을 위해 구분되는 최소 단위
- 색인된 데이터는 여러 개의 샤드로 분할돼 저장한다.
- Replica
- Primary Shard의 복제본
- 노드 하나가 죽으면, 다른 노드에 있는 복제본에서 데이터를 제공하여 장애복구에 용이하다.
- 노드가 죽어도 Primary Shard와 Replica 덕분에 데이터를 잃어버리지 않고 데이터 가용성 및 무결성이 보장된다.
- 같은 노드와 복제본은 동일한 데이터를 담고 있으며 반드시 서로 다른 노드에 저장된다.
- 작은 클러스터라도 데이터 가용성과 무결성을 위해 최소 3개의 노드로 구성하는것을 권장한다.
- 성능에 영향을 주는 주요 요소이다.
- Primary Shard의 복제본
참고 문헌[^tf-document]
설치
준비 환경
- WSL2 Ubuntu (20.04)
- Java 1.8 이상
- Elastic Search와 Kibana 버전은 8.0.0 으로 맞춘다
@elastic/elasticsearch 사용을 위해서는 해당 패키지와 동일한 버전으로 설치해야 Node.js 에서 오류없이 클라이언트를 생성하고 사용할 수 있다. - 패키지 설치
npm init npm install @elastic/elasticsearch dotenv
Elastic Search 설치
아래의 명령어를 위에서 아래로 실행한다.
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.0-linux-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.0-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c -
tar -xzf elasticsearch-8.0.0-linux-x86_64.tar.gz
cd elasticsearch-8.0.0/
./bin/elasticsearch #Script 실행
최초 실행시
Password
,TOKEN
같은 주요 정보가 나오므로 따로 메모를 해줘야한다.
최초 실행시 나오는 정보 예시

Kibana 설치
아래의 명령어를 위에서 아래로 실행한다.
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.0.0-linux-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/kibana/kibana-8.0.0-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c -
tar -xzf kibana-8.0.0-linux-x86_64.tar.gz
cd kibana-8.5.3/
./bin/kibana
./bin/kibana
스크립트가 무사히 실행되었다면 http://localhost:5601로 접속 해준다.
최초로 접속하는 경우 enrollment-token
을 기입해줘야한다.
Elastic Search 설치 에서 따로 메모해둔 TOKEN
값을 입력해준다.
가장 긴 상자에 있는 값이 입력해야하는 값 이다.
- 로그인
- ID : elascit
- PW : 위에서 메모해둔 Password
위 과정 중 문제 사항이 없었다면 위 사진처럼 무사히 접속 할 수 있다.
[^ft-node]: **노드** 독립적으로 실행되는 프로세스 [^ft-indexing]: **Indexing** 데이터가 검색될 수 있는 구조로 변경하기 위해 원본 문서를 검색어 토큰들로 변환하여 저장하는 일련의 과정이다. [^ft-index]: **Index** 색인 과정을 거친 결과물 또는 색인된 데이터가 저장되는 저장소이다. 도큐먼트들의 논리적인 집합을 표현하는 단위이디고 하다. [^tf-document]: [Elastic 가이드북](https://esbook.kimjmin.net/03-cluster)
Elastic Search?
오픈소스 분산 검색 엔진으로, 대용량 데이터를 빠르게 검색하고 분석할 수 있는 기능을 제공한다.
Apache Lucene 기반으로 만들어졌으며, REST API를 통해 다양한 언어로 쉽게 접근할 수 있다.
다양한 데이터 형식을 지원한다.
데이터 저장 시 인덱스를 생성하여 검색 속도를 높일 수 있으며, 분산 아키텍처를 지원하여 대용량 데이터 처리에 용이하다.
데이터 분석을 위한 다양한 기능들도 제공하고 있으며, Logstash와 Kibana와 같은 무료 오픈소스 도구들과 연동하여 데이터 수집, 분석, 시각화를 쉽게 할 수 있다.
1. 분산 시스템
데이터를 각 노드[^ft-node]에 분산하여 저장한다.
복사본을 유지하여 각종 충돌로부터 노드 데이터를 보호하며, DISCOVERY를 내정하여 별도의 분산 시스템 관리자가 불필요하다.
여러 개의 노드에 데이터를 색인
Indexing
[^ft-indexing]하고 검색, 저장한다.
항상 일정한 데이터 복사본의 개수를 유지하여 높은 가용성과 안정성을 보장한다.
2. 멀티 테넌시 (Multy tenancy)
여러 개로 분리된 인덱스[^ft-index]들을 그룹으로 저장한다.
각 테넌트가 Elasticsearch를 기반으로 하는 동일한 애플리케이션 인스턴스를 가지고 있다면, 테넌트 간에는 실행되는 쿼리 및 데이터 구조가 공통적이다.
멀티 테넌트 솔루션의 중요한 기준 중 하나는 각 테넌트가 다른 테넌트에 속한 데이터를 볼 수 없도록하는 것입니다. 이를 데이터 분리 제약이라고 한다.
3. 시스템 구조
- Cluster 클러스터
- 가장 큰 시스템 단위
- 하나의 클러스터는 여러 개의 노드로 구성되어있다.
- 여러 대의 서버가 하나의 클러스터를 구성할 수 있으며, 반대의 경우도 가능하다.
- 같은 클러스터의 이름으로 노드를 실행하는 것 만으로도 확장이 된다고 한다.
- Node 노드
- 마스터 노드
- 전체 클러스터 상태의 메타 데이터를 관리
- 기존의 마스터 노드가 종료되는 경우 새로운 마스터 노드가 선출된다.
- 데이터 노드
- 실제 데이터가 저장되는 노드
- 외부 접근이 차단되어있다.
- 노드 바인딩
- 같은 클러스터 이름을 가지고 실행된 노드는 자동으로 바인딩된다.
- 9200 PORT : REST API를 위한 HTTP 통신 포트
- 9300 PORT : 노드간 바인딩을 위해 할당된 포트
- 마스터 노드
- 네트워크 바인딩
- 네트워크에 있는 다른 서버의 노드와도 바인딩 할 수 있다.
- 네트워크 바인딩을 위한 Zen Discovery 기능 내장
- 멀티캐스트와 유니캐스트 모두 지원 하지만, 유니캐스트 사용을 권장한다.
- 샤드
- 데이터 검색을 위해 구분되는 최소 단위
- 색인된 데이터는 여러 개의 샤드로 분할돼 저장한다.
- Replica
- Primary Shard의 복제본
- 노드 하나가 죽으면, 다른 노드에 있는 복제본에서 데이터를 제공하여 장애복구에 용이하다.
- 노드가 죽어도 Primary Shard와 Replica 덕분에 데이터를 잃어버리지 않고 데이터 가용성 및 무결성이 보장된다.
- 같은 노드와 복제본은 동일한 데이터를 담고 있으며 반드시 서로 다른 노드에 저장된다.
- 작은 클러스터라도 데이터 가용성과 무결성을 위해 최소 3개의 노드로 구성하는것을 권장한다.
- 성능에 영향을 주는 주요 요소이다.
- Primary Shard의 복제본
참고 문헌[^tf-document]
설치
준비 환경
- WSL2 Ubuntu (20.04)
- Java 1.8 이상
- Elastic Search와 Kibana 버전은 8.0.0 으로 맞춘다
@elastic/elasticsearch 사용을 위해서는 해당 패키지와 동일한 버전으로 설치해야 Node.js 에서 오류없이 클라이언트를 생성하고 사용할 수 있다. - 패키지 설치
npm init npm install @elastic/elasticsearch dotenv
Elastic Search 설치
아래의 명령어를 위에서 아래로 실행한다.
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.0-linux-x86_64.tar.gz curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.0-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c - tar -xzf elasticsearch-8.0.0-linux-x86_64.tar.gz cd elasticsearch-8.0.0/ ./bin/elasticsearch #Script 실행
최초 실행시
Password
,TOKEN
같은 주요 정보가 나오므로 따로 메모를 해줘야한다.
최초 실행시 나오는 정보 예시

Kibana 설치
아래의 명령어를 위에서 아래로 실행한다.
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.0.0-linux-x86_64.tar.gz curl https://artifacts.elastic.co/downloads/kibana/kibana-8.0.0-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c - tar -xzf kibana-8.0.0-linux-x86_64.tar.gz cd kibana-8.5.3/ ./bin/kibana
./bin/kibana
스크립트가 무사히 실행되었다면 http://localhost:5601로 접속 해준다.
최초로 접속하는 경우 enrollment-token
을 기입해줘야한다.
Elastic Search 설치 에서 따로 메모해둔 TOKEN
값을 입력해준다.
가장 긴 상자에 있는 값이 입력해야하는 값 이다.
- 로그인
- ID : elascit
- PW : 위에서 메모해둔 Password
위 과정 중 문제 사항이 없었다면 위 사진처럼 무사히 접속 할 수 있다.
[^ft-node]: **노드** 독립적으로 실행되는 프로세스 [^ft-indexing]: **Indexing** 데이터가 검색될 수 있는 구조로 변경하기 위해 원본 문서를 검색어 토큰들로 변환하여 저장하는 일련의 과정이다. [^ft-index]: **Index** 색인 과정을 거친 결과물 또는 색인된 데이터가 저장되는 저장소이다. 도큐먼트들의 논리적인 집합을 표현하는 단위이디고 하다. [^tf-document]: [Elastic 가이드북](https://esbook.kimjmin.net/03-cluster)