역대 가장 실력 좋은 레코드 가게 직원을 떠올려 보세요. 머릿속에 맴도는 곡의 제목을 모르는 상황이에요. 그래서 8마디를 엉터리로 흥얼거렸더니, 직원이 "아, 이거죠"하며 정확한 레코드를 꺼내줘요. 제목도 말 안 했고, 아티스트 이름도 없었어요. 그저 분위기만 건넸는데 직원은 곧장 맞는 선반으로 걸어간 거예요.
일반 데이터베이스는 이런 일을 못 해요. 벡터 데이터베이스는 바로 이걸 위해 만들어진 것이에요.
가장 중요한 차이점부터 볼게요. 일반 데이터베이스는 문자 그대로를 따르는 도구예요. 정확한 질문에만 정확히 답해요.
- "Smith라는 고객을 찾아줘."
- "100달러 이상 주문 전부 뽑아줘."
- "이 ID로 된 행 가져와."
철자가 맞으면 완벽해요. 하지만 철자가 틀리거나 모호한 질문을 던지면 그냥 모른다고 해요. 문자를 대조할 뿐, 의미는 읽지 못하거든요. 일반 데이터베이스에게 "주문이 사라진 것 같아"와 "패키지가 도착하지 않았어"는 완전히 다른 두 문장이에요. 공통 단어가 없으니 매치도 없어요.
벡터 데이터베이스는 정반대의 사고방식을 가져요. "같은 단어를 쓰고 있나?"를 묻지 않아요. "둘의 의미가 대략 같은가?"를 물어요. 이 한 가지 차이가 전부예요.
흥얼거림으로 검색하는 원리. 텍스트가 저장되기 전에, 모든 내용은 의미를 담은 긴 숫자 배열로 변환돼요(변환 과정 자체는 별도의 이야기예요). 수학은 신경 쓰지 않아도 됩니다. 이렇게만 상상해 보세요. 모든 문장, 문서, 고객 문의가 거대한 지도 위의 점 하나로 떨어져요. 비슷한 의미의 것들은 서로 가까이 놓이고, 전혀 다른 것들은 지도 반대편에 놓여요.
그 지도 위에서:
- "패키지가 도착 안 했어"와 "주문이 사라진 것 같아"는 거의 같은 자리에 붙어 있어요.
- "포장이 마음에 들어요"는 저 멀리 동네 건너편에 있어요.
- "환불 정책이 어떻게 되나요"는 또 다른 자리에 있고요.
벡터 데이터베이스는 이 점들을 수백만 개 저장해 두고, 새로운 질문이 들어오는 즉시 가장 가까운 점들을 찾아내요. 새 문장을 던지면 새 점이 지도에 찍히고, 주변을 둘러보고, 가장 가까운 이웃들을 가져와요. 지도에서 가깝다는 것은 의미가 비슷하다는 뜻이에요. 이게 전부예요.
실제로 체감하는 순간. 이것이 AI가 "내 자료를 아는 척"할 때 돌아가는 엔진이에요. 문서를 잔뜩 올리고 AI에게 질문을 던지면, AI는 그 문서를 전부 읽지 않아요. 사실 읽을 수도 없어요. 한 번에 담기에는 너무 많거든요. 대신 이런 과정이 일어나요.
질문이 지도 위의 점으로 변환돼요.
벡터 데이터베이스가 그 점과 가장 가까이 있는 문서 조각들을 가져와요(전체 라이브러리가 아니라 관련 부분만요).
그 조각들이 모델에 전달되고, 모델은 그것을 바탕으로 답을 써요.
이 과정의 공식 명칭이 RAG(검색 증강 생성, retrieval-augmented generation)이며 앞으로 자주 듣게 될 거예요. 전문 용어를 걷어내면 단순해요. 먼저 관련 페이지를 가져오고, 그다음 답해요. 벡터 데이터베이스는 가져오는 역할을 하며, 키워드가 아닌 의미로 가져와요. 그래서 질문과 단어 하나도 겹치지 않는 단락도 정확히 찾아낼 수 있어요.
한 가지 분명한 한계 — AI 전반에 걸친 함정과 같아요. "의미가 가장 가까운 것"은 가장 그럴듯한 추측이지 확실한 정답이 아니에요. 벡터 데이터베이스는 가장 가까운 것을 돌려줄 뿐이고, 가장 가깝다고 해서 항상 맞는 건 아니에요. 문서에 없는 내용을 물어봐도 여전히 가장 가까운 점들을 아무렇지 않게 반환해요. 그게 쓸모없는 내용일 수 있어요. 질문에 가깝기만 한 쓰레기는 그냥 쓰레기예요. AI가 내 파일을 보고 답했는데 뭔가 어긋난 느낌이 들 때, 여기서 실수가 일어난 경우가 많아요. 가장 비슷해 보이는 페이지를 가져왔지만, 올바른 페이지가 아니었던 거예요.
차이를 깔끔하게 정리하면:
- 일반 데이터베이스는 정확히 일치하는 행을 찾아요.
- 벡터 데이터베이스는 완전히 다른 표현을 써도 같은 의미를 가진 행을 찾아요.
하나는 파일 캐비닛을 가진 문자주의자예요. 다른 하나는 엉터리 흥얼거림을 듣고 곧장 맞는 선반으로 걷는 직원이에요.