GraphRAG: 벡터 RAG의 한계를 그래프로 메우다 — local vs global

GraphRAG — 인덱싱(그래프+커뮤니티 요약)과 쿼리(local vs global) GraphRAG — 두 단계 ① 인덱싱 — 그래프를 짓고 주제로 묶어 요약을 굽는다 문서 추출 지식 그래프 + 커뮤니티 주제 A 요약 주제 B 요약 주제 C 요약 커뮤니티 요약 (미리 구움) 인덱싱이 끝나면 두 종류의 질문에 모두 답할 준비 완료 ② 쿼리 — 질문의 크기에 따라 두 갈래 local — 특정 개체 이웃 "X와 관련된 사실은?" 좁게·깊게 파고든다 global — 커뮤니티 요약 종합 종합 답변 "코퍼스 전체의 핵심 주제는?" — map-reduce로 요약을 종합
GraphRAG를 한 장으로 — 인덱싱에서 문서를 그래프로 짓고 커뮤니티로 묶어 요약을 미리 구워 둔 뒤, 쿼리에서 지역(local) 질문은 특정 개체 이웃으로 좁게, 전역(global) 질문은 커뮤니티 요약을 종합해 답한다.

들어가며

이 글은 Agentic Knowledge Graph Curriculum5단계입니다. 1단계에서 벡터 DB가 “의미가 비슷한 조각”은 잘 찾지만 연결에는 약하다는 점을 짚었고, 4단계에서 LLM으로 그래프를 짓는 법을 익혔습니다. 이 글은 그 둘을 잇습니다 — 지은 그래프를 검색에 결합해 벡터 RAG의 빈틈을 메우는 GraphRAG입니다.

RAG(Retrieval-Augmented Generation)는 이제 LLM 애플리케이션의 기본기입니다. 문서를 임베딩으로 저장하고, 질문과 의미가 가까운 조각을 찾아 LLM에 넘겨 답하게 합니다. 그런데 이 벡터 RAG가 자꾸 헛발질하는 두 종류의 질문이 있습니다 — 여러 사실을 연결해야 답이 나오는 다중 홉 질문, 그리고 “이 코퍼스 전체를 관통하는 핵심은?” 같은 전역 질문입니다. GraphRAG는 정확히 이 두 빈틈을 겨냥합니다.

📌 이 글에서 다루는 내용

  • 벡터 RAG의 한계: 다중 홉·전역·설명가능성에서 top-k 의미 검색이 놓치는 것, 왜 “조각을 잘 찾는 것”만으로는 부족한가
  • GraphRAG 아키텍처: 문서→그래프 인덱싱, community detection으로 주제 클러스터 만들기, 요약을 미리 굽기, local search와 global search의 차이
  • 하이브리드·트레이드오프: 벡터와 그래프를 함께 쓰는 하이브리드 검색, 인덱싱 비용·지연·정확도의 균형, 언제 GraphRAG가 값을 하는가

한눈에 보기 — 인덱싱과 쿼리, 두 단계

GraphRAG는 두 단계로 이해하면 명료합니다. 인덱싱은 무겁지만 한 번만(그래프를 짓고 커뮤니티 요약을 미리 굽습니다), 쿼리는 그 위에서 질문의 크기에 따라 두 갈래로 답합니다.

flowchart TD
    subgraph INDEX["인덱싱 — 한 번, 무겁게"]
        D["문서 코퍼스"] --> EX["LLM 추출<br/>(4단계)"]
        EX --> KG["지식 그래프"]
        KG --> COMM["community detection<br/>주제 클러스터로 묶기"]
        COMM --> SUM["커뮤니티 요약<br/>미리 굽기"]
    end

    subgraph QUERY["쿼리 — 질문의 크기에 따라"]
        Q["질문"] --> ROUTE{"지역 vs 전역?"}
        ROUTE -->|"특정 개체 중심"| LOCAL["local search<br/>노드 이웃 + 관련 텍스트"]
        ROUTE -->|"코퍼스 전체"| GLOBAL["global search<br/>커뮤니티 요약 map-reduce"]
    end

    SUM -.->|"미리 구운 요약을 쓴다"| GLOBAL
    KG -.->|"그래프를 탐색"| LOCAL

이 그림의 좌표는 하나입니다 — GraphRAG의 힘은 “커뮤니티 요약을 미리 구워 둔다”는 것입니다. 덕분에 벡터 RAG가 못 하던 전역 질문에, 질의 시점에 코퍼스 전체를 다시 읽지 않고도 답할 수 있습니다.

