weaviate
무엇인가
Weaviate는 객체와 벡터를 한 저장소에 보관하는 서버형 데이터베이스다. 시맨틱 검색, 검색 증강 생성(RAG), 추천 엔진, 이미지 검색, 콘텐츠 분류 같은 응용이 올라가는 계층에 해당한다. 클라우드 네이티브를 전제로 설계되어 수평 확장과 복제를 배포 단위에서 다룬다.
어떻게 동작하나
서버는 REST, gRPC, GraphQL 세 가지 API를 노출한다. 클라이언트 라이브러리는 Python, JavaScript/TypeScript, Java, Go, C#/.NET으로 나온다. 벡터는 두 경로로 들어온다. 적재 시점에 내장 벡터라이저(OpenAI, Cohere, HuggingFace, Google, Model2Vec 등)가 텍스트를 임베딩으로 바꾸거나, 미리 계산한 임베딩을 그대로 넣는다. 질의는 벡터 유사도 검색, BM25 키워드 검색, 속성 필터, 리랭킹, 생성 검색을 한 번의 호출로 조합한다.
무엇과 다른가
관계형 데이터베이스 옆에 별도 벡터 인덱스를 붙이는 구성에서는 필터와 유사도 검색을 애플리케이션이 합쳐야 하고 두 저장소의 정합성을 따로 관리해야 한다. Weaviate는 객체와 벡터를 같은 컬렉션에 두므로 구조화 필터가 벡터 검색과 같은 질의 안에서 평가된다. RAG와 리랭킹도 외부 오케스트레이션 도구 없이 데이터베이스 호출 안에서 처리된다.
어떻게 쓰나
Docker Compose 파일 하나로 Weaviate와 로컬 임베딩 서비스를 함께 띄운다. 이어서 Python 등 클라이언트 라이브러리를 설치하고 컬렉션을 정의한 뒤 객체를 적재하면, 임베딩 생성과 시맨틱 검색이 클라이언트 코드에서 이루어진다. Kubernetes와 Weaviate Cloud 배포도 같은 모델을 따른다. AWS, GCP 배포 옵션은 설치 문서에 정리되어 있다.
전제와 한계
서버는 Go로 작성되었고 BSD 3-Clause 라이선스다. 내장 벡터라이저를 쓰려면 해당 제공자의 자격 증명이 필요하고, 그렇지 않으면 임베딩을 직접 계산해 넣어야 한다. 다중 테넌시, 복제, RBAC 권한 부여, 벡터 양자화, 객체 TTL이 서버 기능으로 들어 있다. TTL은 컬렉션 단위로 만료 시간을 지정한다. 클라이언트 라이브러리가 없는 언어에서는 REST, gRPC, GraphQL API를 직접 호출한다.
관련 논문 5
유사 도구
- milvusGo와 C++로 작성된 분산 벡터 데이터베이스다. 컴퓨트와 스토리지를 분리해 수십억 벡터에서 ANN 검색을 수평 확장한다.
- chroma임베딩과 메타데이터를 저장하고 벡터·전문·하이브리드 검색을 제공하는 오픈소스 AI 검색 인프라다. Rust 코어와 Python·JS 클라이언트로 동작한다.
- zvecC++로 작성된 인프로세스 벡터 데이터베이스다. 서버 없이 애플리케이션에 임베드되며 밀집·희소 벡터 검색과 전문 검색, 하이브리드 질의를 한 프로세스 안에서 처리한다.
- WeKnora원시 문서를 수집해 검색 가능한 RAG 지식베이스와 자율 추론 에이전트, 자체 유지 위키로 바꾸는 Go 기반 자체 호스팅 LLM 지식 플랫폼이다.
- deep-searcher사내 문서를 벡터 DB에 적재하고 LLM이 검색·평가·추론을 반복해 근거 있는 답변과 보고서를 만드는 Python 딥리서치 도구다.
- Langchain-ChatchatLangChain 위에 지식베이스 검색과 Agent를 얹어 오픈소스 LLM만으로 오프라인 질의응답을 구성하는 Python 애플리케이션이다.