Zvec: 앱에 직접 내장되는 프로세스 내(In-Process) 벡터 데이터베이스

Zvec 소개

Zvec은 애플리케이션 프로세스 안에서 직접 동작하는 인프로세스(in-process) 벡터 데이터베이스입니다. 별도의 서버를 띄우거나 복잡한 설정을 거치지 않고, 코드가 실행되는 곳이라면 노트북, 서버, CLI 도구, 엣지 장비 어디에서든 그대로 유사도 검색(similarity search)을 수행할 수 있습니다. Alibaba 그룹 내부에서 운영에 쓰이며 다듬어진 프로젝트로, 저지연(low-latency)과 확장성을 동시에 노립니다.

벡터 검색만 제공하는 도구와 달리 Zvec은 조밀(dense) 벡터와 희소(sparse) 벡터를 모두 지원하고, 전문 검색(Full-Text Search)과 스칼라 필터를 하나의 질의로 묶는 하이브리드 검색(hybrid search)을 제공합니다. 인덱스도 메모리에 올리는 방식부터 디스크에 두는 방식까지 데이터 규모에 맞춰 고를 수 있어, 작은 실험용 컬렉션부터 대규모 데이터셋까지 같은 라이브러리로 다룹니다.

2026년 6월 12일 공개된 v0.5.0에서는 네이티브 전문 검색과 디스크 기반 DiskANN 인덱스, Go와 Rust SDK, 시각화 도구인 Zvec Studio가 추가됐습니다. 본 게시물에서는 Zvec의 인프로세스 구조와 하이브리드 검색, 인덱스 선택지, 그리고 설치와 기본 사용법을 정리합니다.

Zvec의 인프로세스 구조와 동작 방식

Zvec은 라이브러리 형태로 애플리케이션에 직접 링크되어, 데이터베이스가 별도 프로세스가 아니라 애플리케이션 프로세스 안에서 함께 돕니다. 이 구조에서는 네트워크 왕복 없이 함수 호출만으로 검색이 끝나며, 설치한 다음 몇 줄의 코드로 컬렉션을 만들고 곧바로 질의할 수 있습니다. 운영해야 할 서버나 데몬이 없으므로 배포 구성이 단순해진다는 점이 인프로세스 방식의 핵심 이점입니다.

저장 측면에서는 쓰기 전 로그(Write-Ahead Logging, WAL)로 영속성을 보장해, 프로세스가 비정상 종료되거나 전원이 꺼지는 상황에서도 기록한 데이터가 사라지지 않습니다. 동시성 모델은 여러 프로세스가 같은 컬렉션을 동시에 읽을 수 있도록 허용하되, 쓰기는 단일 프로세스만 배타적으로 수행하는 방식을 따릅니다. 지원 플랫폼은 Linux(x86_64, ARM64), macOS(ARM64), Windows(x86_64)이며, v0.5.0부터 RISC-V도 추가됐습니다.

Zvec의 하이브리드 검색과 인덱스

v0.5.0에서 추가된 전문 검색은 문자열 필드에 FTS 인덱스를 붙여 자연어나 구조화된 표현식으로 질의할 수 있게 합니다. 별도의 검색 엔진을 함께 운영하지 않고도 키워드 기반 검색을 같은 데이터베이스 안에서 처리한다는 점이 특징입니다. 하이브리드 검색은 여기서 한 걸음 더 나아가, 조밀 벡터와 희소 벡터, 스칼라 필터, 텍스트를 하나의 MultiQuery 안에서 결합해 한 번의 질의로 결과를 좁혀 줍니다.

인덱스는 데이터 규모와 메모리 예산에 맞춰 고를 수 있도록 여러 종류의 벡터 인덱스를 제공합니다. 그중 v0.5.0에서 들어온 DiskANN 인덱스는 인덱스의 대부분을 디스크에 두는 온디스크(on-disk) 방식으로, 대규모 데이터셋에서 메모리 사용량을 크게 줄이는 것을 목표로 합니다. 메모리에 모두 올리는 인덱스와 디스크 기반 인덱스를 같은 라이브러리에서 선택할 수 있으므로, 데이터가 커질 때 다른 시스템으로 옮기지 않아도 됩니다.

Zvec의 성능 벤치마크

Zvec은 자신을 소개하며 "수십억 개의 벡터를 밀리초 단위로 검색한다"고 주장하고, 대규모 워크로드를 겨냥한 처리량(QPS) 비교를 공개하고 있습니다. 아래는 프로젝트가 공개한 벤치마크 중 1,000만 개 벡터 기준으로 여러 벡터 데이터베이스의 QPS를 비교한 그래프입니다.

이 그래프는 수치가 높을수록 처리량이 큰 것을 의미하며, 측정에 쓰인 하드웨어 구성과 데이터셋, 비교 대상의 설정에 따라 결과가 달라질 수 있습니다. 프로젝트가 직접 공개한 벤치마크이므로, 자세한 측정 방법과 전체 결과는 Zvec 벤치마크 문서에서 직접 확인하는 편이 정확합니다.

Zvec 설치 및 사용법

Zvec은 여러 언어용 공식 SDK를 제공합니다. Python은 3.10부터 3.14까지 지원합니다.

# Python
pip install zvec

# Node.js
npm install @zvec/zvec

# Dart/Flutter
flutter pub add zvec

다음은 컬렉션을 만들고 문서를 넣은 뒤 벡터 유사도로 검색하는 README의 최소 예시입니다.

import zvec

# 컬렉션 스키마 정의
schema = zvec.CollectionSchema(
    name="example",
    vectors=zvec.VectorSchema("embedding", zvec.DataType.VECTOR_FP32, 4),
)

# 컬렉션 생성
collection = zvec.create_and_open(path="./zvec_example", schema=schema)

# 문서 삽입
collection.insert([
    zvec.Doc(id="doc_1", vectors={"embedding": [0.1, 0.2, 0.3, 0.4]}),
    zvec.Doc(id="doc_2", vectors={"embedding": [0.2, 0.3, 0.4, 0.1]}),
])

# 벡터 유사도 검색
results = collection.query(
    zvec.VectorQuery("embedding", vector=[0.4, 0.3, 0.3, 0.1]),
    topk=10
)

# 결과: 관련도 순으로 정렬된 {'id': str, 'score': float, ...} 목록
print(results)

코드를 작성하지 않고 데이터를 살펴보거나 질의를 디버깅하고 싶다면, 시각화 도구인 Zvec Studio를 사용할 수 있습니다. 소스에서 직접 빌드하는 방법은 Zvec 빌드 가이드에 정리되어 있습니다.

Zvec의 라이선스

Zvec은 Apache License 2.0으로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

:house: Zvec 공식 홈페이지

:books: Zvec 문서 사이트

:github: Zvec 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다!
텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로도 새 글 알림을 받으실 수 있습니다. :smiley:

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: