RAG (5) - Vector Database

이도연·2026년 8월 4일

AI 이론 공부해보기

목록 보기
72/76
post-thumbnail

좋은 아침입니다.

RAG에서는 문서를 여러 Chunk로 나눈 뒤, 각 Chunk를 Embedding Vector로 변환합니다.

하지만 문서가 많아지면 저장해야 하는 Embedding Vector의 수도 함께 증가합니다.

수많은 Vector를 단순히 하나씩 비교하면 검색 시간이 길어질 수 있기 때문에, Vector를 효율적으로 저장하고 검색할 수 있는 시스템이 필요합니다.

이번 글에서는 Embedding Vector를 저장하고, 사용자의 질문과 가까운 Vector를 검색하는 Vector Database에 대해 알아보겠습니다.


일반 Database

일반적인 Database는 문자열이나 숫자와 같은 데이터를 저장하고 검색합니다.

예)

사용자 ID이름나이
1김나무20

필요한 데이터를 찾을 때는 값이 정확하게 일치하는지 확인합니다.

-- 이름이 "김나무"이고 나이가 20인 사용자 검색
SELECT *
FROM 이름
WHERE name = '이도연'
  AND age = 20;

따라서 일반 Database는 정확한 값이나 조건을 기준으로 데이터를 찾는 데 적합합니다.

하지만 RAG에서는 문장의 값이 정확히 같은지를 비교하는 것이 아니라, 문장의 의미가 얼마나 비슷한지를 비교해야 합니다.


Vector Database

Vector Database는 Embedding Vector를 저장하고 검색하기 위한 Database입니다.

https://pub.towardsai.net/this-new-embedding-model-cuts-vector-db-costs-by-200x-bf6dc9ba7d56

Vector Database에는 Embedding Vector뿐만 아니라 원본 Chunk와 Metadata도 함께 저장할 수 있습니다.

Embedding Vector : [0.21, -0.15, 0.73, ...]


원본 Chunk : "연차는 사내 시스템에서 신청해야 합니다."


Metadata
 문서명: 사내 규정

 페이지: 12

사용자의 질문이 들어오면 질문도 같은 Embedding Model을 사용하여 Vector로 변환합니다.

이후 질문 Vector와 가까운 문서 Vector를 검색합니다.


일반 Database와 Vector Database의 차이

일반 Database

일반 Database는 정확한 값이나 조건을 기준으로 데이터를 검색합니다.

문서 제목이 "연차 규정"인 데이터 검색

검색할 값을 미리 알고 있거나 명확한 조건이 있을 때 적합합니다.

Vector Database

Vector Database는 Vector 사이의 유사도를 기준으로 데이터를 검색합니다.

질문

"휴가는 어떻게 신청하나요?"

        ↓

의미가 비슷한 문서 검색

"연차는 사내 시스템에서 신청해야 합니다."

질문과 문서에 같은 단어가 포함되어 있지 않아도 의미가 비슷하면 검색할 수 있습니다.

일반 Database
->  값과 조건을 기준으로 검색


Vector Database
->  Vector 사이의 의미적 유사도를 기준으로 검색

Vector Database의 저장 구조

https://brunch.co.kr/@harryban0917/336

RAG에서는 일반적으로 각 Chunk를 하나의 데이터로 저장합니다.
하나의 데이터는 ID, Embedding, 원본 Chunk, Metadata 같이 구성될 수 있습니다.

예를 들어 다음과 같습니다.

ID: chunk_001

Vector: [0.21, -0.15, 0.73, ...]

Content: 연차는 사내 시스템에서 신청해야 합니다.

Metadata:
- 문서명: 사내 규정
- 페이지: 12
- 카테고리: 휴가

Embedding Vector는 Similarity Search에 사용됩니다.
원본 Chunk는 검색된 후 LLM의 Context로 전달됩니다.
Metadata는 문서의 출처를 표시하거나 검색 범위를 제한하는 데 사용할 수 있습니다.


Vector Database의 동작 방식

https://www.altexsoft.com/blog/vector-database/

RAG에서 Vector Database를 사용하는 과정은 다음과 같습니다.

1. 원본 문서 불러오기

2. 문서를 여러 Chunk로 분리

3. 각 Chunk를 Embedding Vector로 변환

4. Vector와 원본 Chunk를 저장

5. 사용자 질문 입력

6. 질문을 Embedding Vector로 변환

7. 질문과 가까운 Vector 검색

8. 검색된 Chunk를 LLM에 전달

문서의 Embedding은 일반적으로 미리 생성하여 저장합니다.
사용자의 질문이 들어올 때마다 모든 문서를 다시 Embedding할 필요는 없습니다.

문서 Embedding
→ 미리 생성하여 저장


질문 Embedding
→ 사용자의 질문이 들어올 때 생성

이를 통해 질문이 들어왔을 때 관련 문서를 빠르게 검색할 수 있습니다.


Vector Index

저장된 Vector가 적다면 질문 Vector와 모든 문서 Vector를 하나씩 비교할 수 있습니다.

