node.js 에서 opensearch 사용하기
Table of Contents
node.js 에서 aws opensearch 를 도입해보자.
검색엔진 구현을 위해 흔히 elasticsearch 를 많이 사용한다. aws 에서 서비스를 운영중이라면, aws의 managed search engine인 opensearch 도입을 검토해볼 만하다.
이 글에서는 아래에 대해 설명한다.
- node.js 에서 opensearch 도입을 위해 필요한 기본적인 방법
- opensearch sdk 의 주요 명령어들
이 글에서 아래 내용은 설명하지 않는다.
- opensearch가 무엇인지
- 검색엔진 관리를 위해 필요한 여러가지 개념
aws에 opensearch 생성
-
aws 콘솔에 로그인 후, amazon opensearch service 에 진입한다. (https://console.aws.amazon.com/aos/home)
-
'도메인 생성' 버튼을 클릭한다.
-
각자 필요한 값을 입력한 후, 도메인을 생성한다.
- 프리티어를 사용하고 싶은 경우, 아래와 같은 설정을 적용하면 된다.
- 도메인 생성 방법: 사용자 지정 생성
- 템플릿: 개발 및 테스트
- Deployment Option(s): 대기 없는 도메인
- 인스턴스 유형: T3
- 이 문서에서는 실습을 위해, '세분화된 액세스 제어' 항목에서, '마스터 사용자 생성' 옵션을 선택한다.
- 이 때 입력한 마스터 사용자 이름, 마스터 암호를 기억해두자.
- 생성시 15분 정도의 시간이 소요된다.
- 프리티어를 사용하고 싶은 경우, 아래와 같은 설정을 적용하면 된다.
-
서비스 생성이 완료되면, 우상단에 보이는 호스트/대시보드 주소를 기억하자.
opensearch npm를 이용한 코드 작업
client 초기화
클라이언트 초기화를 위해서는 아래와 같은 코드를 사용한다.
import { Client } from "@opensearch-project/opensearch";
import fs from "fs";
const host = "localhost";
const protocol = "https";
const auth = "{마스터사용자이름}:{마스터암호}"; // 앞에서 직접 입력한 마스터 정보
const ca_certs_path = "{pem경로}";
const client = new Client({
node: protocol + "https://" + auth + "@" + host + ":" + port,
ssl: {
ca: fs.readFileSync(ca_certs_path),
},
});
인덱스 생성
rbdms의 database와 비슷한 개념을, elastic/opensearch 에서는 인덱스라고 한다. 인덱스는 검색엔진의 문서를 저장하는 공간이 된다.
const index_name = "books";
const response = await client.indices.create({
index: index_name,
});
console.log(response.body);
문서 추가
opensearch에서 문서는 데이터가 저장되는 최소 단위이다. 일반적으로 json 형태로 저장한다.
const document = {
title: "The Outsider",
author: "Stephen King",
year: "2018",
genre: "Crime fiction",
};
const id = "1";
const response = await client.index({
id: id,
index: index_name,
body: document,
refresh: true,
});
console.log(response.body);
문서 검색
문서를 검색시에는 인덱스명과 검색조건이 필요하다.
const query = {
query: {
match: {
title: {
query: "The Outsider",
},
},
},
};
const response = await client.search({
index: index_name,
body: query,
});
console.log(response.body.hits);
opensearch 의 질의를 위한 여러가지 조건, 명령어는 https://opensearch.org/docs/latest/search-plugins/searching-data/index/ 를 참고하여 코드를 작성할 수 있다.
dashboard
elasticsearch의 kibana처럼 opensearch 의 결과를 opensearch dashboard를 통해 시각적으로 확인할 수 있다. 실제 키바나와 외양이나 사용법이 거의 비슷하다.
접속 방법
- aws 콘솔에서 도메인 생성 후 확인한 대시보드 링크를 클릭
- 마스터 접속정보를 입력 후 대시보드 진입
후기
- elasticsearch npm을 사용해본 적이 있는데, 이와 opensearch npm의 api 설계가 거의 비슷하다는 생각이 들었다. elasticsearch를 사용해본 적이 없다면 무리 없이 사용할 수 있을 것으로 보인다.
- 라이브러리 자체에서 typescript 지원을 잘 해주고 있어, typescript 관련 별다른 설정을 하지 않아도 되어서 좋았다.
- opensearch는 aws에서 관리해주는 이점이 있을 것이라 짐작했는데, elasticsearch와의 차이점은 실제로 더 서비스를 운영해보고 여러 삽질과 문제해결을 겪으며 느껴봐야 할 것 같다.
- opensearch 의 아주 기본적인 세팅을 마무리했다. 이제 여러 문서들을 찾아보며, opensearch 를 적극적으로 사용해보자.