
GraphRAG 완전 가이드: 문서를 그래프로 바꾸면 AI가 보지 못하던 것을 본다
기본 RAG가 놓치는 '전체 그림'을 어떻게 볼 것인가. Microsoft Research의 GraphRAG 논문을 중심으로, 지식 그래프가 왜 필요한지부터 실전 비용 분석, 선택 가이드까지 — 논문과 실무 사례로 풀어본다.

기본 RAG가 놓치는 '전체 그림'을 어떻게 볼 것인가. Microsoft Research의 GraphRAG 논문을 중심으로, 지식 그래프가 왜 필요한지부터 실전 비용 분석, 선택 가이드까지 — 논문과 실무 사례로 풀어본다.
당신은 AI 기반 문서 분석 시스템을 만들고 있다. 벡터 검색 기반의 RAG를 구축했고, "재택근무 정책이 뭐야?" 같은 구체적 질문에는 잘 답한다. 팀은 만족스럽다.
그러다 경영진이 이런 질문을 던진다:
"지난 분기 고객 불만 데이터 5000건에서 반복되는 패턴이 뭐야?"
시스템이 멈칫한다. 벡터 검색은 5000건 중 질문과 가장 유사한 5건을 가져올 뿐이다. 5000건 전체를 관통하는 패턴? 그건 볼 수 없다.
비슷한 질문들:
이 질문들의 공통점은 명확하다. 개별 문서가 아니라 문서 간의 관계와 전체를 관통하는 구조를 파악해야 답할 수 있다.
2024년 4월, Microsoft Research가 정확히 이 문제를 해결하기 위해 발표한 것이 GraphRAG다.
기본 RAG의 작동 원리를 떠올려보자. 문서를 수백~수천 개의 청크로 쪼개고, 각 청크를 벡터로 변환한 뒤, 질문과 가장 유사한 상위 k개를 가져와 LLM에 전달한다.
이 구조에는 근본적인 맹점이 있다:
1. 개별 청크는 서로를 모른다. 청크 A에 "삼성전자가 NVIDIA와 HBM 공급 계약을 체결했다"가 있고, 청크 B에 "NVIDIA가 현대자동차와 자율주행 칩 공급 협약을 맺었다"가 있다면 — 인간은 이 둘을 보고 "삼성전자 → NVIDIA → 현대자동차"라는 간접적 연결을 파악한다. 하지만 벡터 검색은 이 두 청크를 독립적으로 취급한다. 연결은 보이지 않는다.
2. 상위 k개는 전체의 극히 일부다. 5000개 청크에서 top-5를 가져오면 전체의 0.1%다. "전체 패턴"을 0.1%의 샘플로 파악하는 것은 불가능에 가깝다.
3. 글로벌 질문에 로컬 검색을 적용한다. "이 데이터셋의 핵심 주제는?"은 전체를 조망하는 글로벌 질문이다. 하지만 벡터 검색은 질문과 가장 가까운 개별 청크를 찾는 로컬 검색이다. 도구와 문제가 맞지 않는다.
Diffbot과 FalkorDB의 벤치마크는 이 한계를 정량적으로 보여준다:
개체(entity) 수가 5개를 넘어가는 복잡한 쿼리에서 벡터 RAG의 정확도는 **0%**로 떨어졌다. 관계를 추적할 수 없기 때문이다. 반면 GraphRAG는 56.2%를 유지했다 — LLM 단독(16.7%) 대비 3.4배.
"From Local to Global: A Graph RAG Approach to Query-Focused Summarization" 저자: Darren Edge, Ha Trinh, Newman Cheng 등 (Microsoft Research) 발표: arXiv:2404.16130 (2024년 4월, 2025년 2월 개정)
논문의 핵심 아이디어는 한 문장으로 요약된다:
*"문서를 벡터가 아니라 **지식 그래프(knowledge graph)*로 변환하고, 그래프의 커뮤니티 구조를 활용하여 로컬 질문과 글로벌 질문 모두에 답하자."
비유하자면 이렇다. 기본 RAG가 도서관에서 "이 질문과 관련된 페이지를 찾아줘"라고 하는 것이라면, GraphRAG는 먼저 도서관의 모든 책을 읽고, 인물·사건·장소 간의 관계도를 그리고, 주제별로 분류한 뒤에 질문에 답하는 것이다.
지식 그래프는 정보를 **노드(개체)**와 **엣지(관계)**로 표현한다.
이 구조에서는 "삼성전자와 현대자동차의 간접적 관계는?"이라는 질문에 그래프를 따라 삼성전자 → NVIDIA → 현대자동차 경로를 추적하여 답할 수 있다. 벡터 검색으로는 이 경로가 보이지 않는다.
GraphRAG의 작동은 크게 두 단계로 나뉜다: **인덱싱(indexing)**과 쿼리(query).
문서를 600토큰 단위의 TextUnit으로 나눈다(100토큰 오버랩). 논문에 따르면 GPT-4는 600토큰 청크에서 2400토큰 청크 대비 거의 2배 많은 개체를 추출했다. 작은 청크가 추출 품질에 유리한 것이다.
각 TextUnit에서 LLM이 개체(이름, 유형, 설명)와 관계를 추출한다.
여기서 핵심 기법이 **글리닝(gleaning)**이다. LLM은 한 번의 추출로 모든 개체를 잡아내지 못한다. 그래서 추출 후 "빠뜨린 개체가 있는가?"라고 LLM에게 자기 점검을 시킨다. 이때 logit bias 100을 적용해 yes/no 중 하나를 강제로 선택하게 하고, "No"이면 "많은 개체가 누락되었습니다(MANY entities were missed)"라는 강한 프롬프트로 추가 추출을 유도한다. 논문에 따르면 두 번째 패스에서 20~40% 더 많은 개체를 발견한다.
추출된 개체는 노드가 되고, 관계는 엣지가 된다. 같은 이름의 개체가 여러 TextUnit에서 등장하면 하나의 노드로 병합하고, 설명은 누적한다. 관계가 여러 번 언급되면 엣지의 가중치가 올라간다.
논문의 실험 데이터에서 팟캐스트 트랜스크립트(~100만 토큰)는 8,564개 노드와 20,691개 엣지의 그래프로 변환되었다.
그래프가 만들어지면, 밀접하게 연결된 노드들을 그룹으로 묶는다. 이것이 **커뮤니티 탐지(community detection)**이며, GraphRAG는 Leiden 알고리즘을 사용한다.
Leiden 알고리즘이 하는 일을 직관적으로 설명하면: 파티에서 사람들이 자연스럽게 대화 그룹을 형성하는 것과 같다. 서로 많이 연결된(=대화가 많은) 사람들이 하나의 그룹이 된다.
이 과정이 재귀적으로 반복되어 계층 구조가 만들어진다:
왜 Louvain이 아니라 Leiden인가? Louvain 알고리즘은 내부적으로 연결되지 않은 노드들이 같은 커뮤니티에 포함되는 문제가 있다. Leiden의 정제 단계가 이를 해결하여, 모든 커뮤니티가 실제로 잘 연결되어 있음을 보장한다.
각 커뮤니티에 대해 LLM이 구조화된 요약 보고서를 생성한다. 보고서에는 제목, 핵심 요약, 영향도 등급(110), 510개의 핵심 발견사항이 포함된다. 이 요약들이 쿼리 시 핵심 자료가 된다.
GraphRAG는 질문의 성격에 따라 세 가지 검색 모드를 제공한다.
"이 데이터셋의 핵심 주제는?" 같은 전체 조망 질문에 사용된다.
2025년에 추가된 **동적 커뮤니티 선택(Dynamic Community Selection)**이 핵심 개선점이다. 기존에는 특정 레벨의 모든 커뮤니티 보고서(예: Level 1의 ~1,500개)를 처리했다. 개선된 방식에서는 저렴한 모델(GPT-4o-mini)로 각 보고서의 관련성을 먼저 평가하고, 관련 없는 보고서와 그 하위 커뮤니티 전체를 가지치기한다. 결과: 평균 77% 비용 절감, 품질은 통계적으로 동등.
"카모마일의 약효 성분은?" 같은 특정 개체 관련 질문에 사용된다.
2024년 10월에 추가된 하이브리드 모드. 로컬 질문이지만 더 넓은 맥락이 필요할 때 사용한다.
5,000개 이상의 AP 뉴스 기사로 테스트한 결과, DRIFT 검색은 로컬 검색 대비 포괄성에서 78%, 다양성에서 81% 승률을 기록했다.
팟캐스트 트랜스크립트(~100만 토큰)와 뉴스 기사(~170만 토큰) 데이터셋에서의 결과:
마지막 항목이 특히 인상적이다. 최상위 수준(C0) GraphRAG는 나이브 텍스트 요약 대비 97% 이상 적은 토큰으로도 72% 승률을 유지했다.
2025년 발표된 체계적 비교 연구는 더 균형 잡힌 그림을 보여준다:
| 질문 유형 | RAG 우세 | GraphRAG 우세 |
|---|---|---|
| 단일 사실 질문 | 64.78% F1 | 63.01% |
| 세부 정보 질문 | 55.28% | 46.88% |
| 멀티홉 추론 | 67.02% | 70.27% |
| 비교 질문 | 56.31% | 60.16% |
| 시간적 추론 | 25.73% | 49.06% |
핵심 발견: 둘은 "어느 쪽이 더 낫다"가 아니라 **"상호 보완적"**이다. 두 접근법을 통합한 결과 멀티홉 질문에서 6.4% 추가 향상을 달성했다.
NASA는 Memgraph를 활용해 People Knowledge Graph를 구축했다. 직원, 프로젝트, 부서, 전문 분야 간의 관계를 그래프로 표현하여 "이 프로젝트에 필요한 우주 방사선 전문가가 누구인가?"를 멀티홉으로 추적한다.
기존 벡터 검색 시스템은 이력서의 키워드만 매칭했다. GraphRAG는 실제 프로젝트 참여 여부를 관계 추적으로 검증하여, 신규 인력 온보딩과 내부 전문가 발굴 속도를 크게 개선했다.
Cedars-Sinai 의료센터는 20개 이상의 생의학 데이터 소스를 통합한 160만 개 엣지의 지식 그래프를 구축했다. 이를 기반으로 한 KRAGEN 시스템은 멀티홉 의료 추론에서 94.2% 정확도를 달성했다 — ChatGPT 단독 사용 시 49.9%와 비교된다.
특히, 유전자-약물 상호작용 분석을 통해 알츠하이머 치료에 테마제팜(Temazepam)과 이부프로펜(Ibuprofen)의 새로운 가능성을 발견했다. 이것은 개별 논문 검색으로는 보이지 않는, 문서 간 관계를 가로지르는 추론의 결과다.
Precina Health의 P3C(Provider-Patient CoPilot)은 진료 기록, 사회적 데이터, 행동 데이터를 지식 그래프로 연결했다. 결과: 월간 HbA1c(당화혈색소) 1% 감소 — 표준 치료 대비 12배 빠른 개선 속도.
기본 RAG는 다층적 인과관계(임상 → 사회 → 행동 데이터)를 추적할 수 없었으나, 지식 그래프 기반 시스템은 환자별로 이 관계를 추적하여 개인화된 치료 전략을 제시할 수 있었다.
한 금융 기관의 프로덕션 배포 사례에서 복잡한 멀티홉 질문에 대한 정확도가 **43% → 91%**로 향상되었고, 쿼리 비용은 97% 감소, 2개월간 환각(hallucination) 건수 0건을 기록했다.
GraphRAG의 가장 큰 단점은 인덱싱 비용이다. 모든 TextUnit에 LLM을 호출하여 개체와 관계를 추출하기 때문이다.
Microsoft의 공식 비용 가이드(2025)에서 제시하는 단어당 비용:
| 모델 | 단어당 비용 | ~100만 단어 인덱싱 |
|---|---|---|
| GPT-4-Turbo | $0.0000765 | ~$76 |
| GPT-4o | $0.0000380 | ~$38 |
| GPT-4o-mini | $0.0000113 | ~$11 |
커뮤니티 보고에 따르면, 1000페이지 PDF를 GPT-4-Turbo로 인덱싱한 사용자가 8.20에 처리했다.
| 검색 모드 | 평균 토큰 사용 | GPT-4o 기준 비용 |
|---|---|---|
| 로컬 검색 | ~11,500 토큰 | |
| 글로벌 검색 | ~150,000 토큰 | ~$0.80 |
| 글로벌 (동적 선택) | ~35,000 토큰 | ~$0.18 |
GraphRAG를 비용 효율적으로 운영하는 실전 전략:
1. 모델 선택: GPT-4o-mini는 GPT-4-Turbo 대비 55배 저렴하면서, 600토큰 청크 기준으로 유사한 품질을 보인다. 프로덕션 인덱싱에 가장 현실적인 선택.
2. 동적 커뮤니티 선택 활성화: 글로벌 검색 비용을 77% 절감.
3. 사전 비용 추정: Microsoft의 공식 도구에서 --estimate-cost 플래그로 전체 인덱싱 전에 비용을 미리 확인 가능.
4. 경량 대안 고려: NLP 기반 추출을 사용하는 FastGraphRAG는 LLM 호출 없이 그래프를 구축하여 인덱싱 비용을 거의 0으로 줄이지만, 추출 품질이 떨어질 수 있다. LazyGraphRAG는 전체 GraphRAG 대비 인덱싱 비용 0.1%, 글로벌 검색 비용 700배 절감을 주장한다.
모든 문제에 GraphRAG가 정답은 아니다. 독립 벤치마크와 실무 경험이 보여주는 한계:
1. 단순 사실 질문: "API 엔드포인트 URL이 뭐야?" 같은 단일 사실 검색에서는 벡터 RAG가 더 정확하고 빠르다. 그래프 구축의 오버헤드가 이점을 초과한다.
2. 자기 완결적 콘텐츠: FAQ, 레시피, 독립적 매뉴얼 항목 등 개체 간 관계가 희박한 콘텐츠에서는 그래프 구조의 이점이 거의 없다.
3. 답할 수 없는 질문(Null Query): GraphRAG(글로벌)는 답이 없는 질문에서 13.95% 정확도를 보였다 — 답을 "만들어내는" 환각 경향이 있다. 존재하지 않는 패턴을 합성해버리는 것이다.
4. 소규모 모델 사용 시: 그래프에서 검색된 컨텍스트는 길이가 길어질 수 있다. 8B 파라미터급 소규모 모델에서는 이 긴 입력이 오히려 환각을 증가시키는 경우가 보고되었다.
5. 저지연 필수 환경: 로컬 검색은 100~500ms, 글로벌 검색은 그 이상 소요된다. 실시간 챗봇에는 벡터 검색(~50ms)이 유리하다.
그래프 구축 시 놓치는 개체도 상당하다. KG 기반 방법의 개체 커버리지는 65.8% — 필요한 개체의 34.2%를 놓친다. 모델 품질에 따른 차이도 있다: GPT-4o 구축 시 75.08% 정확도 vs GPT-4o-mini 시 71.17% (4%p 차이).
| 구현체 | 핵심 특징 | 인덱싱 비용 | 최적 사용 사례 |
|---|---|---|---|
| Microsoft GraphRAG | 전체 파이프라인, 자동 튜닝, DRIFT 검색 | 높음 | 리서치, 종합 분석 |
| LlamaIndex PropertyGraphIndex | 유연한 모델 백엔드, 로컬 LLM 지원 | 중간 | LlamaIndex 생태계 사용자 |
| Neo4j + GraphRAG | 프로덕션급 그래프 DB, Cypher 쿼리, 시각화 | 중간 | 엔터프라이즈, 기존 Neo4j 사용자 |
| LightRAG | 쿼리당 토큰 6000배↓, ~80ms 지연 | 낮음 | 비용/지연 민감 환경 |
| nano-graphrag | 경량 오픈소스, 커뮤니티 활발 | 낮~중간 | 빠른 프로토타이핑 |
graphrag prompt-tune 명령으로 데이터의 1%를 샘플링하여 도메인별 추출 프롬프트를 자동 생성할 수 있다. 테스트에서 자동 튜닝된 프롬프트는 기본 프롬프트 대비 2.7배 많은 개체(4,896 vs 1,796)와 2.9배 많은 관계(8,210 vs 2,851)를 추출했다. 새로운 도메인에 적용할 때 반드시 실행해야 하는 첫 번째 단계다.
기본 개체 유형은 (조직, 지역, 인물)이다. 도메인에 따라 추가하면 추출 품질이 크게 향상된다:
| 도메인 | 추가 개체 유형 |
|---|---|
| 법률 | 계약, 조항, 당사자, 판례 |
| 기술 | 컴포넌트, API, 버전, 라이브러리 |
| 의료 | 질병, 약물, 유전자, 임상시험 |
| 금융 | 종목, 지표, 규제, 거래 |
| 시나리오 | 추천 | 이유 |
|---|---|---|
| 법률 문서 간 상충 분석 | GraphRAG (로컬+글로벌) | 조항-판례 관계 추적이 핵심 |
| 공급망 리스크 종합 평가 | GraphRAG (글로벌) | 수백 공급업체 간 연결 패턴 파악 |
| 사내 문서 Q&A 챗봇 | Advanced RAG | 단순 질문이 대부분, 저지연 필요 |
| 의료 연구 문헌 분석 | GraphRAG + Neo4j | 유전자-약물-질병 다단계 추론 |
| 고객 불만 패턴 분석 | GraphRAG (글로벌) | 수천 건에서 반복 패턴 추출 |
| 기술 문서 검색 | Advanced RAG + 하이브리드 검색 | 특정 함수/API 이름 정확 매칭 |
| 전사 지식 관리 플랫폼 | GraphRAG + Advanced RAG 조합 | 글로벌 질문은 GraphRAG, 단순 검색은 벡터 |
한 번에 전체 GraphRAG를 구축하는 것보다 단계적으로 접근하는 것이 현실적이다:
Phase 1: 기본 RAG로 시작 (1주) 하이브리드 검색 + 리랭킹으로 기본 시스템 구축. 대부분의 질문이 이 수준에서 해결되는지 확인.
Phase 2: 병목 식별 (2~3주) "어떤 질문에서 성능이 떨어지는가?"를 체계적으로 측정. 멀티홉, 종합 분석, 관계 추적 질문이 실패한다면 GraphRAG 후보.
Phase 3: 소규모 GraphRAG 파일럿 (2~4주)
전체 코퍼스가 아니라 가장 관계가 복잡한 하위 데이터셋에만 GraphRAG를 적용. --estimate-cost로 비용 사전 확인. GPT-4o-mini + 자동 튜닝으로 비용 최적화.
Phase 4: 하이브리드 프로덕션 (지속적) 단순 질문은 벡터 RAG, 복잡한 질문은 GraphRAG로 라우팅하는 Adaptive 구조 구축.
600토큰이 논문에서 검증된 최적값이다. 이보다 작으면(50~100토큰) 개체 간 공존 관계가 더 잘 포착되지만 LLM 호출 수가 급증한다. 이보다 크면(2400토큰) 추출이 부정확해진다. 600토큰 + 글리닝 1회가 비용 대비 품질의 최적 조합이다.
그래프를 시각적으로 확인하면 추출 품질과 커뮤니티 구조를 직관적으로 파악할 수 있다.
settings.yaml에서 snapshots: graphml: true로 설정하면 .graphml 파일을 직접 로드. OpenORD → ForceAtlas2 레이아웃 조합 권장GraphRAG의 핵심 가치를 한 문장으로 정리하면:
기본 RAG가 AI에게 "관련 페이지를 찾는 눈"을 줬다면, GraphRAG는 "문서 간 관계를 따라 전체 그림을 보는 눈"을 준다.
하지만 이 글에서 반복적으로 강조한 것처럼, GraphRAG가 항상 답은 아니다. 단순 사실 검색에서는 벡터 RAG가 더 정확하고 빠르다. 인덱싱 비용은 여전히 상당하다. 답할 수 없는 질문에서 환각 경향이 있다.
**핵심은 "어떤 질문을 풀려는가"**다. 개별 문서 안에서 답을 찾는 문제라면 벡터 RAG로 충분하다. 하지만 문서 사이에서 답을 찾아야 한다면 — 관계를 추적하고, 패턴을 종합하고, 전체를 조망해야 한다면 — GraphRAG는 현재 가장 강력한 도구다.
참고 논문 및 자료