벡터 DB는 일반적인 관계형 데이터베이스(RDBMS)나 NoSQL과는 다르게, 수치화된 벡터 데이터를 저장하고, 이 벡터들 사이의 유사도를 기준으로 데이터를 검색하는 데 최적화된 데이터베이스입니다. 여기서 핵심적인 검색 방식이 바로 KNN 검색 (K-Nearest Neighbors Search) 입니다. 이 글에서는 KNN이 무엇이며, 벡터 DB에서 어떻게 활용되는지를 상세히 다루겠습니다.
KNN은 “K개의 가장 가까운 이웃(K-Nearest Neighbors)”의 약자입니다. 말 그대로 어떤 기준 벡터(query vector)에 대해, 데이터베이스에 저장된 수많은 벡터들 중에서 가장 가까운 K개를 찾는 것이 핵심입니다.
이 ‘가깝다’는 개념은 보통 코사인 유사도(cosine similarity), 유클리드 거리(Euclidean distance), 내적(dot product) 등으로 정의됩니다.
예를 들어, 사용자가 “파란색 바다”라는 문장을 검색했을 때, 그 문장을 임베딩한 벡터를 기준으로, 벡터 DB에 저장된 문서 벡터들 중 가장 유사한(가장 가까운) K개의 벡터를 찾아주는 것이 KNN 검색입니다.
벡터 DB에서 KNN 검색은 다음과 같은 방식으로 활용됩니다.
사용자의 입력(문장, 이미지, 오디오 등)을 벡터로 변환합니다. 이를 위해 OpenAI의 text-embedding-ada
나 Hugging Face의 sentence-transformers
, CLIP, Whisper 등 다양한 임베딩 모델을 사용합니다.
변환된 쿼리 벡터와 DB에 저장된 수천~수억 개의 벡터들 간의 거리를 계산하여 유사도를 측정합니다. 이때 사용하는 유사도 지표는 보통 아래 셋 중 하나입니다.
수억 개의 벡터 중 가장 가까운 K개를 빠르게 찾기 위해, 벡터 DB는 효율적인 인덱싱 기법을 사용합니다. 예를 들어:
KNN 알고리즘에 따라 유사도가 높은 K개의 벡터를 찾아, 이와 연결된 실제 문서나 데이터 포인트를 사용자에게 반환합니다.
항목 | 설명 |
---|---|
정의 | KNN은 주어진 쿼리 벡터에 가장 가까운 K개의 벡터를 찾는 알고리즘 |
활용 위치 | 벡터 DB 내부의 검색 핵심 알고리즘 |
거리 계산 | cosine, euclidean, dot product 등 |
인덱싱 기법 | IVF, HNSW, PQ 등 |
사용 사례 | AI 검색, 추천 시스템, 이미지 검색 등 |
KNN 검색은 벡터 DB의 심장부라 할 수 있습니다. 벡터 DB는 단순한 벡터 저장소가 아니라, 이 유사도 기반의 검색을 빠르게 수행할 수 있도록 다양한 최적화와 구조를 갖춘 시스템이며, KNN 검색은 이 기능을 실현하는 가장 직접적인 수단입니다.