Pgvector 시작하기: 벡터 데이터베이스를 탐색하는 개발자를 위한 가이드
생성형 AI와 대규모 언어 모델에 관한 최근의 기술 동향에 따라 데이터를 저장하고 쿼리하는 보다 효율적인 방법이 등장했습니다. MySQL과 PostgreSQL 같은 전통적인 데이터베이스는 수년 동안 개발자들에게 이상적인 선택이었습니다. 하지만 최근에는 벡터 데이터베이스라는 새로운 유형의 데이터베이스가 커뮤니티에서 널리 인기를 얻고 있습니다.
개발자는 pgvector 확장을 통해 벡터 데이터를 PostgreSQL에 효율적으로 저장하여 고급 데이터 관리 기능을 사용할 수 있습니다.
벡터 데이터베이스는 특히 사용 사례와 관련하여 기존 데이터베이스와는 많은 차이가 있습니다. 따라서 이번 글에서는 PostgreSQL 데이터베이스와 함께 벡터 스토리지를 사용할 수 있도록 해주는 PostgreSQL의 확장 기능인 Pgvector에 대해 알아보겠습니다. 또한 Pgvector의 한계와 특수 벡터 데이터베이스와의 차이점, 그리고 애플리케이션에 벡터 데이터베이스를 사용할 수 있는 방법과 위치에 대해서도 살펴보고 이해해 보겠습니다.
기존 데이터베이스에 익숙하고 새로운 솔루션을 찾고 있는 개발자라면 이 가이드가 Pgvector를 시작하는 데 필요한 지식을 제공할 것입니다. 또한 Pgvector의 대안으로 다른 전용 벡터 데이터베이스를 탐색하는 데 도움이 될 것입니다.
AI와 머신러닝은 현재 기술, IT, 의료, 자동차 등 다양한 산업 분야에서 널리 사용되고 있습니다. 이러한 분야에서 데이터는 이미지나 텍스트와 같은 비정형 데이터의 속성과 특징을 포착한 수치값이 포함된 벡터로 표현됩니다. 머신러닝 알고리즘은 이러한 벡터를 입력으로 사용하여 데이터 내의 패턴과 관계를 학습합니다.
Pgvector는 전통적인 오픈소스 관계형 데이터베이스인 PostgreSQL의 오픈소스 확장판입니다. 자연어 처리 또는 딥 러닝 모델의 벡터를 PostgreSQL 위에 저장하고 검색할 수 있도록 지원합니다. 또는 간단히 말해 Pgvector를 PostgreSQL의 벡터 데이터베이스 확장으로 볼 수도 있습니다.
Pgvector로 작업할 때 가장 좋은 점 중 하나는 PostgreSQL과 같은 기존 SQL 데이터베이스로 작업하는 것과 비슷한 느낌이라는 점입니다. 벡터 열 생성, 벡터 열이 있는 새 테이블 생성, 가장 가까운 L2 이웃 가져오기 등 벡터 연산의 구문은 동일합니다.
AI 애플리케이션, 추천 시스템 또는 고차원 데이터를 다루는 다른 어떤 프로젝트에서 작업하든, Pgvector 데이터베이스와 다른 벡터 데이터베이스를 이해하면 데이터베이스 관리의 지평을 넓힐 수 있습니다. 또한 광범위한 벡터 저장소 및 데이터베이스 지식 없이도 벡터 값을 효율적으로 저장할 수 있습니다.
이제 먼저 Pgvector를 PostgreSQL과 통합하도록 설정하는 것으로 시작해 보겠습니다. 시스템에 PostgreSQL이 설치되어 있는지 확인합니다. Mac의 경우 Homebrew를 통해 쉽게 설치할 수 있습니다:
브루 포스트그레스큐엘 설치
다음 명령을 실행하여 PostgreSQL이 설치되어 있는지 빠르게 확인할 수 있습니다:
psql --version
그러면 아래와 같이 시스템에 설치된 PostgreSQL의 버전이 표시됩니다:
또한 make를 설치해야 합니다. 다음 명령을 실행하여 홈브류를 사용하여 쉽게 설치할 수 있습니다:
brew 설치 make
그런 다음 아래와 같이 시스템에 make를 설치합니다:
벡터 데이터베이스의 세계로 뛰어들기 전에 Pgvector를 설정하고 이를 PostgreSQL과 통합해야 합니다. 필요한 단계를 살펴보겠습니다.
- Pgvector 리포지토리를 복제합니다.
cd /tmp && git clone --branch v0.4.4 https://github.com/pgvector/pgvector.git
- 이 디렉터리로 이동하여 다음
make명령을 실행합니다:
cd pgvector && make && make install
Pgvector와 Postgres 통합하기
다음 명령을 사용하여 PostgreSQL 명령줄 인터페이스(psql)를 엽니다. 이 단계는 터미널에서 직접 Postgres 명령을 실행할 수 있도록 명령줄에서 Postgres를 시작합니다:
psql
다음 명령을 사용하여 Postgres를 사용할 사용자를 만들 수 있습니다:
비밀번호 <비밀번호>로 사용자 <사용자> 만들기
그런 다음 위 명령에서 생성한 자격 증명을 사용하여 해당 사용자에 로그인합니다. 또는 수퍼유저로 Postgres에 로그인할 수도 있습니다:
psql -U postgres
이제 다음 명령으로 작업할 새 데이터베이스를 만들어 보겠습니다:
데이터베이스 벡터DB를 만듭니다;
이 데이터베이스를 선택해 보겠습니다:
/c vectordb;
그런 다음 vectordb 데이터베이스에 대해 Pgvector 확장을 활성화합니다:
확장자를 생성합니다;
이 단계는 Pgvector와 함께 사용하려는 모든 데이터베이스에 대해 한 번만 수행하면 됩니다.
Pgvector 예제
'벡터'라는 테이블에 id와 embedding이라는 두 개의 벡터 열을 만들어 보겠습니다. 이 테이블과 열은 벡터 데이터를 PostgreSQL에 저장합니다.
CREATE TABLE vectors (
id SERIAL PRIMARY KEY,
embedding float4[] -- 벡터 칼럼
);
이제 vectors 테이블에 일부 벡터 데이터를 삽입할 수 있습니다:
벡터에 삽입(임베딩) 값
('{1.2, 0.8, -2.1}'),
('{-0.7, 2.4, 3.6}');
테이블을 보려면 '벡터' 테이블에서 SELECT * 쿼리를 실행하면 됩니다.
SELECT * FROM vectors;
벡터 유사도 검색에 Pgvector 사용
벡터 데이터베이스가 유사도 검색을 수행하는 데 어떻게 유용할 수 있는지에 대해 설명했습니다. 다음은 주어진 쿼리 벡터와 유사한 벡터를 찾기 위한 간단한 유사도 검색 쿼리를 작성하는 방법입니다.
SELECT * FROM vectors
WHERE pgvector_cosine(embedding, '{0.9, -0.3, 1.8}') > 0.8;
여기서는 WHERE 절과 함께 일반 SELECT * 쿼리를 사용합니다. 그런 다음 pgvector_cosine 함수를 사용하여 embedding 벡터 열과 주어진 쿼리 벡터 {0.9, -0.3, 1.8} 사이의 코사인 유사도가 0.8보다 큰 행을 검색하도록 지정합니다.
벡터 데이터베이스 소개
벡터 데이터베이스란 무엇인가요?
벡터 데이터베이스는 고차원 벡터 데이터를 효율적으로 저장, 관리 및 쿼리할 수 있도록 설계된 특수한 유형의 데이터베이스입니다. 텍스트와 숫자 같은 정형 데이터에 최적화된 기존 데이터베이스와 달리, 벡터 데이터베이스는 머신 러닝과 자연어 처리에 사용되는 복잡한 데이터 유형을 처리하도록 맞춤화되어 있습니다. 이러한 데이터베이스는 특정 거리 메트릭을 기반으로 주어진 쿼리 벡터와 유사한 벡터를 찾는 것이 목표인 유사성 검색을 수행하는 데 탁월합니다.
벡터 데이터베이스는 이미지 인식, 추천 시스템, 시맨틱 검색 등 벡터 데이터의 저장과 검색이 필요한 애플리케이션에서 매우 중요합니다. 벡터 데이터베이스는 고급 인덱싱 기술을 활용하여 관련 벡터를 빠르고 정확하게 검색할 수 있으므로 AI 및 머신러닝 모델을 사용하는 개발자에게 없어서는 안 될 필수 요소입니다.
개발자를 위한 벡터 데이터베이스의 이점 ###
벡터 데이터베이스는 개발자에게 몇 가지 중요한 이점을 제공합니다:
효율적인 저장 및 검색: 고차원 벡터 데이터를 효율적으로 저장하고 검색할 수 있도록 최적화되어 있어 대용량 데이터 세트도 효과적으로 관리할 수 있습니다.
빠르고 정확한 유사도 검색**: 벡터 데이터베이스는 빠른 유사도 검색을 지원하므로 개발자가 가장 관련성이 높은 벡터를 빠르게 찾을 수 있습니다. 이는 추천 시스템이나 이미지 인식과 같은 애플리케이션에 필수적인 기능입니다.
다양한 거리 메트릭 및 알고리즘 지원: 특정 애플리케이션의 요구 사항에 맞게 다양한 거리 메트릭(예: 코사인 유사도, 유클리드 거리)과 알고리즘을 유연하게 선택할 수 있습니다.
확장성 및 유연성: 벡터 데이터베이스는 대규모 데이터 세트를 처리할 수 있으므로 수백만 개 또는 수십억 개의 벡터를 관리해야 하는 애플리케이션에 적합합니다.
- 인기 프로그래밍 언어 및 프레임워크와의 통합**: 다양한 프로그래밍 언어 및 프레임워크와 원활하게 통합되므로 개발자는 벡터 데이터베이스 기능을 기존 워크플로우에 쉽게 통합할 수 있습니다.
이러한 이점을 활용하여 개발자는 고급 벡터 데이터 관리 및 유사도 검색 기능을 필요로 하는 보다 효율적이고 확장 가능한 애플리케이션을 구축할 수 있습니다.
벡터 데이터 이해하기
벡터 데이터란 무엇인가요?
벡터 데이터는 숫자의 목록으로 표현되는 데이터 유형으로, 벡터라고도 합니다. 벡터의 각 숫자는 표현되는 데이터의 특정 기능 또는 속성에 해당합니다. 벡터는 다목적이며 텍스트, 이미지, 오디오 등 다양한 데이터 유형을 표현하는 데 사용할 수 있습니다. 머신 러닝과 자연어 처리의 맥락에서 벡터는 종종 단어, 구문 또는 전체 문서의 의미론적 의미를 나타냅니다.
벡터 데이터의 주요 특징 중 하나는 높은 차원성입니다. 벡터는 수천 또는 수백만 개의 차원을 가질 수 있으며, 데이터 내의 복잡한 세부 사항과 관계를 포착합니다. 이러한 높은 차원성은 이러한 복잡한 데이터 구조를 저장하고 쿼리하는 데 최적화되어 있지 않은 기존 데이터베이스에 문제를 야기합니다.
벡터 데이터베이스는 고차원 벡터 데이터를 위해 특별히 설계된 효율적인 저장 및 검색 메커니즘을 제공함으로써 이러한 문제를 해결합니다. 이를 통해 개발자는 특정 기준에 따라 주어진 쿼리 벡터와 유사한 벡터를 찾는 것이 목표인 벡터 유사도 검색을 수행할 수 있습니다. 이 기능은 데이터 포인트 간의 관계를 이해하고 활용하는 것이 중요한 이미지 인식, 추천 시스템, 자연어 처리와 같은 애플리케이션에 필수적입니다.
벡터 데이터베이스를 사용하면 개발자는 벡터 데이터를 효율적으로 저장하고 쿼리하여 고급 AI 및 머신 러닝 애플리케이션을 구축할 수 있는 새로운 가능성을 열 수 있습니다.
벡터 인덱스 및 제한 사항
Pgvector는 벡터를 저장하고 검색하는 훌륭한 방법이지만, 몇 가지 분명한 단점도 있습니다.
고차원 벡터를 처리할 때 Pgvector는 확장성 문제가 있습니다. 또한 벡터 데이터를 저장하면 추가적인 저장 및 인덱싱 오버헤드가 발생할 수 있습니다. 또한 벡터 데이터에 필요한 공간과 쿼리 성능에 어떤 영향을 미칠 수 있는지 고려하는 것도 중요합니다.
또한, Pgvector는 IVFFlat이라는 한 가지 유형의 인덱스만 지원합니다. 이 제한은 벡터의 속성뿐만 아니라 저장하는 데이터 세트의 크기에 영향을 줍니다. 또한 Pgvector 인덱스에는 기본 스토리지 최적화가 없다는 의미이기도 합니다.
요약하자면, Pgvector는 벡터 임베딩을 저장하고 검색할 수 있게 해주는 PostgreSQL 확장 기능입니다. 하지만 기능과 성능이 제한적입니다. 다행히도 오늘날에는 인덱스나 알고리즘이 개선되어 훨씬 더 나은 작업을 수행하는 Milvus와 같은 전용 벡터 데이터베이스가 많이 나와 있습니다.
이제 Pgvector와 그 응용 및 장단점에 대해 살펴보았으니 전용 벡터 데이터베이스의 개념을 소개해 보겠습니다.
기존 데이터베이스 위에 벡터 검색 플러그인인 Pgvector와 달리, Milvus, Zilliz 같은 전용 벡터 데이터베이스는 처음부터 거의 실시간 응답으로 수백만 또는 수십억 개의 고차원 벡터 데이터를 저장하고 쿼리하기 위해 특별히 설계된 것입니다. 고급 인덱싱 기술을 활용하여 유사도 검색을 효율적으로 처리하고, 유사도 기반 작업에 탁월한 성능을 제공하며, 대규모 벡터 데이터를 처리하고, AI 및 머신 러닝 애플리케이션을 위한 강력한 API를 제공합니다.
Milvus와 같은 전용 벡터 데이터베이스는 이미지 및 동영상 유사도 검색, 자연어 처리, 추천 시스템 등 다양한 사용 사례에 적합합니다. 이러한 다용도성 덕분에 다양한 AI 관련 프로젝트에 적합합니다. 밀버스](https://zilliz.com/what-is-milvus)와 이를 클라우드에서 활용하는 방법에 대해 알아보세요.
밀버스는 수십억 개의 고차원 벡터를 관리하고 쿼리할 수 있는 강력한 솔루션을 제공하는 오픈소스 벡터 데이터베이스입니다. GPU 인덱스, Arm64, 범위 검색, 업서트, CDC 등 다양한 흥미로운 기능을 제공하여 AI 및 머신 러닝 애플리케이션 구축을 위한 최적의 성능과 사용자 경험을 보장합니다. 이러한 기능에 대한 자세한 내용은 최신 Milvus 2.3 릴리즈 블로그를 참조하세요.
질리즈 클라우드는 클라우드 기반 서비스로 운영되며, Milvus 인스턴스를 서비스형 소프트웨어(SaaS) 영역으로 가져옵니다. 클라우드 인프라, 확장성 및 운영 지원을 제공하여 Milvus 데이터베이스의 배포 및 관리를 간소화합니다. 질리즈는 개발자가 인프라 설정 및 유지 관리의 복잡성 없이 Milvus의 기능을 활용할 수 있도록 지원합니다. 마치 클라우드에서 PostgreSQL용 Amazon RDS를 사용하는 것과 같습니다.
질리즈 클라우드는 무료 티어를 제공하여 모든 개발자가 이 벡터 데이터베이스 서비스에 동등하게 액세스할 수 있도록 합니다. 무료 티어는 최대 2개의 컬렉션을 제공하며, 각 컬렉션은 768개의 차원을 가진 최대 50만 개의 벡터를 수용하고 더 작은 규모에서는 더 많은 벡터를 수용합니다. 이 넉넉한 용량 덕분에 인프라 투자 없이도 상당한 데이터 처리 능력을 확보할 수 있습니다.
Postgres 12로 업그레이드할 때는 확장 벡터가 호환성과 기능을 유지할 수 있도록 적절하게 관리되는지 확인하세요.
Milvus와 Zilliz 중 선택하는 방법
데이터베이스를 완벽하게 제어하려면 자체 호스팅 Milvus 인스턴스를 선택할 수 있습니다. 그러나 필요와 사용 사례에 따라 인프라를 배포하고 관리해야 합니다.
반면 클라우드 기반 벡터 데이터베이스를 선호한다면 Zilliz Cloud를 사용할 수 있습니다. 질리즈는 인프라 유지 관리에 대한 걱정 없이 클라우드에서 Milvus를 활용하여 애플리케이션 구축에만 집중할 수 있도록 지원합니다.
밀버스와 질리즈는 개발자에게 효율적인 벡터 데이터 관리를 지원하지만, 다양한 배포 환경 설정을 지원합니다. 자체 호스팅의 유연성 또는 클라우드 기반의 단순성 중 어느 쪽을 선호하든 Milvus-Zilliz의 협업은 프로젝트의 요구사항에 맞는 옵션을 제공합니다.
Pgvector와 Milvus 및 Zilliz: 벡터 데이터베이스 비교
이제 사용 편의성, 성능, 유연성 측면에서 Pgvector와 Milvus/Zilliz를 비교해 보겠습니다.
Pgvector는 관계형 데이터베이스를 이미 사용하고 있는 개발자에게 익숙한 PostgreSQL과 원활하게 통합됩니다. 하지만 Milvus와 Zilliz는 SDK와 API를 설치하기 위해 추가 설정이 필요합니다. 좋은 소식은 Milvus/Zilliz를 설정하고 나면 대규모 유사도 검색 서비스를 만드는 데 1분도 채 걸리지 않는다는 것입니다. 또한 다양한 프로그래밍 언어에 대해 간단하고 직관적인 SDK를 사용할 수 있습니다.
설치와는 별개로 사용 시 약간의 학습 곡선이 있습니다. Pgvector는 PostgreSQL에 친숙하기 때문에 사용하기가 더 쉬워 보입니다.
벡터 유사도 검색의 성능 및 확장성 분석
Pgvector의 한 가지 큰 한계는 제한된 인덱싱 기능입니다. 복잡한 유사도 검색의 경우, 이 벤치마크에서 입증된 것처럼 Milvus는 최적화된 인덱싱 메커니즘으로 인해 Pgvector보다 성능이 뛰어납니다.
Milvus는 대략적인 가장 가까운 이웃 검색을 활용하여 쿼리 성능을 향상시킴으로써 정확한 가장 가까운 이웃 검색에 비해 정확도를 약간 희생하여 더 빠른 응답 시간을 제공합니다.
대규모 벡터 데이터를 효율적으로 처리하도록 설계된 강력한 벡터 검색 스택인 Pgvector와 Milvus가 있습니다. 그러나 Milvus/Zilliz는 확장성이 더 뛰어나며 수십억 개의 벡터 임베딩이 포함된 데이터 세트를 처리할 수 있습니다.
벡터 임베딩의 기능 세트와 유연성
Pgvector가 PostgreSQL에 벡터 기능을 제공하는 반면, Milvus/Zilliz는 AI 애플리케이션을 위해 맞춤화된 특수 기능을 갖춘 특수 목적의 벡터 데이터베이스입니다. 기능이 더 풍부하며 맞춤형 벡터 데이터베이스 사용 사례에 더 유용할 수 있습니다.
벡터 데이터베이스용 오픈 소스 벤치마킹 도구인 VectorDBBench가 있습니다. 이 도구는 시중의 주요 벡터 데이터베이스와 클라우드 서비스를 비교하여 초당 쿼리 수(QPS), 달러당 쿼리 수(QP$), P99 지연 시간에 관한 편향되지 않은 벤치마크 결과를 제공합니다.
예를 들어, VectorDBBench를 활용하여 Pgvector와 Milvus 또는 Zilliz를 벤치마킹할 수 있습니다. 벤치마킹 결과에 따르면, 밀부스와 질리즈는 QPS와 레이턴시 측면에서 Pgvector보다 성능이 뛰어납니다.
참고: 이는 특정 규칙에 따라 다양한 경우에서 각 시스템의 성능을 1-100점 만점으로 환산한 점수입니다. 점수가 높을수록 성능이 우수함을 나타냅니다.
참고: 특정 규칙에 따라 다른 경우에서의 각 시스템 성능을 기준으로 1점 이상의 점수입니다. 점수가 낮을수록 더 나은 성능을 나타냅니다.
VectorDBBench를 사용하면 다양한 메트릭 측면에서 어떤 데이터베이스의 성능이 더 우수한지 빠르게 파악할 수 있습니다. 또한 특정 요구 사항에 가장 적합한 데이터베이스를 결정할 수도 있습니다.
Pgvector는 PostgreSQL 내에서 벡터 데이터를 저장하고 쿼리할 수 있는 새로운 가능성을 열어줍니다. 이미 PostgreSQL에 익숙하고 벡터 데이터베이스를 탐색하고 싶다면 Pgvector가 훌륭한 출발점이 될 수 있습니다. 그러나 수백만 또는 수십억 개의 벡터 유사성 검색이 필요한 AI 애플리케이션의 경우, Pgvector 성능으로는 충분하지 않을 수 있습니다. Milvus와 Zilliz는 성능을 최적화하는 특화된 기능을 제공합니다. 프로젝트의 요구 사항을 고려하고 이러한 벡터 데이터베이스를 살펴보고 애플리케이션에서 벡터 스토리지의 잠재력을 최대한 활용하세요.
이 게시물은 Siddhant Varma가 작성했습니다. Siddhant는 프런트엔드 엔지니어링에 대한 전문성을 갖춘 풀스택 자바스크립트 개발자입니다. 그는 인도에서 여러 스타트업을 확장하는 데 참여했으며 에듀테크 및 헬스케어 산업에서 제품을 구축한 경험이 있습니다. Siddhant는 교육에 대한 열정과 글쓰기에 대한 재능이 있습니다. 또한 많은 졸업생들에게 프로그래밍을 가르치며 그들이 더 나은 미래의 개발자가 될 수 있도록 돕고 있습니다.
마지막 업데이트: 2024년 1월 23일
계속 읽기

Turbopuffer vs. Zilliz Cloud: A Performance and Cost Benchmark for Multi-Tenant Vector Search
Turbopuffer vs. Zilliz Cloud: A Performance and Cost Benchmark

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
The Zilliz MCP Server enables developers to manage vector databases using natural language, simplifying database operations and AI workflows.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.
