# Notion API를 이용한 RAG 구축: 현재 방식 vs 고도화(Vector) 방식

현재 구축된 챗봇은 **"검색 기반(Search-Based) RAG"**입니다. Notion의 실시간 검색 기능을 활용해 가볍고 빠르게 구축한 버전입니다.
질문하신 대로, 더 높은 정확도와 의미 기반 검색이 가능한 **"임베딩(Vector) 기반 RAG"**(=순수 RAG)를 구축하려면 훨씬 더 복잡한 파이프라인이 필요합니다.

---

## 1. 현재 방식: Search-Based RAG (Live Search)
Notion이 제공하는 '검색 창' 기능을 API로 대신 누르는 것과 같습니다.

### 구조
1. **User**: "오타 수정 기능 있어?"
2. **AI (Keyword Gen)**: 질문을 Notion 검색어로 변경 -> "오타 수정"
3. **Notion API**: 해당 단어가 포함된 제목/본문을 찾아서 리턴
4. **AI (Answer)**: 찾은 내용을 읽고 답변 생성

> **장점**: 
> - 구축이 매우 빠름 (별도 DB 필요 없음).
> - Notion에서 수정하면 즉시 반영됨 (실시간).
>
> **단점**: 
> - **의미 검색 불가**: "급여"를 검색할 때 "월급"이라는 단어만 있는 문서는 못 찾을 수 있음 (단어 일치 기반).
> - **속도/양 제한**: Notion API의 검색 속도에 의존하며, 가져올 수 있는 문서 양에 한계가 있음.

---

## 2. 고도화 방식: Vector RAG (Standard RAG)
AI가 문장의 '의미'를 숫자로 변환(임베딩)하여 저장해두고 찾는 방식입니다.

### 필요 단계 (구축 파이프라인)
RAG를 제대로 구현하려면 아래 5단계를 수행하는 **별도의 서버와 DB**를 구축해야 합니다.

1.  **데이터 추출 (Extract)**
    *   Notion API를 통해 주기적으로 모든 페이지를 긁어옵니다. (매일 밤 or 변경 시마다)
2.  **청킹 (Chunking)**
    *   긴 문서를 문단 단위나 의미 단위로 잘게 쪼갭니다. (예: 500자 단위)
3.  **임베딩 (Embedding)**
    *   쪼갠 텍스트를 AI 모델(OpenAI Embeddings, Google Vertex Embeddings 등)에 넣어 **숫자 벡터(Vector)**로 변환합니다.
    *   예: "사과" -> `[0.1, 0.5, -0.3, ...]`
4.  **벡터 저장소 적재 (Vector Vector)**
    *   변환된 숫자를 검색할 수 있는 전용 DB(Pinecone, Milvus, Elasticsearch 등)에 저장합니다.
5.  **검색 및 생성 (Retrieval & Generation)**
    *   사용자가 질문하면, 질문도 `[0.2, ...]` 숫자로 변환합니다.
    *   DB에서 **숫자가 가장 비슷한**(의미가 가까운) 문서를 찾아냅니다. (이때 "급여"로 검색해도 "월급" 문서를 찾습니다)
    *   찾은 문서를 AI에게 주어 답변을 생성합니다.

### 비교 요약

| 구분 | 현재 방식 (Live Search) | 고도화 방식 (Vector RAG) |
| :--- | :--- | :--- |
| **핵심 기술** | Notion 키워드 검색 API | Vector 임베딩 & Similarity Search |
| **준비물** | API 키만 있으면 됨 | 별도 DB, 임베딩 모델, 동기화 서버 |
| **검색 품질** | 키워드 일치 여부에 의존 | **의미(문맥) 기반 추론 가능** |
| **최신성** | 실시간 (즉시 반영) | 동기화 주기(예: 1시간)에 따라 지연 발생 |
| **구축 난이도** | 하 (반나절 소요) | **상 (최소 1~2주 소요)** |

### 결론
현재는 **"구축 비용 대비 효율"**이 가장 좋은 방식을 채택했습니다.
만약 사내 문서가 수천 개 이상으로 늘어나고, "단어는 다르지만 의미가 같은" 문서들을 찾아야 하는 니즈가 커진다면, 그때 **벡터 DB 도입(2번 방식)**을 고려하시는 것이 좋습니다.
