본문 바로가기
ai

Graph Database + AI 통합 가이드 - Neo4j로 지식 그래프 구축하기

by bamsik 2026. 2. 12.
반응형

Graph Database가 AI에 필요한 이유

2026년 AI 업계의 주요 트렌드 중 하나는 Graph Database의 부상입니다. 전통적인 관계형 데이터베이스나 문서 지향 NoSQL로는 해결하기 어려운 문제들이 있었고, AI의 복잡한 연관 관계 처리를 위해 그래프 데이터베이스가 주목받고 있습니다.

왜 지금 Graph Database인가?

  • 복잡한 관계 표현: AI가 이해해야 할 개념들 사이의 연결은 단순한 테이블로 표현하기 어렵습니다
  • 실시간 추론: 여러 단계를 거쳐야 하는 질문에 빠르게 답할 수 있습니다
  • 컨텍스트 유지: 대화 맥락, 사용자 히스토리 등을 자연스럽게 저장하고 활용합니다

Neo4j로 시작하는 AI 지식 그래프

Neo4j는 가장 널리 사용되는 그래프 데이터베이스입니다. Python에서 간단하게 시작할 수 있습니다.

설치 및 설정

# Docker로 Neo4j 실행
docker run \
    --name neo4j \
    -p 7474:7474 -p 7687:7687 \
    -d \
    -e NEO4J_AUTH=neo4j/password \
    neo4j:latest

# Python 드라이버 설치
pip install neo4j

Python 연결

from neo4j import GraphDatabase

class KnowledgeGraph:
    def __init__(self, uri, user, password):
        self.driver = GraphDatabase.driver(uri, auth=(user, password))
    
    def close(self):
        self.driver.close()
    
    def add_concept(self, name, category):
        with self.driver.session() as session:
            session.run(
                "CREATE (c:Concept {name: $name, category: $category})",
                name=name, category=category
            )
    
    def add_relation(self, from_concept, to_concept, relation_type):
        with self.driver.session() as session:
            session.run(
                """
                MATCH (a:Concept {name: $from}), (b:Concept {name: $to})
                CREATE (a)-[r:RELATES_TO {type: $relation}]->(b)
                """,
                **{'from': from_concept, 'to': to_concept, 'relation': relation_type}
            )

# 사용 예시
kg = KnowledgeGraph("bolt://localhost:7687", "neo4j", "password")
kg.add_concept("Python", "Language")
kg.add_concept("Flask", "Framework")
kg.add_relation("Flask", "Python", "BUILT_WITH")

AI와 Graph Database 통합 패턴

실제 AI 프로젝트에서 그래프 데이터베이스를 어떻게 활용할 수 있을까요?

1. RAG + Knowledge Graph

Retrieval-Augmented Generation에 지식 그래프를 결합하면 단순 벡터 검색보다 훨씬 정확한 결과를 얻을 수 있습니다.

def rag_with_graph(query, llm, kg):
    # 1. 벡터 검색으로 관련 문서 찾기
    relevant_docs = vector_search(query)
    
    # 2. 그래프에서 연관 개념 찾기
    related_concepts = kg.find_related_concepts(relevant_docs)
    
    # 3. 확장된 컨텍스트로 LLM 호출
    enriched_context = combine(relevant_docs, related_concepts)
    return llm.generate(query, enriched_context)

2. 대화 맥락 관리

챗봇에서 대화 히스토리를 그래프로 저장하면 더 자연스러운 대화가 가능합니다.

CREATE (u:User {id: 'user123'})
CREATE (m1:Message {text: 'Python 추천해줘', timestamp: datetime()})
CREATE (m2:Message {text: '웹 개발용으로 Flask 추천합니다', timestamp: datetime()})
CREATE (u)-[:SENT]->(m1)
CREATE (m2)-[:REPLY_TO]->(m1)

3. 추천 시스템

사용자-항목-태그 관계를 그래프로 표현하면 협업 필터링을 자연스럽게 구현할 수 있습니다.

// 비슷한 사용자가 좋아한 항목 추천
MATCH (me:User {id: $userId})-[:LIKES]->(item:Item)
      <-[:LIKES]-(other:User)-[:LIKES]->(recommendation:Item)
WHERE NOT (me)-[:LIKES]->(recommendation)
RETURN recommendation.name, COUNT(*) as score
ORDER BY score DESC
LIMIT 10

성능 최적화 팁

Graph Database를 실무에서 사용할 때 주의할 점들입니다.

인덱싱

// 자주 조회하는 속성에 인덱스 생성
CREATE INDEX concept_name FOR (c:Concept) ON (c.name)
CREATE INDEX user_id FOR (u:User) ON (u.id)

쿼리 최적화

  • LIMIT 활용: 불필요하게 많은 결과를 가져오지 마세요
  • PROFILE 사용: 쿼리 실행 계획을 확인하세요
  • 관계 방향 지정: 양방향 검색보다 단방향이 빠릅니다

실전 프로젝트: AI 문서 어시스턴트

회사 문서를 학습하고, 직원의 질문에 답하는 AI 시스템을 만들어봅시다.

데이터 모델

// 문서와 개념을 연결
CREATE (d:Document {title: '신입사원 가이드', path: '/docs/onboarding.pdf'})
CREATE (c1:Concept {name: '휴가 신청'})
CREATE (c2:Concept {name: 'JIRA'})
CREATE (d)-[:MENTIONS]->(c1)
CREATE (d)-[:MENTIONS]->(c2)
CREATE (c1)-[:REQUIRES]->(c2)

질문 처리 흐름

def answer_question(question):
    # 1. LLM으로 질문에서 개념 추출
    concepts = extract_concepts(question)
    
    # 2. 그래프에서 관련 문서 찾기
    query = """
    MATCH (c:Concept)<-[:MENTIONS]-(d:Document)
    WHERE c.name IN $concepts
    RETURN d.title, d.path, COUNT(c) as relevance
    ORDER BY relevance DESC
    LIMIT 5
    """
    docs = neo4j_session.run(query, concepts=concepts)
    
    # 3. 문서 내용 읽고 LLM으로 답변 생성
    content = load_documents(docs)
    return llm.generate(question, content)

Graph Database vs Vector Database

많은 분들이 궁금해하는 질문입니다. 둘 중 무엇을 선택해야 할까요?

특성 Graph Database Vector Database
강점 관계 탐색, 추론 유사도 검색
약점 텍스트 유사도 복잡한 관계
최적 용도 지식 그래프, 추천 RAG, 시맨틱 검색

정답은 둘 다 사용하는 것입니다. 벡터 데이터베이스로 초기 검색을 하고, 그래프 데이터베이스로 연관 개념을 확장하는 하이브리드 접근이 가장 효과적입니다.

2026년 트렌드: GraphRAG

Microsoft가 제안한 GraphRAG 아키텍처가 주목받고 있습니다. 문서를 단순히 청크로 나누는 것이 아니라, 개념과 관계를 추출해서 그래프로 구조화합니다.

document → [extract entities and relations] → knowledge graph → [query] → context → LLM

결론

Graph Database는 AI 프로젝트의 필수 도구로 자리잡고 있습니다. 단순히 데이터를 저장하는 것이 아니라, 지식의 구조를 표현하고 추론할 수 있게 해줍니다.

Neo4j로 시작해서 작은 프로젝트부터 적용해보세요. 복잡한 관계를 다루는 AI를 만들 때 그래프 데이터베이스의 위력을 직접 체감할 수 있을 것입니다.

반응형