벡터 RAG의 한계 — 조각을 잘 찾는 것만으로는

벡터 RAG의 동작을 한 줄로 요약하면 “질문과 의미가 가까운 조각(top-k)을 찾아 LLM에 넘긴다”입니다. 이 방식이 구조적으로 약한 지점이 셋 있습니다.

  • 다중 홉 질문: “우리 회사에 투자한 VC가 투자한 다른 회사 중 우리 경쟁사는?” — 답이 한 문단에 있지 않고 여러 사실(투자 관계 → 다른 투자처 → 경쟁 여부)을 연결해야 나옵니다. 의미가 비슷한 조각을 아무리 모아도, 벡터 검색은 그 연결을 스스로 잇지 못합니다.
  • 전역(global) 질문: “이 문서 코퍼스 전체를 관통하는 핵심 리스크 다섯 가지는?” — top-k는 코퍼스의 일부 조각만 볼 뿐, 전체를 조망해 종합하지 못합니다. k를 아무리 키워도 컨텍스트 창을 넘습니다.
  • 설명가능성: “왜 이 답인가”가 벡터 거리로만 남습니다. 근거를 경로로 제시하지 못합니다.

공통 원인은 하나입니다 — 벡터 RAG에는 개체와 개체 사이의 명시적 구조가 없습니다. 조각들은 서로 독립적인 점일 뿐, 그들이 어떻게 연결되는지·전체가 어떤 주제로 뭉치는지를 모릅니다. GraphRAG는 바로 그 구조를 그래프로 복원합니다.

다중 홉 질문 — 벡터 RAG는 조각을 못 잇고, 그래프는 경로로 잇는다 같은 다중 홉 질문 — "누리테크의 경쟁사는?" 벡터 RAG — 흩어진 top-k 조각 …VC가 누리테크에 투자했다… …VC가 미리내에도 투자했다… …미리내는 급성장 스타트업이다… ? 조각은 다 찾았지만 — 연결을 스스로 못 잇는다 독립된 점들일 뿐, 개체 사이 구조가 없다 그래프 — 경로가 곧 답이자 근거 투자받음 투자함 누리테크 우리 회사 VC 미리내 = 경쟁사 ✓ 홉을 따라 연결을 잇는다 — 누리테크 → VC → 미리내 경로 자체가 "왜 이 답인가"의 근거가 된다
같은 다중 홉 질문에 대해 — 벡터 RAG는 관련 조각을 다 찾고도 서로 떨어진 점으로 남겨 연결을 못 잇지만, 그래프는 개체를 잇는 경로를 따라가 답을 밝히고 그 경로가 곧 근거가 된다. (개체명은 예시입니다.)

GraphRAG 아키텍처 — 그래프에 구조를 새기다

Microsoft가 2024년 공개한 GraphRAG가 이 접근의 대표 구현입니다. 핵심은 인덱싱 단계에서 코퍼스에 구조를 미리 새겨 두는 것입니다.

인덱싱 — 그래프와 커뮤니티 요약

  1. 엔티티·관계 추출: 4단계의 LLM 추출로 문서에서 개체와 관계를 뽑아 지식 그래프를 짓습니다.
  2. community detection: 그래프에서 서로 촘촘히 연결된 노드 묶음(커뮤니티, 곧 주제 클러스터)을 찾습니다. Leiden 같은 알고리즘이 그래프를 계층적 주제 그룹으로 분할합니다 — “이 코퍼스에는 규제 관련 주제, 제품 관련 주제, 인사 관련 주제가 있다”처럼.
  3. 커뮤니티 요약: 각 커뮤니티를 LLM으로 요약해 미리 구워 둡니다. 이 요약이 전역 질문의 재료가 됩니다.

이 인덱싱은 무겁습니다(코퍼스 전체를 LLM에 통과시키고 요약까지 생성). 하지만 한 번 구워 두면, 질의 시점의 비용이 극적으로 낮아집니다.

쿼리 — local과 global