하지만 Vector가 수십만 개 이상으로 증가하면 모든 Vector를 비교하는 데 많은 시간이 필요합니다.

질문 Vector

        ↓

문서 Vector 1과 비교

문서 Vector 2와 비교

문서 Vector 3과 비교

...

모든 Vector와 비교

Vector Index는 많은 Vector에서 가까운 Vector를 빠르게 찾기 위한 자료 구조입니다.

Embedding Vector 저장

        ↓

Vector Index 생성

        ↓

질문과 가까운 후보를 빠르게 검색

모든 Vector를 정확하게 비교하는 방법을 Exact Search라고 합니다.

반면 일부 후보를 빠르게 찾아 가까운 Vector를 검색하는 방법을 Approximate Nearest Neighbor Search라고 합니다.

이를 줄여서 ANN Search라고 합니다.


Exact Search와 ANN Search 비교

질문 Vector와 저장된 모든 Vector를 비교합니다.

가장 정확한 검색 결과를 얻을 수 있지만, 저장된 Vector가 많아질수록 검색 시간이 증가합니다.

모든 Vector를 비교하지 않고 가까울 가능성이 높은 후보를 먼저 찾습니다.

검색 결과가 완전히 정확하지 않을 수 있지만, 많은 Vector에서도 빠르게 검색할 수 있습니다.

[ Exact Search ]
→ 모든 Vector를 비교
→ 정확하지만 느릴 수 있음

[ ANN Search ]
→ 가까운 후보를 중심으로 비교
→ 빠르지만 일부 결과를 놓칠 수 있음

RAG처럼 많은 문서를 검색해야 하는 환경에서는 검색 속도를 높이기 위해 ANN Search를 주로 사용합니다.


Metadata Filtering

Vector Database는 Vector Similarity뿐만 아니라 Metadata를 이용하여 검색 범위를 제한할 수 있습니다.

예를 들어 여러 회사의 문서가 하나의 Database에 저장되어 있다고 가정하겠습니다.

회사 A의 문서

회사 B의 문서

회사 C의 문서

회사 A의 사용자가 질문했다면 회사 A의 문서만 검색해야 합니다.

Vector Similarity Search + 회사 = A

또는 특정 카테고리나 날짜를 기준으로 검색할 수도 있습니다.

카테고리 = 휴가

작성일 >= 2026년

문서 유형 = 사내 규정

Vector Similarity와 Metadata Filtering을 함께 사용하면 의미적으로 관련된 문서 중에서 필요한 조건을 만족하는 문서만 검색할 수 있습니다.


Vector Database의 장단점

장점

Vector Database는 많은 Embedding Vector를 저장하고 빠르게 검색할 수 있습니다.

같은 단어가 포함되어 있지 않아도 의미가 비슷한 문서를 찾을 수 있습니다.

원본 Chunk와 Metadata를 Vector와 함께 저장할 수 있습니다.

Metadata Filtering을 사용하면 특정 조건에 맞는 문서만 검색할 수 있습니다.

또한 ANN Search를 사용하여 많은 Vector에서도 검색 속도를 높일 수 있습니다.

단점

Embedding Model의 성능이 낮으면 Vector Database를 사용하더라도 관련 문서를 정확하게 찾기 어렵습니다.

ANN Search는 검색 속도가 빠르지만 실제로 가장 가까운 Vector를 놓칠 수 있습니다.

Embedding Model을 변경하면 기존 문서의 Embedding Vector도 다시 생성해야 합니다.

또한 저장되는 Vector가 많아질수록 필요한 저장 공간과 관리 비용도 증가합니다.


요약

이번 글에서는 Vector Database에 대해 알아보았습니다.

핵심 내용을 정리하면 다음과 같습니다.

  • Vector Database는 Embedding Vector를 저장하고 검색하기 위한 Database입니다.

  • Vector 사이의 의미적 유사도를 기준으로 관련 데이터를 검색합니다.

  • Embedding Vector와 함께 원본 Chunk, Metadata를 저장할 수 있습니다.

  • 검색된 원본 Chunk는 LLM의 Context로 전달됩니다.

  • Vector Index와 ANN Search를 사용해 가까운 Vector를 빠르게 찾습니다.

  • Metadata Filtering을 사용하면 특정 조건에 맞는 문서만 검색할 수 있습니다.

  • 검색 품질은 Embedding Model과 저장된 문서의 품질에 영향을 받습니다.


다음 글에서는 사용자의 질문과 관련된 문서를 가져오는 Retriever에 대해 알아보겠습니다.

Retriever는 Vector Database와 같은 검색 시스템을 사용하여 질문에 필요한 문서를 선택하고, 이를 LLM에 전달하는 역할을 합니다.

부족한 글 읽어주셔서 감사합니다.

틀린 내용이나 피드백은 댓글로 남겨주시면 감사하겠습니다.

감사합니다.

profile
저희.서이.하실래요?

0개의 댓글