Sonamu에 벡터 검색이 필요한 이유
Sonamu로 웹 앱을 만들다 보면 이런 기능을 구현하게 됩니다:- 지식 베이스: “비슷한 문서 찾기”
- 커머스: “이 상품과 유사한 제품”
- 콘텐츠: “관련 글 추천”
- 고객 지원: “비슷한 질문 찾기”
LIKE '%keyword%')은 한계가 있습니다:
- ❌ “TypeScript 프레임워크” 검색 시 “Node.js API 라이브러리” 못 찾음
- ❌ 오타에 취약 (“타입스크립트” vs “타입스크립트”)
- ❌ 동의어 처리 안 됨 (“프레임워크” vs “라이브러리”)
왜 pgvector인가?
벡터 검색을 구현하려면 벡터를 저장하고 검색할 데이터베이스가 필요합니다.선택지
| 방식 | 장점 | 단점 | Sonamu 추천 |
|---|---|---|---|
| pgvector | PostgreSQL 그대로 사용, 추가 인프라 불필요, 기존 데이터와 JOIN 가능 | 전문 벡터 DB보다 성능 낮음 | ⭐⭐⭐⭐⭐ |
| Pinecone | 벡터 검색 최적화, 관리형 서비스 | 추가 비용, 별도 동기화 필요 | ⭐⭐ |
| Elasticsearch | 강력한 검색 기능 | 무거움, 설정 복잡 | ⭐⭐⭐ |
| Weaviate/Milvus | 전문 벡터 DB | 별도 인프라, 학습 곡선 | ⭐⭐ |
Sonamu 프로젝트에서 pgvector를 추천하는 이유
1. 이미 PostgreSQL을 쓰고 있습니다- Pinecone: 별도 API, 비용, 동기화
- pgvector: 확장만 설치, 추가 비용 없음
pgvector란?
pgvector는 PostgreSQL에서 벡터(임베딩) 데이터를 저장하고 검색할 수 있게 해주는 확장입니다. 주요 기능:vector(N)데이터 타입 (N차원 벡터)- 유사도 연산자 (
<=>,<->,<#>) - 인덱스 (IVFFlat, HNSW)
필수 패키지 설치
pgvector: PostgreSQL pgvector 타입 지원 (Knex와 함께 사용)voyageai: Voyage AI 임베딩 (한국어 추천)@ai-sdk/openai: OpenAI 임베딩 (선택)
PostgreSQL 확장 설치
환경별 설치 방법
- Ubuntu/Debian
- macOS (Homebrew)
- Docker
- Cloud (Supabase/Neon)
확장 활성화
PostgreSQL에 접속하여 확장을 활성화합니다:Sonamu 프로젝트에 적용하기
1. 환경변수 설정
2. Sonamu Config 확인
3. Knex Migration으로 테이블 생성
Sonamu의 Migration을 사용하여 벡터 테이블을 만듭니다:4. 처음부터 벡터 테이블 만들기
새 테이블을 만든다면:벡터 차원 이해하기
임베딩 모델마다 벡터 차원이 다릅니다:인덱스 - 나중에 만들기
중요: 인덱스는 데이터가 충분히 쌓인 후에 만듭니다.왜 나중에?
HNSW 인덱스 (권장)
데이터가 100개 이상 쌓인 후:m = 16: 연결 수 (기본값, 대부분 OK)ef_construction = 64: 구축 시 탐색 크기
