GraphRAG를 직접 구축·운용하며 확인한, 기존 RAG의 한계와 지식 그래프를 결합했을 때 얻는 관계 추론·전망·노이즈 내성·토큰 효율의 개선을 정리한다.
최근 ‘사내 문서를 AI에 읽혀 질문에 답하게 하는’ 구조를 들을 기회가 늘었습니다. 이른바 RAG(Retrieval Augmented Generation) 입니다.
이건 확실히 편리합니다. 매뉴얼이나 규정집을 AI에 건네두면 “이 절차는 어떻게 해?”라고 묻기만 해도 답이 돌아오니까요.
하지만 실제로 수천 건의 문서를 다루는 시스템을 만들어 보며 깨달은 점이 있습니다.
‘문서를 읽히는 것’만으로는, AI는 똑똑해지지 않는다.
사람이 지식을 사용할 때는 “A라면 B, B라면 C”처럼 지식의 연결 을 따라가며 생각하죠. 그런데 기존 RAG는 관련 있어 보이는 문서 조각을 찾아오기만 합니다. 점 은 찾아도, 점과 점의 연결 은 보지 못합니다.
이 글에서는 ‘AI에게 책을 건네는’ 것이 아니라 ‘AI에게 지식의 지도를 건네는’ 구조 ── GraphRAG 에 대해, 실제로 구축·운용하며 알게 된 내용을 정리합니다.
먼저 RAG의 구조를 복습해 봅시다.
RAG가 잘하는 것:
단순하고 강력합니다. 많은 유스케이스에서는 이것만으로 충분합니다.
| 질문의 종류 | 구체 예 | RAG의 한계 |
|---|---|---|
| 버전 추적 | “여비 규정이 개정됐는데, 출장 정산 방법이 바뀌었어?” | 최신판은 찾지만, 무엇이 바뀌었고 무엇에 영향을 주는지는 추적하지 못함 |
| 다단 추론 | “이 통지의 근거 법령이 최근 개정됐는지 확인해” | 통지→근거 법령→개정 이력의 3단계를 따라가지 못함 |
| 전체 조망 | “올해 규칙 변경을 전체적으로 정리해” | top-k 청크를 이어 붙인 수준이라, 포괄성이 없음 |
문서가 수백 건이라면 아직 어떻게든 됩니다. 하지만 수천 건 규모 가 되면 비슷한 조각이 대량으로 히트해 정말 필요한 정보가 묻히는 ── 이른바 노이즈 문제 가 두드러집니다.
GraphRAG는 RAG의 구조에 지식 그래프(knowledge graph) 를 결합한 아키텍처입니다.
지식 그래프는 지식을 노드(점) 와 엣지(선) 로 표현한 것입니다.
[여비 규정] ──개정──→ [여비 규정 v2]
│ │
│ 근거 │ 근거
↓ ↓
[출장 정산 매뉴얼] [출장 정산 매뉴얼 v2]
│
│ 참조
↓
[경비 정산 시스템 조작 절차]
사람이 “이 규정이 바뀌었으니 저 매뉴얼도 확인해야겠네”라고 생각하는 것과 같은 구조를, 데이터로 보유합니다.
| 층 | 역할 | 기존 RAG와의 차이 |
|---|---|---|
| Document | 원본 파일의 메타데이터 | RAG와 동일 |
| Chunk | 텍스트 조각 + 벡터 | RAG와 동일 |
| Entity | 문서에서 추출된 ‘지식’ | GraphRAG 고유 |
| Community | 지식의 자동 그룹화 | GraphRAG 고유 |
기존 RAG는 위의 2층만 있습니다. GraphRAG는 Entity 층 과 Community 층 이 추가되면서 ‘지식과 지식의 연결’을 표현할 수 있게 됩니다.
| 항목 | 기존 RAG | GraphRAG |
|---|---|---|
| 검색 방식 | 벡터 유사도(top-k) | 그래프 순회 + 벡터 |
| 검색 단위 | 청크(텍스트 조각) | 엔티티 + 청크 |
| 관계성 이해 | 없음 | 있음(엣지로 표현) |
| 전체 조망 | 약함(조각 모음) | 강함(커뮤니티 요약) |
| 노이즈 내성 | 문서 증가로 악화 | 그래프 구조로 좁힘 |
| 초기 구축 비용 | 낮음 | 높음(그래프 구축 필요) |
| 잘하는 질문 | 사실 확인 | 관계·전체상·추론 |
같은 질문을 RAG와 GraphRAG에 던졌을 때, 답변이 어떻게 달라지는지 봅시다.
프롬프트: “재택근무 신청 방법을 알려주세요”
RAG의 답변:
재택근무를 희망하는 경우, 소속장 승인을 받은 뒤
근태관리 시스템에서 ‘재택근무 신청’을 제출해 주세요.
신청은 근무일 전날 17시까지 해야 합니다.
(참조: 재택근무 규정 제5조)
GraphRAG의 답변:
재택근무를 희망하는 경우, 소속장 승인을 받은 뒤
근태관리 시스템에서 ‘재택근무 신청’을 제출해 주세요.
신청은 근무일 전날 17시까지 해야 합니다.
(참조: 재택근무 규정 제5조)
이런 핀포인트 질문에서는 차이가 거의 없습니다. RAG로 충분합니다.
프롬프트: “여비 규정이 4월에 개정됐는데, 출장 정산 방법은 바뀌었어?”
RAG의 답변:
여비 규정(2026년 4월 개정판)에서는 일당 상한액이 아래와 같이
변경되었습니다.
- 국내 출장: 8,000엔 → 10,000엔
- 해외 출장: 12,000엔 → 15,000엔
(참조: 여비 규정 제12조)
→ 여비 규정의 최신판은 찾지만, 출장 정산 매뉴얼에 대한 영향 은 다루지 않습니다.
GraphRAG의 답변:
여비 규정의 4월 개정에 따라, 아래 영향이 있습니다.
■ 여비 규정의 변경점
- 일당 상한액 인상(국내 8,000→10,000엔, 해외 12,000→15,000엔)
■ 출장 정산 매뉴얼에 대한 영향
- 정산 폼의 ‘일당’란 상한값이 변경되었습니다
- 4월 이전에 신청 완료된 출장은 구 규정이 적용됩니다
■ 경비 정산 시스템의 대응 현황
- 시스템 측 상한 설정은 4/15에 업데이트 예정(정보시스템과 통지 No.2026-031)
⚠ 4/1~4/14 기간은 수동으로 상한액을 확인해 주세요.
(참조: 여비 규정 제12조, 출장 정산 매뉴얼 3.2절,
정보시스템과 통지 No.2026-031)
→ 여비 규정 → 출장 정산 매뉴얼 → 시스템 조작 절차 의 그래프 관계를 따라가며, 영향 범위를 가로질러 답변 합니다.
프롬프트: “올해 컴플라이언스 관련 규칙 변경을 전체적으로 정리해 주세요”
RAG의 답변:
컴플라이언스에 관련된 기술을 찾았습니다.
- 정보보안 정책에서 외부 매체 반입이 금지되었습니다
- 괴롭힘 방지 규정이 개정되었...
(이하, 관련도가 높은 순서로 청크를 나열했을 뿐)
→ top-k로 주운 청크의 조합일 뿐. 누락이 있는지도 알 수 없습니다.
GraphRAG의 답변:
2026년도 컴플라이언스 관련 규칙 변경을 분야별로 정리합니다.
【1. 정보 보안】(3건 변경)
- 외부 매체 반입 금지(4월~)
- 클라우드 서비스 이용 기준 개정(5월~)
- 로그 보관 기간 연장: 1년→3년(6월~)
【2. 괴롭힘 방지】(2건 변경)
- SOGI 괴롭힘 정의 추가(4월~)
- 상담 창구의 외부 위탁화(7월~)
【3. 내부 통제】(1건 변경)
- 결재 권한 재검토(100만 엔→50만 엔으로 인하)
총 6건의 변경이 있었으며, 특히 정보 보안 분야의 변경이 집중되어 있습니다.
→ Community 층의 요약 을 사용해 체계적으로 정리합니다. 이것이 GraphRAG의 진가입니다.
GraphRAG의 가장 큰 특징은 문서가 추가될 때마다 그래프가 성장하고, 답변 품질이 올라간다 는 점입니다.
핵심은 MENTIONS 자동 링크 입니다. 새 문서를 추가하면, 텍스트 안에 기존 엔티티명이 포함되어 있는지 자동으로 확인하고 관계를 연결합니다.
즉, 파일을 올려두기만 해도 기존 지식과 자동으로 연결됩니다.
구체 예로 보겠습니다. 사내 ‘출장 정산’에 대해 질문합니다.
프롬프트(매번 동일): “출장 정산 절차를 알려줘”
출장 정산은 아래 절차로 진행합니다.
1. 출장 보고서를 작성
2. 영수증을 첨부
3. 소속장 승인 획득
4. 경비 정산 시스템에서 신청
(참조: 출장 정산 매뉴얼 제3장)
→ 기본 절차만. 매뉴얼 그대로의 답변입니다.
출장 정산은 아래 절차로 진행합니다.
1. 출장 보고서를 작성
2. 영수증을 첨부
3. 소속장 승인 획득
4. 경비 정산 시스템에서 신청
⚠ 중요: 2026년 4월 여비 규정 개정으로 아래가 변경되었습니다.
- 일당 상한액 인상(국내 8,000→10,000엔)
- 4월 이전 신청분은 구 규정 적용
개정 전후로 정산 금액이 달라질 수 있으니 유의해 주세요.
(참조: 출장 정산 매뉴얼 제3장, 여비 규정 개정 통지 2026-04)
→ 개정 통지가 그래프에 추가되며 여비 규정 개정 → 출장 정산 매뉴얼 관계가 생겨, 개정의 영향을 포함한 답변으로 진화 했습니다.
출장 정산은 아래 절차로 진행합니다.
1. 출장 보고서를 작성
2. 영수증을 첨부
3. 소속장 승인 획득
4. 경비 정산 시스템에서 신청
⚠ 2026년 4월 여비 규정 개정으로 일당 상한액이 변경되었습니다.
💡 자주 묻는 질문(사내 QA에서):
- Q: 4월을 걸치는 출장인 경우, 일당은 어느 규정?
A: 출장 시작일의 규정이 적용됩니다
- Q: 해외 출장 환율은 어느 시점 기준?
A: 귀국일의 사내 레이트(매월 초 갱신)를 사용
- Q: 택시 이용은 어디까지 인정?
A: 막차 이후 또는 짐 20kg 초과인 경우. 사전 승인 필요.
(참조: 출장 정산 매뉴얼, 여비 규정 개정 통지, 사내 QA집 #정산)
→ QA집이 추가되면서 실무 수준의 조언까지 답변 할 수 있게 됐습니다.
아무도 답변 템플릿을 업데이트하지 않았습니다. 문서를 추가했을 뿐인데 그래프 구조가 성장하고, AI가 자동으로 관련 지식을 연결한 결과입니다.
GraphRAG의 또 하나의 중요한 기능이 커뮤니티 검출 입니다.
엔티티 간 관계성을 분석해, 촘촘히 관련된 것끼리 자동으로 그룹화합니다. 사용되는 것은 Leiden 알고리즘 이라는 기법입니다.
직관적으로 말하면:
SNS 친구 관계를 보고 “이 그룹은 같은 동아리 사람들 같네”를 자동으로 간파하는 것. 지식 간 관계의 진하기로, 주제가 가까운 것끼리 묶입니다.
| 레벨 | 입도 | Leiden의 gamma | 용도 |
|---|---|---|---|
| Level 0 | 세밀(개별 토픽) | 1.5 | 구체 질문에 대한 답변 |
| Level 1 | 중간(테마 군) | 0.7 | 테마 횡단 질문 |
| Level 2 | 거침(대분류) | 0.3 | 전체 조망 질문 |
이 계층 구조 덕분에 GraphRAG는 2가지 검색 모드를 구분해 사용합니다.
Local Search(구체 질문용)
Global Search(전체 조망 질문용)
앞서 “컴플라이언스 관련 변경을 정리해”라는 질문에 답할 수 있었던 것은, 이 Global Search + Community 층 덕분입니다.
“그럼 전부 GraphRAG로 하면 되지 않아?”라고 생각할 수 있지만, 그렇지 않습니다.
| 유스케이스 | 예 | RAG로 충분한 이유 |
|---|---|---|
| 사내 FAQ | “유급 신청 방법은?” “Wi-Fi 비밀번호는?” | 한 문서 안에서 답이 완결됨 |
| 제품 매뉴얼 검색 | “에러 코드 E-301 대응법은?” | 독립된 FAQ·트러블슈팅 |
| 계약서 조항 확인 | “해지 통지 기한은 며칠 전?” | 특정 문서에서 사실만 추출하면 됨 |
| 회의록 검색 | “지난달 회의에서 결정된 납기는?” | 날짜와 내용으로 핀포인트 검색 |
| 고객 지원 | “반품 절차를 알려줘” | 절차서에서 해당 부분만 반환 |
공통점: 질문과 답이 1:1로 대응하고, 문서 간 관계를 따라갈 필요가 없습니다.
| 유스케이스 | 예 | GraphRAG가 필요한 이유 |
|---|---|---|
| 법령·규칙의 체계 관리 | “이 통지의 근거 법령은 개정됐어?” | 법률→정령→통지→매뉴얼의 계층을 따라가야 함 |
| 개정 영향 분석 | “여비 규정 개정으로, 다른 어떤 절차가 영향을 받나?” | 규정→관련 매뉴얼→시스템 절차의 연쇄 추적 |
| 조직 횡단 지식 | “이 안건과 관련된 과거 대응 사례를 전부 보여줘” | 여러 부서·여러 연도의 문서를 관계로 연결 |
| 버전 추적 | “이 매뉴얼이 최신판이야? 지난번부터 뭐가 바뀌었어?” | 문서의 개폐 관계(구판→신판→폐지) 관리 |
| 전체 조망 리포트 | “올해도의 보안 관련 변경을 목록으로 만들어” | 커뮤니티 요약으로 체계적으로 망라 |
| 투자 분석 지식 축적 | “예전에 이 종목을 분석했을 때 어떤 우려가 있었지?” | 분석 이력→종목→업종→거시 환경의 관계를 추적 |
공통점: “A와 B의 관계는?” “전체적으로 어떻게 돼?”처럼, 여러 문서를 횡단한 추론이 요구됩니다.
GraphRAG는 만능이 아닙니다. 도입 전에 알아야 할 비용이 있습니다.
| 단점 | 상세 |
|---|---|
| 초기 구축 비용이 높다 | 엔티티 정의, 관계 설계, 추출 파이프라인 구축이 필요합니다. RAG는 “청크 분할해서 벡터 DB에 넣기”만으로 동작하지만, GraphRAG는 그래프 스키마 설계부터 시작합니다 |
| 관계 유지에 구조가 필요 | 문서가 추가·갱신될 때마다 엔티티 추출→관계 구축→커뮤니티 재검출 파이프라인을 돌려야 합니다. 자동화하지 않으면 운영이 붕괴됩니다 |
| 그래프 품질이 곧 답변 품질 | 엔티티 추출 정밀도가 낮거나 관계 정의가 대충이면, RAG보다 답변 품질이 나빠질 수도 있습니다. ‘쓰레기를 넣으면 쓰레기가 나온다’는 그래프에서도 동일합니다 |
| 인프라가 늘어난다 | 벡터 DB에 더해 그래프 DB(Neo4j 등)가 필요합니다. 운영·감시 대상이 늘어납니다 |
| LLM 비용(구축 시) | Microsoft GraphRAG 등은 엔티티 추출에 LLM을 쓰므로, 그래프 구축 시 토큰 비용이 발생합니다(쿼리 시에는 오히려 절약 가능) |
한마디로 정리하면, ‘관계성을 유지하기 위한 구조를 구축하는 만큼, RAG보다 구축 비용이 든다’ ── 이것이 GraphRAG의 최대 단점입니다.
반대로 말하면, 이 구축 비용을 지불할 가치가 있는지가 RAG/GraphRAG 선택 기준이 됩니다.
그래서 처음부터 GraphRAG를 구축할 필요는 없습니다.
RAG에서 GraphRAG로의 이행은 추가형 입니다. 기존 벡터 DB는 그대로 사용할 수 있습니다. Phase1에서 메타데이터를 풍부하게 붙여두면 Phase2의 그래프 구축이 매끄러워집니다.
GraphRAG를 구현할 선택지는 빠르게 늘고 있습니다.
| 이름 | 제공 | 특징 | 추천 용도 |
|---|---|---|---|
| Microsoft GraphRAG | Microsoft Research | 자동 KG 생성, Leiden 검출, Local/Global Search | 풀스펙으로 시험해 보고 싶을 때 |
| LightRAG | 홍콩대학교 | GraphRAG의 1/6000 토큰 소비, 점진 업데이트 | 비용 중시·고속 |
| nano-graphrag | OSS | Microsoft GraphRAG 경량판, 코드가 단순 | 학습·프로토타입 |
| Neo4j + LangChain | Neo4j / LangChain | Cypher 자동 생성, 그래프 DB 본격 운영 | 본격 프로덕션 |
| FalkorDB + LangGraph | FalkorDB | 인메모리 그래프 DB, 초고속 쿼리 | 실시간 처리 |
| LlamaIndex PropertyGraph | LlamaIndex | PropertyGraphIndex, 복수 DB 대응 | LlamaIndex 사용자 |
| 서비스 | 제공 | 특징 |
|---|---|---|
| Amazon Bedrock + Neptune | AWS | 풀 매니지드 GraphRAG(2025년 3월 GA) |
| Azure Cosmos DB AI Graph | Microsoft | CosmosDB 위에서 그래프+벡터 통합 |
| LazyGraphRAG | Microsoft Research | GraphRAG 0.1% 비용(과학 연구용) |
| Neo4j AuraDB + GenAI | Neo4j | 매니지드 Neo4j + GraphRAG 템플릿 |
필자는 Neo4j + 자체 파이프라인 으로 구축했습니다. 자유도는 가장 높지만, 그만큼 엔티티 추출과 관계 정의를 직접 설계해야 합니다. “일단 시험해 보고 싶다”면 Microsoft GraphRAG 또는 LightRAG 부터 시작하는 것을 추천합니다.
여기부터는 기술적인 상세입니다.
노드:
Document { id, title, source_path, category, embedding[768] }
Chunk { id, text, chunk_index, token_estimate, embedding[768] }
Entity { id, name, type, description, embedding[768] }
Community { id, level, title, summary, rank, embedding[768] }
리レーション:
Document -[:HAS_CHUNK]-> Chunk
Chunk -[:NEXT_CHUNK]-> Chunk # 순서 유지
Chunk -[:MENTIONS]-> Entity # 텍스트 중 출현
Entity -[:RELATES_TO {type}]-> Entity # 의미적 관계
Entity -[:BELONGS_TO {level}]-> Community
Community -[:CHILD_OF]-> Community # 계층 구조
CHUNK_SIZE = 512 # 토큰 기준
CHUNK_OVERLAP = 50 # 오버랩
CHAR_PER_TOKEN = 1.5 # 일본어의 경우
경계는 문장 끝(。, \n\n, \n)에서 끊고, 문장 중간에서 잘리지 않도록 배려합니다.
-- 벡터 검색(768차원, cosine 유사도)
CREATE VECTOR INDEX entity_embeddings
FOR (e:Entity) ON (e.embedding)
OPTIONS {indexConfig: {
`vector.dimensions`: 768,
`vector.similarity_function`: 'cosine'
}}
-- 전문 검색
CREATE FULLTEXT INDEX entity_fulltext
FOR (e:Entity) ON EACH [e.name, e.description]
-- 1. 쿼리 벡터로 유사 엔티티 검색
CALL db.index.vector.queryNodes('entity_embeddings', 10, $query_embedding)
YIELD node AS entity, score
-- 2. 1-hop 이웃을 순회
MATCH (entity)-[r:RELATES_TO]-(neighbor:Entity)
-- 3. 관련 청크 획득
MATCH (chunk:Chunk)-[:MENTIONS]->(entity)
-- 4. 커뮤니티 정보를 부가
MATCH (entity)-[:BELONGS_TO]->(comm:Community)
WHERE comm.level <= 1
RETURN entity, collect(DISTINCT neighbor) AS neighbors,
collect(DISTINCT chunk)[..3] AS topChunks,
collect(DISTINCT comm) AS communities
ORDER BY score DESC LIMIT 5
GraphRAG의 간과되기 쉬운 장점이 토큰 효율 입니다.
| 지표 | 기존 RAG | GraphRAG |
|---|---|---|
| 1쿼리당 컨텍스트 | 2,500~5,000 토큰 | 500~2,000 토큰 |
| 정밀도를 올리는 방법 | top-k의 k를 늘림(비용 증가) | 그래프 순회 깊이 조정(비용 소폭 증가) |
| 정밀도와 비용의 관계 | 비례(정밀도↑ = 비용↑) | 비선형(정밀도↑ ≠ 비용↑) |
기존 RAG는 “관련 있어 보이는 청크를 많이 건네고, LLM이 판단하게 하는” 접근입니다. 전달 청크가 늘수록 토큰이 늘어납니다.
GraphRAG는 “그래프를 따라가 정말 필요한 청크만 핀포인트로 가져오는” 접근입니다. 노이즈가 되는 청크가 애초에 포함되지 않기 때문에 적은 토큰으로 고정밀을 달성할 수 있습니다.
이는 특히 API 종량 과금 이 발생하는 프로덕션 환경에서 효과가 큽니다.
GraphRAG를 실제로 구축해 보며 가장 강하게 체감한 점은 아래 3가지입니다.
문서를 텍스트 조각이 아니라 지식 네트워크 로 다루는 것. 그것만으로도 AI의 답변 품질은 극적으로 달라집니다.
문서를 추가할 때마다 그래프가 성장하고 기존 지식과 자동으로 연결됩니다. 같은 질문이라도 배경 지식이 늘면 답의 깊이가 달라집니다. 복리로 지식이 먹히는 세계 입니다.
처음부터 GraphRAG를 구축할 필요는 없습니다. RAG로 운영을 시작하고, “문서 간 관계를 따라갈 수 없다” “전체상을 묻는 질문에 답할 수 없다”를 느끼는 시점에 GraphRAG 층을 추가하는 단계적 접근 이 현실적입니다.