인덱싱이 끝나면 두 종류의 검색이 가능합니다.

  • local search(지역 검색): 질문이 특정 개체를 중심으로 할 때. 그 노드의 이웃(연결된 개체·관계)과 관련 원문 조각을 함께 모아 LLM에 넘깁니다. 다중 홉 질문 — “X와 연결된 Y를 거쳐 Z를…” — 이 여기서 풀립니다. 벡터 RAG가 못 하던 연결을 그래프가 이어 줍니다.
  • global search(전역 검색): 질문이 코퍼스 전체를 조망할 때. 미리 구운 커뮤니티 요약들을 map-reduce로 종합합니다 — 각 요약이 질문에 부분 답변을 내고(map), 그것을 하나로 합칩니다(reduce). “코퍼스 전체의 핵심 주제는?”이 여기서 답해집니다. (예: 사내 위키 전체에 대해 “우리 팀들이 반복적으로 부딪히는 리스크는?”을 물으면, 팀별 커뮤니티 요약이 각자 리스크를 내고 종합됩니다.)
쿼리의 두 메커니즘 — local의 이웃 확장 vs global의 map-reduce local — 씨앗 개체에서 이웃으로 홉을 넓힌다 씨앗 1홉 2홉 … 노드 이웃 + 원문 조각 (그래프 + 텍스트 하이브리드) 다중 홉 답변 특정 개체 중심 · 좁게·깊게 — 홉을 따라 연결을 잇는다 global — 커뮤니티 요약을 map-reduce로 종합 질문 주제 A 요약 주제 B 요약 주제 C 요약 부분 답변 A 부분 답변 B 부분 답변 C map — 요약마다 부분 답변 reduce 종합 답변 reduce — 하나로 합침
local은 씨앗 개체에서 이웃으로 홉을 넓혀 "노드 이웃 + 원문"을 모아 다중 홉 질문에 답하고, global은 커뮤니티 요약마다 부분 답변을 내는 map 뒤에 그것을 하나로 합치는 reduce로 전역 질문에 답한다.

하이브리드와 트레이드오프 — 언제 값을 하는가

벡터 + 그래프 하이브리드

GraphRAG는 벡터 RAG의 대체가 아니라 보완입니다. 실전에서는 둘을 함께 씁니다 — 벡터 검색으로 질문과 관련된 진입 개체를 찾아 그래프에 들어가고(vector로 seed), 그래프 탐색으로 연결을 따라가 답을 완성합니다. local search 자체가 이미 “그래프 이웃 + 관련 텍스트 조각”을 섞는 하이브리드입니다. 순수 의미 유사도가 중요한 단순 Q&A는 여전히 벡터 RAG가 더 싸고 빠릅니다.

비용·지연·정확도

GraphRAG의 값은 공짜가 아닙니다.

  • 인덱싱 비용: 코퍼스 전체를 LLM으로 추출·요약하므로 초기 비용·시간이 큽니다. 코퍼스가 자주 바뀌면 재인덱싱 부담이 커집니다(7단계의 증분 갱신이 이 문제를 다룹니다).
  • 정확도 향상: 대신 다중 홉·전역 질문의 답변 품질과 근거 제시 능력이 크게 오릅니다.
  • 선택 기준: 질문이 연결·종합을 요구하고, 코퍼스가 상대적으로 안정적일 때 GraphRAG가 값을 합니다. 질문이 단순 조각 검색이고 최신성이 절대적이면 벡터 RAG로 충분합니다.

정리하면 — “연결이 답인 질문이 자주 나오는가”가 GraphRAG 도입의 판단 기준입니다. 1단계에서 세운 그 성질이 여기서 다시 돌아옵니다.

정리

  • 벡터 RAG는 조각을 잘 찾지만 연결을 못 잇습니다: 다중 홉·전역·설명가능성이 필요한 질문에서 구조적으로 약합니다 — 개체 사이의 명시적 구조가 없기 때문입니다.
  • GraphRAG는 그 구조를 그래프로 복원합니다. 인덱싱에서 문서를 그래프로 짓고, community detection으로 주제를 묶고, 요약을 미리 굽습니다.
  • 쿼리는 두 갈래입니다 — local search는 개체 이웃으로 다중 홉 질문에, global search는 커뮤니티 요약 map-reduce로 전역 질문에 답합니다.
  • 벡터와 그래프는 하이브리드로 함께 쓰입니다. GraphRAG는 인덱싱 비용을 대가로 연결·종합 질문의 품질을 얻습니다 — “연결이 답인 질문이 자주 나오는가”가 도입 기준입니다.

다음 글에서는 그래프를 읽는 데서 예측·추론으로 넓힙니다 — 노드를 벡터로 옮기는 임베딩, 없는 관계를 예측하는 링크 예측, 그리고 다중 홉 추론입니다.

다음 학습 (Next Learning)