Development··5 min read

벡터 DB 비교: Pinecone vs Weaviate vs Chroma

RAG 시스템에 쓸 벡터 DB를 고르기 위해 세 가지를 직접 테스트해봤다. 결론은 의외로 간단했다.

RAG를 만들려면 벡터 DB가 필요하다

사내 문서 검색 시스템을 만들어야 했다. 기존 키워드 검색으로는 "이번 달 마케팅 성과"를 검색해도 "3월 퍼포먼스 마케팅 리포트"가 안 나왔다. 의미 기반 검색이 필요했고, 그러려면 텍스트를 벡터로 바꿔서 유사도 검색을 해야 했다.

벡터 DB 선택지가 너무 많았다. Pinecone, Weaviate, Chroma, Milvus, Qdrant, pgvector... 전부 써볼 수는 없으니까 세 가지만 골라서 비교했다.

테스트 조건

문서 12,340개. 각 문서를 768차원 벡터로 임베딩했다(OpenAI ada-002 모델 사용). 검색 쿼리 100개를 돌려서 응답 시간과 검색 정확도를 비교했다.

Pinecone: 가장 쉬운데 비싸다

세팅이 진짜 간단했다. 대시보드에서 인덱스 만들고 API 키 받으면 끝이다. 서버 관리가 필요 없다. 코드 3줄이면 벡터를 넣고 검색할 수 있다.

검색 속도: 평균 34ms. 정확도도 좋았다. 근데 비용이 문제다. Serverless 플랜 기준으로 우리 사용량이면 월 $73 정도가 나왔다. 12,340개 문서에 하루 검색 500건 정도인데 이 가격이면 좀 부담됐다.

(사실 무료 플랜이 있긴 한데 1개 인덱스 제한이라 프로덕션에서 쓰기엔 불안하다.)

Weaviate: 기능이 많은데 복잡하다

Docker로 로컬에 띄울 수 있어서 비용 걱정이 없다. 하이브리드 검색(벡터 + 키워드)을 기본 지원하는 것도 좋았다.

근데 초기 설정이 Pinecone보다 확실히 복잡했다. 스키마를 정의해야 하고, 모듈 설정도 필요하다. 공식 문서를 따라했는데 첫 검색이 동작하기까지 2시간이 걸렸다.

검색 속도: 평균 52ms. Pinecone보다 느리지만 쓸만한 수준이다. 하이브리드 검색을 쓰면 정확도가 벡터만 쓸 때보다 확실히 올라갔다. 이건 큰 장점이다.

Chroma: 프로토타이핑에 최고

pip install 한 줄이면 시작할 수 있다. 서버도 필요 없다. SQLite 기반이라 파일 하나에 전부 저장된다.

개발하면서 빠르게 테스트하기에는 최고였다. 근데 문서가 10,000개를 넘어가니까 검색 속도가 눈에 띄게 느려졌다. 평균 187ms. 1,000개일 때는 23ms였는데.

그리고 서버 모드로 운영할 때 안정성이 좀 불안했다. 한 번 프로세스가 죽었는데 데이터가 일부 유실됐다. 백업 전략을 따로 세워야 한다.

결론은 의외로 간단했다

프로토타이핑: Chroma. 빠르게 시작할 수 있고, 나중에 바꿔도 된다.

프로덕션(인프라 관리 가능): Weaviate. 비용이 안 들고 기능이 풍부하다. 특히 하이브리드 검색이 좋다.

프로덕션(인프라 싫음): Pinecone. 비싸지만 관리가 필요 없다.

우리는 Weaviate를 선택했다. DevOps 인력이 있어서 Docker 운영이 부담이 아니었고, 하이브리드 검색이 키워드에 민감한 사내 문서 검색에 잘 맞았다.

근데 6개월 뒤에 pgvector가 더 나아지면 또 바꿀 수도 있다. 이 분야는 너무 빨리 변해서 확신을 갖기가 어렵다.

관련 글