Vector RAG vs Graph RAG 비교

한눈에 보는 차이

특성Vector RAGGraph RAG
기본 단위텍스트 청크 (Chunk)노드 & 관계 (Node & Edge)
저장 방식벡터 임베딩그래프 구조
맥락 보존❌ 부분적 (청킹 손실)✅ 전체 (관계로 연결)
검색 방식벡터 유사도 검색그래프 탐색 (multi-hop)
검색 결과개별 청크들노드 + 주변 관련 노드
컨텍스트 유형청크 내용만노드 + 관계 + 그래프 구조
확장성토큰 한계 있음관계로 무한 확장 가능
에이전트 입력분리된 정보구조화된 지식

Vector RAG 상세

아키텍처

문서
  ↓
텍스트 분할 (Chunking)
  ├─ Chunk 1 (0-512 tokens)
  ├─ Chunk 2 (512-1024 tokens)
  └─ Chunk 3 (1024-1536 tokens)
  ↓
벡터 임베딩 (Embedding)
  ├─ Chunk 1 → [0.2, 0.5, 0.8, ...]
  ├─ Chunk 2 → [0.1, 0.3, 0.9, ...]
  └─ Chunk 3 → [0.3, 0.4, 0.7, ...]
  ↓
벡터 DB 저장 (Vector Database)
  └─ Pinecone, Weaviate, Milvus, pgvector, ...
  ↓
유사도 검색 (Similarity Search)
  쿼리 → 임베딩 → 유사 청크 반환

예시: 영화 추천

입력: “액션 영화 추천해줘”

벡터 RAG 프로세스:

  1. 쿼리 → 임베딩 변환
  2. 벡터 DB에서 유사도 높은 청크 검색
  3. 상위 3개 청크 반환:
    청크 1: "배우 Tom Cruise가 출연한 Mission Impossible은 
            액션과 스릴러 장르입니다. ..."
    
    청크 2: "영화 평점 시스템: 평점은 0-10점 사이로 ..."
    
    청크 3: "Fast & Furious 시리즈는 자동차 액션 영화로 ..."
    
  4. 이 청크들을 LLM에 전달 → “Mission Impossible과 Fast & Furious를 추천합니다”

문제점:

  • 각 청크가 독립적 (관계 없음)
  • 배우, 장르, 평점 간 연결 정보 없음
  • 전체 영화 데이터베이스의 구조 미반영

Vector RAG의 장점

✅ 간단한 구현
✅ 빠른 배포
✅ 의미론적 검색 (semantic search)
✅ 낮은 복잡도

Vector RAG의 한계

❌ 청크 크기에 따른 맥락 손실
❌ 청크 간 관계 정보 누락
❌ 전체 문맥 파악 불가능
❌ 긴 문서에서 성능 저하


Graph RAG 상세

아키텍처

문서
  ↓
엔티티 & 관계 추출 (Entity Relation Extraction)
  ├─ Entities: Movie, Actor, Director, Genre
  └─ Relations: ACTED_IN, DIRECTED_BY, BELONGS_TO
  ↓
온톨로지 기반 그래프 구성
  [Movie: Inception] --ACTED_IN--> [Actor: Leo DiCaprio]
                     --DIRECTED_BY--> [Director: Nolan]
                     --BELONGS_TO--> [Genre: Sci-Fi]
                     --RATED--> (8.8)
  ↓
그래프 DB 저장 (Neo4j, ArangoDB, ...)
  ↓
그래프 기반 검색 (Graph Traversal)
  노드 찾기 → 주변 노드 탐색 → 전체 그래프 반환

예시: 영화 추천

입력: “액션 영화 추천해줘”

Graph RAG 프로세스:

  1. 쿼리 → “액션” 장르 노드 찾기
  2. 관련 노드들을 그래프로 탐색:
    [Genre: Action] 
    ├─ [Movie: Mission Impossible]
    │  ├─ [Actor: Tom Cruise]
    │  ├─ [Director: McQuarrie]
    │  └─ [Rating: 8.5]
    │
    ├─ [Movie: Fast & Furious]
    │  ├─ [Actor: Vin Diesel]
    │  ├─ [Director: Lin]
    │  └─ [Rating: 7.9]
    │
    └─ [Movie: John Wick]
       ├─ [Actor: Keanu Reeves]
       ├─ [Director: Stahelski]
       └─ [Rating: 8.1]
    
  3. 각 영화의 전체 맥락 (배우, 감독, 평점 등) 함께 반환
  4. LLM이 풍부한 정보로 답변 생성

장점:

  • 모든 관계 명시적 (ACTED_IN, DIRECTED_BY 등)
  • 전체 맥락 보존 (노드 간 연결)
  • 다중 경로 검색 가능 (multi-hop)
  • 구조화된 정보 (LLM이 쉽게 이해)

Graph RAG의 장점

✅ 전체 맥락 보존
✅ 관계 명시적 표현
✅ 다중 홉 검색 가능
✅ 구조화된 컨텍스트
✅ 장문서 처리 우수
✅ 에이전트 친화적

Graph RAG의 한계

❌ 온톨로지 설계 필요
❌ 엔티티/관계 추출 복잡
❌ 초기 구축 비용 높음
❌ 유지보수 복잡도 증가


실제 비교: 영화 database

Vector RAG의 검색 결과

쿼리: "Leonardo DiCaprio와 유사한 배우"

반환:
청크 1: "Leonardo DiCaprio는 Inception, Titanic 등의 영화에 출연..."
청크 2: "영화 평점 시스템 설명..."
청크 3: "유명 배우들의 필모그래피..."

→ 배우 간 관계 정보 없음
→ "누가 유사한가"에 대한 명확한 답 불가능

Graph RAG의 검색 결과

쿼리: "Leonardo DiCaprio와 유사한 배우"

반환:
[Leonardo DiCaprio]
├─ ACTED_IN → [Inception, Titanic, Great Gatsby, ...]
├─ COLLABORATES_WITH → [Tom Hardy, Marion Cotillard, ...]
└─ SIMILAR_ACTOR → [Brad Pitt, Johnny Depp, ...]

→ 명확한 관계 정보 제공
→ "유사 배우" 직접 추출 가능
→ 협력 배우도 함께 제시 가능

어떤 경우 어느 것을 사용할까?

Vector RAG 추천

  • 🟢 문서 청킹으로 충분한 경우
  • 🟢 단순 유사도 검색만 필요
  • 🟢 빠른 프로토타이핑
  • 🟢 관계 정보가 덜 중요한 도메인
  • 예: 뉴스 검색, 학술 논문 검색

Graph RAG 추천

  • 🟢 관계가 매우 중요한 경우
  • 🟢 엔티티 중심의 도메인
  • 🟢 다중 홉 검색이 필요
  • 🟢 에이전트 시스템 구축
  • 🟢 온톨로지 설계가 명확한 경우
  • 예: 지식그래프, 영화 추천, 조직도, 법률 관계망

하이브리드 접근

최적: Vector RAG + Graph RAG 결합

사용자 쿼리
    ↓
의도 파악 (Intent Detection)
    ├─ 간단한 검색 → Vector RAG
    └─ 복잡한 다중 관계 → Graph RAG
    ↓
컨텍스트 조합
    └─ Vector 검색 결과 + Graph 구조 정보
    ↓
LLM 입력 (Rich Context)
    ↓
고품질 응답

통합 개념


관련 소스: why-use-graphrag (비교 설명), word-chain-chatbot (실제 구현)