엘라스틱서치란?
엘라스틱서치는 자바 루씬 기반의 오픈소스 검색엔진이다.
기존에 많이 통용되고 있는 데이터베이스에서 제한되는 전문 검색에 특화되어 있다.
엘라스틱서치의 장점
RDB와 비교를 해보자.
가령 사용자가 특정 칼럼에 텍스트를 검색하고 싶다면
RDB에서는 일반적으로 like 검색을 통해 단순 텍스트매칭으로 full scan을 해야
해당하는 데이터를 찾을수 있다.
이는 테이블의 전체 행 수나 해당 칼럼의 데이터가 너무 많으면 점점 더 느려지고 부하가 심하게 걸릴 수 밖에 없어
웬만하면 사용하면 안된다.
반면, 엘라스틱서치는 아주 유연하고 빠른 전문 검색을 가능케 한다.
그 이유는, 문서 데이터 저장 구조가 역색인 구조를 사용하고 있기 때문이다.
역색인이란 간단히 말하자면 이런것이다.
보통 학습서 종류의 책에서는 맨 뒷 페이지 쯤에 찾아보기, 인덱스 같은 명칭으로 단어들과 단어들이 존재하는 페이지 번호를 표시하고 있다. 우리는 이 단어들을 보고 해당 단어가 존재하는 페이지를 거꾸로 찾아가곤 한다.
이렇게 나열된 토큰 단위에서 문서 번호를 저장하는 구조를 역색인 구조라고 한다.
전문 검색이 빠른 이유는 이렇게 역색인 구조로 저장된 인덱스에서 단어를 기반으로 문서를 찾기 때문이다.
또한, 검색이 유연하다고 한 것은 색인기, 검색기에서 입력되는 텍스트를 적절히 가공할 수 있기 때문이다.
그래서 단어의 동의어, 유의어, 원형들도 적절히 처리하면 같이 검색할 수가 있는 장점이 있다.
엘라스틱서치는 Http Restful API를 제공하고 있어 개발 언어에 종속되지 않고 자유롭게 개발할 수 있는 장점 또한 존재한다.
또, 루씬만 사용한다면 데이터 분산 구성을 위한 모든 것을 개발해야 하지만 엘라스틱서치는 가용 가능한 서버만 있다면 설정만 적절히 하면 scale-out이 쉽게 된다.
엘라스틱서치는 logstash, kibana와 함께 ELK Stack이라는 이름으로 묶여있기도 하다.
데이터의 추출, 가공, 적재, 시각화까지 모두 한꺼번에 할 수 있다는 것인데, 주제와 벗어나는 내용이니
여기서는 더 알아보진 말자.
엘라스틱서치의 단점
1. 실시간 검색이 아니다. 색인 데이터는 내부적으로 커밋과 플러시 같은 과정을 거치기 때문에 준실시간으로 운영된다.
2. 트랜잭션과 롤백 기능이 없다.
3. 데이터의 업데이트를 제공하지 않는다. 데이터 업데이트시 엄밀히 말하면 기존의 데이터를 삭제하고 새로운 데이터를 생성하는 방식으로 사용한다.
엘라스틱서치 도커 기반으로 설치하기
오늘은 처음 설치해보는 것이니까 엘라스틱서치를 싱글 노드로 설치하는 것만 해보자.
설치 환경은 windows10에서 docker desktop을 구동한 상태에서 진행했다.
1. 엘라스틱서치 이미지를 다운받는다.
docker pull elasticsearch:7.13.1
2. 엘라스틱서치를 키바나에도 연결해보기 위해 도커 네트워크도 새로 만든다.
docker network create elasticsearch-cluster
3. 엘라스틱서치 컨테이너를 구동한다.
volume은 호스트 경로를 따로 지정해보았다.
docker run -d --name elasticsearch --net elasticsearch-cluster -v D:\data\elasticsearch:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.13.1
4. localhost:9200 페이지를 들어가본다.
다음과 같은 페이지가 나오면 정상적으로 서버가 뜬 것이다.
참고로 컨테이너 내부를 살펴보니 ES 7.13.1 버전이 사용하는 jdk는 AdoptOpenJDK 16 버전이었다.
여기서 끝내기는 아쉬우니 키바나도 같이 연결해보자.
5. 키바나 이미지를 다운받는다.
docker pull kibana:7.13.1
6. 키바나 컨테이너를 구동한다.
docker run -d --name kibana --net elasticsearch-cluster -p 5601:5601 kibana:7.13.1
7. localhost:5601 페이지를 들어가본다.
다음과 같은 페이지가 나오면 서버가 구동된것이다.
마치며
오늘은 엘라스틱서치에 대해서 간단하게 알아보고 도커 이미지로 엘라스틱서치 설치와 키바나도 연결해보았다.
다음은 엘라스틱서치를 구성하는 개념을 알아보고 멀티 노드를 구성해보고
인덱스 생성/삭제, 문서 CRUD를 해보도록 하자.
'database > elastic search' 카테고리의 다른 글
[elastic search] 엘라스틱서치에서 제공하는 주요 API (0) | 2022.01.02 |
---|---|
[elastic search] 엘라스틱서치의 기본적인 구조와 개념 (0) | 2021.10.12 |