PostgreSQL pgvector 사용법: 벡터 검색부터 HNSW 인덱스까지
EDB 팀
2025년 9월 8일
PostgreSQL에서 벡터 검색을 구현하려면 별도의 벡터 데이터베이스가 반드시 필요할까요? pgvector는 PostgreSQL에 벡터 저장, 유사도 검색, 인덱싱 기능을 추가하는 오픈소스 확장입니다. 이 글에서는 pgvector의 주요 기능과 설치 방법, 벡터 데이터 입력 및 유사도 쿼리, HNSW 인덱스 설정을 살펴보고 전용 벡터 데이터베이스와의 차이도 비교합니다.
1. pgvector란 무엇인가?
pgvector는 PostgreSQL에 벡터 저장, 쿼리, 인덱싱 기능을 더하는 오픈소스 확장입니다. 이를 통해 별도의 벡터 데이터베이스 없이 PostgreSQL 내에서 유사도 검색을 수행할 수 있습니다.
주요 지원 기능은 다음과 같습니다.
- 벡터 데이터 타입: 단정밀도, 반정밀도, 바이너리, 희소 벡터
- 유사도 연산자: L2, Cosine, Inner Product, L1, Hamming, Jaccard 등
- 인덱싱: HNSW 및 IVFFlat 지원
- PostgreSQL의 트랜잭션, JOIN, Point-in-Time Recovery 등의 기능 그대로 활용 가능
2. pgvector 사용법: 설치부터 유사도 쿼리까지
설치 및 초기 설정
CREATE EXTENSION vector;최근 PostgreSQL 13 이상에서 동작하며, 다양한 패키지 관리자 및 Docker, Homebrew, GitHub Actions를 통해 설치할 수 있습니다.
벡터 칼럼 정의 및 벡터 삽입 예시
CREATE TABLE items (
id SERIAL PRIMARY KEY,
embedding vector(1536)
);
INSERT INTO items (embedding) VALUES ('[0.1,0.2,…,0.1536]');PostgreSQL 벡터 유사도 쿼리 예시
SELECT * FROM items
ORDER BY embedding <-> '[0.2,0.1,...]'
LIMIT 5;<->는 L2 거리 기반 순위, <=>는 Cosine, <#>는 Inner Product 연산자입니다.
HNSW 인덱스 기반 최적화
CREATE INDEX ON items USING hnsw (embedding vector_l2_ops);
SET hnsw.ef_search = 100;IVFFlat도 지원하지만, 데이터 변화가 자주 일어날 경우 HNSW가 업데이트 및 성능 측면에서 유리합니다.
3. 전용 벡터DB와 비교한 pgvector의 장점과 한계
pgvector의 장점
- 기존 PostgreSQL 인프라 활용 가능(일괄 저장, JOIN, 트랜잭션 등 그대로 활용)
- 비용 효율적(오픈소스이며 자체 호스팅 가능)
- pgvectorscale 같은 확장 도구와 함께 사용하면 대규모 벡터 워크로드에서도 높은 성능 및 낮은 레이턴시 달성
pgvector의 한계
- PostgreSQL 자체 아키텍처 위에 추가된 솔루션이므로 고부하·복잡한 벡터 워크로드에서는 운영 부담이 발생할 수 있음
- Notion 사례처럼 높은 가변 트래픽 상황에서는 튜닝이 복잡하고 서비스 장애 위험이 있음
4. pgvector는 언제 선택해야 할까?
pgvector가 적합한 경우
- 추천 엔진, 시맨틱 검색(Semantic Search), 검색 증강 생성(RAG) 등 중규모 AI 도입 초기 단계
- 이미 PostgreSQL 기반 시스템이 있고 벡터 저장 기능만 추가하려는 경우
- 비용과 운영 안정성을 중시하는 경우
다른 대안을 검토할 수 있는 경우
- 수백만~수억 개의 벡터를 처리하고 초저지연이 필수적인 서비스라면 Pinecone, Qdrant 등 벡터 전용 DB 사용 고려
5. pgvector와 전용 벡터DB 비교표
| 항목 | pgvector(Postgres) | 전용 벡터DB(예: Pinecone) |
|---|---|---|
| 오픈소스/상용 | 오픈소스, 자체 호스팅 가능 | 대부분 상용/Managed 서비스 |
| 인프라 통합성 | PostgreSQL과 완전 통합 | 별도 API/스토리지를 요구 |
| 운영 복잡도 | 직접 관리 필요, 튜닝도 직접 수행 | 관리형으로 운영 부담 낮음 |
| 성능 및 확장성 | pgvectorscale 조합 시 매우 우수 | 규모가 큰 워크로드에 특화 |
| 비용 효율 | 오픈소스 기반, 예측 가능한 비용 | 플랫폼에 따라 비용 상승 가능성 있음 |
6. pgvector FAQ
pgvector란 무엇인가요?
pgvector는 PostgreSQL에 벡터 저장, 쿼리, 인덱싱 기능을 추가하는 오픈소스 확장입니다. 별도의 벡터 데이터베이스를 도입하지 않고도 PostgreSQL에서 벡터 유사도 검색을 구현할 수 있습니다.
pgvector는 어떤 유사도 검색 방식을 지원하나요?
본문에서 다룬 주요 방식은 L2 거리, Cosine, Inner Product입니다. 이외에도 L1, Hamming, Jaccard 등의 유사도 연산자를 지원합니다.
HNSW와 IVFFlat 중 어떤 인덱스를 선택해야 하나요?
pgvector는 HNSW와 IVFFlat을 모두 지원합니다. 이 글에서는 데이터 변화가 잦은 경우 업데이트 및 성능 측면에서 HNSW가 유리하다고 설명합니다.
pgvector를 RAG에 사용할 수 있나요?
네. pgvector는 추천 엔진, 시맨틱 검색, RAG와 같은 중규모 AI 도입 초기 단계에 활용할 수 있습니다. 기존 PostgreSQL 시스템에 벡터 저장과 유사도 검색 기능을 추가하려는 경우에도 적합합니다.
pgvector 대신 전용 벡터DB를 검토해야 하는 경우는 언제인가요?
수백만~수억 개의 벡터를 처리하면서 초저지연이 필수적인 서비스라면 Pinecone이나 Qdrant 같은 전용 벡터DB를 고려할 수 있습니다. 실제 선택 시에는 워크로드 규모와 트래픽 변동성, 운영 부담을 함께 검토해야 합니다.