반응형
벡터 DB
- 벡터 DB란 텍스트, 이미지, 오디오 같은 비정형 데이터들을 벡터(코드 관점에선 숫자의 배열) 형태로 저장해놓고, 이 들 사이의 유사도(similarity)를 기반으로 빠르게 검색하기 위해 특화된 데이터베이스이다.
- 일반적으로 ML(특히 딥러닝 모델)을 이용하여 의미를 함축시켜 숫자배열로 표현하는 Embedding 과정을 거쳐 고차원 벡터로 변환한 뒤, DB에 저장된다.
- 벡터 DB를 한 문장으로 요약하면, 비정형성의 데이터를 의미기반으로 검색하기 위해 벡터를 저장하고 탐색하는 DB이다.

벡터 DB와 기존 검색 엔진과의 차이
- 전통 검색 엔진(Elasitcsearch의 BM25)이나 정형데이터를 처리하는 RDBMS와 다른 점은 기존 DB들이 정확히 일치하거나 범위 검색을 하는데 최적화되어 있다면, 벡터 DB는 "의미적으로 비슷한 것"을 찾는데 최적화되어 있다.
- 키워드 검색이나 이미지 검색에서 같은 의미지만 다른 뜻을 가지고 있는 데이터들이 있다면 (ex. 자동차와 car는 같은 의미지만 글자 모양이 다름) 유사어를 직접 연결해줘야한다면, 벡터 DB는 의미적으로 같거나 비슷함을 Embedding 모델이 잘 표현한다면 같은 의미로 인식된다.
- 기존 DB가 특정 기준(ex. BM25)으로 정렬된다면 벡터 DB는 1) 의미를 어떻게 Embedding 하냐, 2) 어떤 방식으로 유사도(혹은 거리)를 정의하느냐에 따라 벡터 DB의 활용과 성능이 결정된다.
벡터 DB의 단계
- Embedding: 텍스트, 이미지, 보이스 등 다양한 비정형 데이터를 고차원 벡터로 변환
- 거리/유사도 계산: 유사도를 판단하기 위한 식 (벡터 간의 거리(L2), 코사인 유사도)으로 유사도를 판단
- Approximate Nearest Neighbor (ANN) 검색:
- 모든 벡터를 비교하는 건 매우 비효율적 → 인덱스 + 근사 탐색으로 속도 최적화
- 대표적 기법: HNSW, IVF, PQ 등 (인덱스 + 탐색 구조)


벡터 DB 성능에 중요한 요소들
- Embedding 품질 : 벡터 DB의 검색 성능은 Embedding이 검색하고자 하는 "의미를 얼마나 잘 표현했는가"에 의해 결정된다. 이미지 검색이라면 이미지의 모양을 잘 표현할 수 있는 딥러닝 모델의 Feature를, RAG 검색을 위해서는 성능 좋은 모델의 Feature를 Embedding으로 선택해야한다.
- 인덱스 선택(HNSW, IVF, PQ) : 벡터의 개수가 많아지면 모든 벡터와의 유사도를 다 검색할 수 없기 때문에(소요 시간), 벡터 DB는 탐색범위를 줄일수 있는 ANN 인덱스를 사용한다. 어떤 ANN 인덱스를 선택하느냐에 따라 정확도, 속도, 메모리 사용량이 달라진다.
| 인덱스 방식 | 정확도 | 속도 | 메모리 사용량 | 동작 방식 |
| Flat / Brute-force (전체 검색) | ★★★★★ (최고) | ★☆☆☆☆ (가장 느림) | ★★★★☆ (벡터 크기만큼 필요) | Query 벡터와 모든 벡터를 하나씩 직접 비교 |
| HNSW | ★★★★☆ (높음) | ★★★★★ (매우 빠름) | ★★★☆☆ (그래프 구조 유지 필요) | 계층형 그래프(HNSW)를 따라 탐색하며 근사 최근접 탐색 수행 |
| IVF (Inverted File Index) | ★★★☆☆ (중간) | ★★★★☆ (빠름) | ★★☆☆☆ (클러스터링으로 효율적) | 벡터를 여러 클러스터로 나누고, 쿼리와 가까운 클러스터만 탐색 |
| PQ (Product Quantization) | ★★☆☆☆ (낮음~중간) | ★★★★☆ (빠름) | ★☆☆☆☆ (압축으로 매우 적음) | 벡터를 여러 부분으로 나눠 각각을 양자화하여 메모리 절감 + 근사 탐색 |
- Metadata + 필터링 조합 : 인덱스 선택이 벡터 내에서 근사 탐색으로 탐색 범위를 줄이는 것이라면 Metadata를 활용한 필터링을 걸면 탐색 범위를 크게 줄일 수 있어서, 속도를 향상시킬 수 있다. 다만, FAISS 등의 벡터 DB에서는 Metadata를 직접 관리해줘야하기 때문에 복잡해질 수 있다.
- 쿼리 벡터 생성 방식(모델 종류나 파라미터에 따라 결과 변화) : Embedding은 모두 동일한 기준(모델, 압축 등)을 가지고 만들어져야한다. 특히, Featue를 뽑기 위한 딥러닝 모델의 성능이 좋아졌다고해도, Embedding은 모두 동일 기준으로 생성해야한다.
- Rerank(재정렬 과정) : 벡터 DB는 의미 기반으로 후보를 빠르게 좁히는데 강점이 있지만, ANN 구조상 근사값이기 때문에 어느 정도의 정확도 손실을 가져간다. 또한, Embedding을 위한 모델로는 성능이 더 좋고 깊은 모델보다 빠르게 Feature를 뽑을 수 있는 모델이 선호된다. 정확도 손실을 위해 일반적으로 벡터 DB의 TOP-K로 후보군을 좁혀놓고, 더 성능이 좋은 Rerank 모델을 별도로 구축하여 사용하는 방법이 많이 사용된다.
대표적인 벡터 DB들
최근 RAG를 구현하기 위해 다양한 벡터 DB들이 등장하였지만, 일반적으로 많이 쓰이는 DB는 아래와 같다.
1) Qdrant
- Rust 기반, 매우 빠르고 안정적
- UI 제공, 시각화 기능 우수
- 필터링 + ANN 조합이 쉬움
- 완전 오픈소스라 비용 부담 없음
2) Milvus
- 다양한 인덱스(HNSW, IVF, PQ) 지원
- 대규모 데이터(수억+) 처리에 강함
- GPU 가속 지원
3) Elastic Vector Search
- 기존 BM25 기반 검색과 벡터 검색을 함께 활용 가능
- 통합 검색이 필요할 때 유리
- 단, 유료 라이선스 문제로 오픈소스 DB와 조합해 쓰기도 함
4) FAISS
- Meta가 만든 초고속 벡터 검색 라이브러리
- GPU 가속 매우 강력
- DB가 아니기 때문에 업데이트/삭제/메타데이터 관리가 어려움
- “데이터가 자주 안 바뀌는 환경 + 초고속 검색”에 적합
'Data Science' 카테고리의 다른 글
| 벡터 DB 검색 기본 개념 : Embedding (2) (1) | 2025.12.09 |
|---|---|
| DTW(Dynamic Time Warping) (1) | 2023.06.02 |
| PCA(Principal Component Analysis) (1) | 2023.05.04 |
| 이상치(Outlier) 제거 방법(2) - 머신 러닝 이용 방법 (1) | 2023.03.31 |
| 이상치(Outlier) 제거 방법(1) - 통계적 방법 (5) | 2023.03.19 |