벡터 데이터베이스

의미론적 유사성을 차원의 영역에서 검색하는 인공지능의 외장 메모리

— 엔터프라이즈 AI 아키텍처 백서

키워드 매칭 검색 엔진으로도 충분히 구현 가능한 시스템에 트렌디함을 얹으려다 인프라 예산만 3배로 깨진다. 코사인 유사도 수치 조금 잘 나왔다고 무조건 같은 뜻이라고 우겨대는 꼴을 보면 복장이 터진다.1

1. 개요

벡터 데이터베이스(Vector Database)는 텍스트, 이미지, 음성 등 비정형 데이터를 고차원의 실수 벡터로 변환(Embedding)하여 저장하고, 이들 간의 수학적/의미적 거리(유사도)를 기반으로 초고속 검색을 수행할 수 있도록 설계된 특수 목적용 데이터베이스다. AI가 과거를 기억하게 만들고 최신 외부 정보를 팩트 기반으로 참고하도록 돕는 RAG(Retrieval-Augmented Generation) 구축의 핵심 코어 엔진 역할을 담당한다.

2. 구동 메커니즘: 차원으로 환원된 세상의 모든 의미

인간은 '고양이'와 '야옹이'가 아주 비슷한 뜻임을 직관적으로 안다. 하지만 전통적인 관계형 데이터베이스(RDBMS)는 두 단어의 스펠링이 완전히 다르므로 별개의 데이터로 다룬다. 벡터 DB는 이를 방지하고자 각 단어를 수천 차원의 공간 좌표(예: [0.12, -0.45, 0.89, ...])로 매핑한다.(...) 의미적으로 가까운 단어들은 고차원 공간상에서도 서로 오순도순 모여있게 설계되는데, 검색 요청이 들어오면 검색어 주변의 가장 가까운 이웃 데이터들을 KNN(K-Nearest Neighbors) 알고리즘 등을 동원해 신속하게 낚아채 온다. 이것이 바로 기계가 '문맥을 읽는 듯한' 기묘한 검색이 가능한 비결이다.

3. 실무의 애환: 차원의 저주와 튜닝의 늪

이 고차원 좌표 평면은 가끔 상식을 뒤엎는 버그를 배설한다. 분명 의미상 전혀 상관없는 헛소리가 수학적으로 거리가 가깝다는 이유로 최상단 검색 결과로 올라와 할루시네이션을 부채질하는 촌극이 흔하게 터진다.2 임베딩 모델의 차원이 커질수록(예: 1536차원 이상) 계산 속도가 나락으로 가기 때문에, 성능을 유지하면서 정확도를 챙기기 위해 HNSW(Hierarchical Navigable Small World) 같은 해괴망측한 인덱싱 기법의 수많은 하이퍼파라미터 노브를 밤새도록 돌리며 테스트해야 하는 가혹한 삽질이 동반된다.(...)

4. 관련 밈 및 드립

4.1. 코사인 유사도(Cosine Similarity) 만능설

사람들끼리 의견 조율이나 대화가 전혀 안 통할 때, '우리 생각의 코사인 유사도가 0에 가깝다'라거나 '이정도면 거리가 가까우니 대충 퉁치자'며 개발자식으로 타협을 시도하는 대화 밈이다. 정작 실무에선 0.99의 유사도가 나와도 헛소리가 튀어나오는 무력함에서 유래했다.

4.2. AI의 단기 기억 상실증 치료제

거대 모델들의 컨텍스트 윈도우 한계로 인해 이전 대화 내용을 잊어버리는 것을 풍자하며, 벡터 DB를 뇌 뒤통수에 꽂아 넣는 외장 하드디스크처럼 묘사하는 드립이다. 뇌 용량이 모자라면 메모리를 수동으로 수혈해 주겠다는 인간의 잔인한 효율성을 투사했다.

5. 여담

  • 하이브리드 검색의 유혹: 실제 현업에서는 벡터 유사도 검색 하나만 단독으로 쓰면 영 믿음직스럽지 못해, 전통적인 형태소 분석 키워드 검색 엔진(Elasticsearch 등)과 결과를 합쳐서 랭킹을 다시 매기는 혼종(Hybrid Search) 방식을 최종적으로 채택하는 귀결을 맞이한다.
  • 고가의 인프라 유지비: 벡터 데이터를 가속하여 검색하려면 인메모리 상에서 복잡한 행렬 연산을 수행해야 하므로 일반 DB 대비 서버 비용이 뚝뚝 떨어진다. 멋모르고 시작했다가 한 달 뒤 날아온 클라우드 청구서를 보고 오열하는 주니어 개발자들이 줄을 잇는다.
  • PGVector의 역습: 굳이 비싸고 관리하기 까다로운 독립형 벡터 데이터베이스를 안 쓰더라도, 전 세계 최고 인기 DB 중 하나인 PostgreSQLpgvector 플러그인만 깔면 웬만한 기능이 다 수행되어 신규 벡터 DB 스타트업들의 숨통을 조이고 있다.(...)

6. 관련 문서

각주

  1. 수학적으로는 완벽한 이웃 노드일지 몰라도, 인간이 읽었을 땐 전혀 생뚱맞은 아웃풋이 쏟아지는 불일치 현상이 자주 터진다.

  2. 이러한 현상을 필터링하기 위해 메타데이터 필터링을 겹겹이 쳐야 하는데, 그 순간 기존 RDBMSWHERE 절과 다를 게 없어지는 현타를 겪게 된다.