1. 핵심 주장 (What)
Tim Ainge(The Good Collective)는 그래프가 컴퓨터 과학에서 오랫동안 강력한 기반이었고 시각적으로도 매력적이지만, 종종 "옳은 도구가 아닌 경우"가 많다는 문제의식에서 발표를 시작한다. GraphRAG나 그래프 데이터베이스로 전자상거래 시스템을 재구축하는 식으로 성급하게 뛰어들었다가, 기대했던 즉각적인 성과를 보지 못하고 "환멸의 계곡(valley of despair and disillusionment)" 바닥에서 여정을 끝내는 경우가 많다는 것이다.
이 발표의 핵심 메시지는: 그래프 데이터 구조와 알고리즘의 기본기를 더 깊이 이해할수록, 흥미로운 활용 기회가 더 많이 보인다는 것이다. 그래프 네이티브 유스케이스들은 AI 시대에 무르익은 검색, 패턴 인식, 검색(retrieval), 지식 기반 문제들과 훌륭하게 맞아떨어진다.
발표자는 명시적으로 GraphRAG나 에이전트 메모리 그래프는 다루지 않는다고 선언한다. 이미 그 주제만 다루는 다른 발표들이 많기 때문이기도 하지만, 더 중요한 이유는 이 발표가 AI 빌더들을 위한 것이며, 다음 대형 그래프 기반 AI 애플리케이션을 떠올리는 데 도움이 될 "근본적인 패턴"에 초점을 맞추고 싶기 때문이다.
발표 구성은 3단계다: (1) 그래프 기초 속성 정리, (2) 더 나은 결과를 위해 더 나은 그래프를 만드는 팁과 트릭, (3) 그래프를 활용하는 그래프 네이티브 알고리즘과 그 이점. 각 단계마다 원칙 → 쉬운 예제와 코드 → 실제 사례와 실제 이점 순으로 설명한다.
2. 근거와 사례 (Why/How)
그래프의 기본 정의
그래프는 노드(정점, vertices)와 이를 연결하는 엣지(관계, relationships)로 이루어진 것이다. 그게 전부다. 노드와 엣지에는 서로 다른 타입을 부여해 더 많은 의미를 담을 수 있고, 라벨과 속성(properties)을 붙일 수 있으며, 엣지에는 방향을 줄 수도 있다.
좋은 그래프를 만드는 것이 왜 중요한가
비정형 텍스트에서 그래프를 추출하는 것은 매우 흔하고 인기 있는 유스케이스다. 발표자는 이 과정을 단계적으로 개선하는 실험을 보여준다.
-
단순 트리플(triple) 접근의 한계: subject-predicate-object 트리플 구조를 정의하고, 에이전트에게 "핵심 정보를 트리플로 뽑아내라, 방법은 네가 알아서 하라"고 지시한 뒤 랩 팬케이크 레시피를 입력으로 준다. 결과는 그런대로 괜찮지만, 이 그래프로는 멀리 가지 못한다 — 구조가 일관되지 않아 문제가 많다.
-
스키마를 채우게 하라는 원칙: 트리플 대신 "레시피(recipe)"라는 구조를 주고, 레시피에는 재료(ingredients)가 있고 재료에는 수량(quantity)이 있다고 명시한다. 에이전트에게 구조화된 출력(structured outputs)을 사용하게 하면, 이전보다 훨씬 더 의미 있고 정돈된 결과가 나온다. 일관된 노드/엣지 타입 덕분에 관계가 의미를 갖게 되고 질의(query)와 탐색(interrogate)이 가능해진다.
-
구조를 더 깊게: 레시피에 재료뿐 아니라 단계(steps)를 추가하고, 각 단계는 조리 기법(cooking technique)의 적용으로 정의한다. 구조가 흥미로워지기 시작한다.
-
온톨로지(ontology)의 중요성: 스키마가 잘 정의된 후에는 온톨로지 — 즉 정보를 그래프에 정확히 어떻게 추출해 넣을지에 대한 세부 규칙 — 를 추가해야 한다. 예를 들어 재료명 표기를 표준화하고, 단위를 미터법으로 통일하라는 지시를 추가하면 매칭과 변환이 쉬워진다. 이런 추가 지시는 스키마 자체만큼이나 모델에게 중요하다.
"포테이토-포테이토" 문제(동일 개체의 중복 표현)
아무리 좋은 프롬프트도 완벽하지 않다. "garlic cloves"와 "minced garlic", "cumin"과 "cumin seeds", "vegetable oil"과 "oil", 그리고 그냥 "garlic"처럼 같은 개체가 여러 노드로 표현되는 문제가 발생한다.
- 1차 시도(나이브 접근): 사후적으로(retrospectively) 매핑 규칙을 만들어 중복을 제거하면, 노드가 통합되고 공통 재료를 가진 레시피 간 관계가 강화된다. 하지만 이 방식이 잘 작동하려면 모든 재료를 사전에 다 알고 있어야 한다는 한계가 있다.
- 임베딩 모델 활용: 임베딩 모델을 쓰면 더 유연한 매칭이 가능해질 뿐 아니라, 사전에 알 필요가 없는 용어끼리도 매칭할 수 있다. 이는 그래프 기법과 AI 기법을 하이브리드로 결합했을 때 최선의 결과를 얻는 좋은 예시다.
3. 구체적 내용 (Details) — 그래프 네이티브 알고리즘 4가지
잘 구조화되고 정제된 그래프가 준비된 후, 발표자는 실제로 그래프로 무엇을 할 수 있는지 네 가지 알고리즘/기법을 소개한다.
① 단순 질의(Simple Query) — Cypher vs SQL
"마늘(garlic)을 포함한 레시피는 무엇인가"를 찾는 단순 질의를 Cypher(그래프 DB 쿼리)와 관계형 SQL로 나란히 비교한다. 5개, 10개, 20개의 엣지를 순회해야 하는 경우 SQL 쿼리는 급격히 복잡해지지만, 그래프 쿼리는 훨씬 자연스럽고 작성이 쉽다. 관계 순회(traversing relationships)는 그래프 데이터 구조가 본질적으로 뛰어난 영역이다.
② 개인화된 PageRank (Personalized PageRank, PPR)
1998년 Brin과 Page가 유명하게 만든 기본 PageRank의 변형이다. 작동 방식: 작은 캐릭터가 그래프 위를 돌아다니며 지나간 노드마다 표시를 남긴다. 일정 횟수만큼 이동(hop)한 후에는 시작 노드로 순간이동(teleport)한다 — 이 부분이 "개인화(personalized)"의 핵심으로, 시작 노드를 기준으로 결과가 개인화된다. 이 과정을 캐릭터가 지칠 때까지 반복하면, 특정 노드들이 다른 노드들보다 더 많은 표시를 얻게 되는데, 이 노드들이 시작 노드와 더 강한 관계를 가진 노드들이다.
- 참고 사례: Pinterest의 Pixie 논문이 PPR을 활용한 추천 시스템의 대표적 레퍼런스다. 더 최신 사례로는 질문·답변에 기억(memory)을 연결하는 데 그래프 기법을 활용하는 HippoRAG가 있다.
- 실제 응용 — 미국 대법원 판례: 노드와 관계가 밀집된 클러스터에서 어떤 것이 가장 중요한지 추론하기 어려울 때 이런 알고리즘이 진가를 발휘한다. 예시로, "Canvas v. Sheba" 판례에서 "Miranda v. Arizona" 판례는 직접 인용되지 않았지만, 인용 그래프(citation graph) 내의 관계만으로 이를 찾아낼 수 있었다. 단순히 찾아내는 것뿐 아니라, 어떻게 다른 판례를 통해 연결되어 있는지를 보여주는 인용 체인(string of citations)까지 반환할 수 있었다.
③ 최단 경로(Shortest Path) 알고리즘
두 노드를 모두 알고 있지만 그 사이의 관계는 모를 때, 가장 직접적인 경로를 찾는 방법이다.
- 코드베이스 예시: "장바구니 생성자(basket constructor)를 변경한 후 체크아웃 코드가 깨졌는데 이유를 모르겠다"는 상황에서, 코드 그래프 상의 두 노드 사이 엣지를 순회해 심볼, 텍스트, 또는 요약을 컨텍스트로 반환할 수 있다.
- 변형들: 최단 경로 외에도 K개의 최단 경로, 특정 노드를 반드시 거치는 경로, 엣지에 가중치가 있을 때의 최저 비용 경로 등 다양한 변형이 있으며, 각각 두 노드 사이의 관계를 설명하는 데 유용하다.
- 핵심 이점: 서브그래프를 컨텍스트로 검색(retrieve)할 수 있다는 것 — 벡터 검색이나 개별 심볼·참조 조회만으로는 이런 중간 노드들을 찾아낼 수 없었을 것이고, 스스로 알아내려 했다면 느렸을 것이다.
- 정량적 성과: 어느 .NET 코드베이스 평가에서 이 기법(최단 경로 기반 컨텍스트 검색)을 사용해 코드 검색을 위한 툴 호출(tool calls)이 40% 감소하는 성과를 확인했다.
④ 서브그래프 매칭 (Subgraph Matching)
이전 기법들이 노드(들)에서 출발해 그래프를 탐색하는 방식이었다면, 서브그래프 매칭은 전적으로 관계의 "형태(shape)"만으로 질의하는 방식이다. 노드 타입이나 노드 ID를 지정할 수도 있지만, 특정 심볼이나 구체적인 대상을 전혀 모른 채로도 매칭이 가능하다.
- eShop 예시 — 데코레이터 패턴(Decorator Pattern) 탐지: "타깃 클래스를 감싸거나(wraps) 타깃 클래스의 메서드를 소비(consumes)하며, 래퍼와 타깃 클래스가 동일한 인터페이스를 구현하는 클래스"라는 형태(shape)로 검색한 결과, eShop 코드베이스에서 카탈로그 뷰모델 서비스(catalog view model service)와 동일한 클래스를 호출하고 동일한 API를 구현하는 캐시된 버전을 찾아냈다.
- 활용 범위: 캐싱 클래스를 찾고 싶다면 그렇게 검색할 수도 있었겠지만, 이 기법의 진짜 강점은 안티패턴, 특정 유형의 보안 이슈, 악의적 트랜잭션 패턴, 방대한 말뭉치 속 법적 논증(legal arguments) 등 "구체적인 인스턴스나 노드 세부사항을 모른 채 무언가의 형태만으로 찾아야 할 때" 발휘된다.
- 발표자는 이를 "최적화 문제라기보다 거대한 인에이블링(enabling) 알고리즘"이라 평가하며, 다른 도구로는 쉽게 할 수 없는 영역이라고 강조한다.
다루지 않은 주제
전통적인 흐름(flow)·비용(cost)·탐색 알고리즘(의존성이나 네트워크 모델링에 자주 쓰임)은 다소 평범한(run-of-the-mill) 영역이라 생략했다고 언급한다. 또한 예측(prediction), 유사도(similarity), 클러스터링(clustering), GraphRAG, 동적 그래프 구축, 스키마리스(schema-less) 그래프 등은 발표 자료(presentation pack)에 참고자료와 포인터로만 남겨두고 의도적으로 다루지 않았다고 밝힌다.
4. 시사점 및 실행 포인트 (So What)
- 그래프 도입은 "화려함"이 아니라 "적합성"으로 판단하라. GraphRAG나 그래프 DB로 전면 전환하기 전에, 정말 그래프 네이티브 문제(관계 순회, 랭킹, 패턴 매칭)인지 먼저 점검할 것.
- 스키마 우선, 온톨로지 그다음. LLM에게 그래프 추출을 맡길 때 트리플(subject-predicate-object)처럼 느슨한 구조보다, 도메인에 맞는 명시적 스키마(예: recipe → ingredients → quantity)를 구조화된 출력(structured output)으로 강제하는 편이 훨씬 유의미한 결과를 낸다.
- 엔티티 정규화는 임베딩과 결합하라. 동일 개체의 표기 불일치("garlic" vs "minced garlic")는 그래프 품질을 갉아먹는 흔한 함정이다. 사전 정의된 매핑 규칙만으로는 부족하며, 임베딩 기반 매칭을 병행하는 하이브리드 접근이 실무적으로 더 견고하다.
- 코드베이스 탐색·디버깅에 최단 경로/서브그래프 매칭을 활용할 여지가 크다. 특히 "왜 이 변경이 저기서 문제를 일으켰는가" 같은 인과관계 추적, 또는 "이런 패턴(데코레이터, 안티패턴, 보안 취약점)을 가진 코드를 찾아라"는 식의 형태 기반 검색은 벡터 검색이나 개별 심볼 조회로는 채우기 어려운 영역이며, 실측 사례(.NET 코드베이스, 40% 툴 호출 감소)로 비용 절감 효과가 입증되었다.
- PPR 같은 랭킹 알고리즘은 "노이즈 속 중요도" 문제에 강하다. 밀집된 관계 그래프에서 무엇이 진짜 중요한지 사람이 직관적으로 판단하기 어려운 상황(법률 판례 인용망, 추천 시스템, 에이전트 메모리 검색 등)에 적합하다.
- 그래프와 AI(LLM/임베딩)를 배타적으로 보지 말고 하이브리드로 설계하라. 발표 전체를 관통하는 메시지는, 순수 그래프 알고리즘도 순수 LLM 접근도 아닌 "그래프 구조 + AI 기법"의 결합이 실무에서 가장 신뢰할 수 있고 저렴하며 똑똑한 결과를 만든다는 것.
핵심 요약 (20줄)
- Tim Ainge(The Good Collective)가 발표한 "실무자를 위한 그래프 가이드" — AI 애플리케이션을 더 똑똑하고 저렴하고 신뢰할 수 있게 만드는 법을 다룬다.
- 그래프에 대한 과도한 기대로 GraphRAG나 그래프 DB에 성급히 뛰어들었다가 성과 없이 "환멸의 계곡"에서 포기하는 경우가 많다는 문제의식에서 출발.
- 이 발표는 GraphRAG나 에이전트 메모리 그래프를 다루지 않고, AI 빌더에게 유용한 근본 패턴에 집중한다.
- 그래프의 기본 정의: 노드(정점)와 엣지(관계)로 구성되며, 타입·라벨·속성·방향을 가질 수 있다.
- 비정형 텍스트에서 그래프를 추출할 때, 단순 subject-predicate-object 트리플 방식은 결과가 부실하고 활용도가 낮다.
- 핵심 원칙: 추출기(에이전트)에게 명시적 스키마(예: 레시피-재료-수량)를 구조화된 출력으로 채우게 하면 훨씬 의미 있고 정돈된 그래프가 나온다.
- 스키마에 단계(steps)와 조리 기법(technique) 같은 세부 구조를 추가하면 그래프가 더 흥미로워진다.
- 스키마 다음으로 온톨로지(추출 규칙: 이름 표준화, 단위 통일 등)를 프롬프트에 명시하는 것이 스키마 자체만큼 중요하다.
- "포테이토-포테이토" 문제: garlic/minced garlic, cumin/cumin seeds처럼 동일 개체가 여러 노드로 중복 표현되는 문제가 발생한다.
- 사후적 매핑 규칙으로 중복을 제거할 수 있지만, 모든 변형을 사전에 알아야 한다는 한계가 있다.
- 임베딩 모델을 활용하면 사전에 몰랐던 용어까지 유연하게 매칭할 수 있어, 그래프 기법과 AI 기법의 하이브리드가 최선의 결과를 낸다.
- 알고리즘 ① 단순 질의: Cypher(그래프 쿼리)는 SQL보다 다중 엣지(5~20개) 순회 질의를 훨씬 자연스럽고 간결하게 표현한다.
- 알고리즘 ② 개인화된 PageRank(PPR): 시작 노드에서 랜덤 워크 후 시작 노드로 텔레포트를 반복해, 시작 노드와 강하게 연관된 노드를 찾아낸다.
- PPR 사례: Pinterest Pixie 논문(추천), HippoRAG(질문-답변에 기억 연결); 미국 대법원 판례에서 직접 인용되지 않은 Miranda v. Arizona를 인용 그래프 관계만으로 찾아내고 연결 체인까지 반환.
- 알고리즘 ③ 최단 경로: 두 노드는 알지만 관계를 모를 때, 그 사이 경로(심볼/텍스트/요약)를 컨텍스트로 반환. K최단경로, 특정 노드 경유, 가중치 기반 최저비용 경로 등 변형 존재.
- 코드베이스 사례: "basket constructor 변경 후 체크아웃이 깨졌는데 이유를 모름" 같은 디버깅에 최단 경로로 중간 노드를 찾아냄 — 벡터 검색이나 개별 조회로는 찾기 어려운 영역.
- 정량 성과: .NET 코드베이스 평가에서 최단 경로 기반 컨텍스트 검색으로 코드 검색 툴 호출이 40% 감소.
- 알고리즘 ④ 서브그래프 매칭: 구체적 노드·심볼을 몰라도 관계의 "형태"만으로 검색 — eShop 코드베이스에서 데코레이터 패턴(래퍼+타깃 클래스가 동일 인터페이스 구현)을 형태만으로 탐지해 캐시 클래스를 찾아냄.
- 서브그래프 매칭은 안티패턴, 보안 취약점, 악의적 트랜잭션, 법적 논증 등 "구체적 인스턴스를 모른 채 형태로 찾아야 하는" 문제에 특히 강력한 인에이블링 알고리즘이다.
- 결론: 예측·유사도·클러스터링·GraphRAG·동적 그래프는 의도적으로 생략했으며, 그래프 네이티브 알고리즘과 하이브리드(그래프+AI) 접근이 더 똑똑하고 저렴하고 신뢰할 수 있는 AI 애플리케이션을 만드는 열쇠라고 강조하며 마무리.
