orama

Vector DatabasesDevOpsTypeScript

★ 10,547주당 +9조회 4

무엇인가

Orama는 JavaScript/TypeScript로 작성된 임베디드 검색 엔진 라이브러리다. 프로세스 안에서 인덱스를 만들고 질의를 처리하며, 브라우저·Node.js 서버·엣지 런타임에서 같은 API로 동작한다. 별도 검색 서버를 띄우는 제품이 아니라 애플리케이션 코드에 포함되는 라이브러리 계열에 속한다.

어떻게 동작하나

create()로 스키마를 정의해 인덱스 인스턴스를 만들고, insert()로 문서를 넣고, search()로 질의한다. 스키마는 문자열·숫자·불리언·열거형·지오포인트와 그 배열형까지 10가지 타입을 받는다. 전문 검색은 BM25 스코어링을 쓰고 30개 언어의 토큰화·스테밍을 처리한다. search()에 mode: 'vector' 또는 'hybrid'를 넘기면 벡터 검색으로 전환되며, 이때 텍스트 임베딩은 호출자가 검색 시점에 직접 넘긴다. 인덱스는 메모리에 상주하고 영속화는 플러그인이 맡는다.

무엇과 다른가

Elasticsearch나 Algolia 같은 외부 검색 서비스는 별도 프로세스, 네트워크 왕복, 인프라 운영을 전제로 한다. Orama는 같은 프로세스 안에 인덱스를 들고 있어 네트워크 홉이 없고, 코어 번들이 2KB 미만이라 클라이언트 번들에 넣을 수 있다. 벡터 검색을 위해 별도 벡터 DB를 두지 않고 하나의 인덱스에서 전문·벡터·하이브리드 질의를 함께 처리한다.

어떻게 쓰나

설치 후 create({ schema }) → insert → search 순서로 첫 질의를 만든다. 기능 확장은 플러그인으로 한다. @orama/plugin-embeddings는 임베딩 생성을, plugin-secure-proxy는 클라이언트에서 OpenAI 호출을 안전하게 중계하는 역할을, plugin-data-persistence는 인덱스 저장·복원을 담당한다. 그 외 analytics, QPS, PT15 플러그인과 VitePress·Docusaurus·Astro·Nextra 문서 사이트 통합이 있다. v3.0.0부터는 GenAI 채팅 세션을 만들어 ChatGPT·Perplexity류 경험을 붙일 수 있다.

전제와 한계

벡터·하이브리드 검색에 필요한 임베딩을 라이브러리가 생성하지 않으므로 외부 임베딩 모델이나 플러그인이 있어야 한다. GenAI 채팅은 OpenAI API 호출을 전제로 하고, 클라이언트에서 호출하려면 secure proxy 플러그인을 거쳐야 한다. 인덱스는 기본적으로 메모리에 있으므로 영속화 플러그인 없이는 프로세스가 끝날 때 사라진다. 스키마 타입은 10가지로 고정되어 있고, 2KB는 코어 크기이며 플러그인을 포함한 크기가 아니다.

관련 논문 5

유사 도구