그래프 데이터베이스(Graph Database)는 데이터를 노드(Node), 엣지(Edge), 속성(Property)으로 표현하여 복잡한 관계를 효율적으로 처리하는 데이터베이스다. SNS 소셜 그래프, 추천 엔진, 지식 그래프, 사기 탐지에 적합하다.
관계형 DB vs 그래프 DB
소셜 네트워크 "친구의 친구" 쿼리:
관계형 DB (JOIN 폭발):
SELECT DISTINCT p3.name
FROM users p1
JOIN friends f1 ON p1.id = f1.user_id
JOIN users p2 ON f1.friend_id = p2.id
JOIN friends f2 ON p2.id = f2.user_id
JOIN users p3 ON f2.friend_id = p3.id
WHERE p1.name = 'Alice';
-- 깊이가 깊어질수록 JOIN이 기하급수적으로 증가
그래프 DB (Cypher):
MATCH (alice:Person {name: 'Alice'})-[:FRIEND*2]->(fof:Person)
RETURN DISTINCT fof.name;
-- 깊이가 깊어져도 쿼리 구조는 동일
cypher
-- 노드 생성
CREATE (alice:Person {name: 'Alice', age: 30})
CREATE (bob:Person {name: 'Bob', age: 25})
CREATE (product:Product {name: 'Laptop', price: 1500})
-- 관계 생성
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:FRIEND {since: 2023}]->(b)
MATCH (a:Person {name: 'Alice'}), (p:Product {name: 'Laptop'})
CREATE (a)-[:PURCHASED {date: '2024-01-15'}]->(p)
-- 추천: Alice의 친구들이 구매한 상품
MATCH (alice:Person {name: 'Alice'})-[:FRIEND]->(friend)
-[:PURCHASED]->(product)
WHERE NOT (alice)-[:PURCHASED]->(product)
RETURN product.name, COUNT(friend) AS friends_purchased
ORDER BY friends_purchased DESC
LIMIT 5;
-- 최단 경로
MATCH path = shortestPath(
(alice:Person {name: 'Alice'})-[*]-(bob:Person {name: 'Bob'})
)
RETURN path;
주요 그래프 DB 비교
| DB | 쿼리 언어 | 특징 |
|---|
| Neo4j | Cypher | 가장 인기, 풍부한 생태계 |
| Amazon Neptune | Gremlin, SPARQL | 완전관리형, RDF 지원 |
| TigerGraph | GSQL | 분산 처리, 실시간 분석 |
| ArangoDB | AQL | 멀티 모델 (그래프+문서+KV) |
적합한 사용 사례
| 사용 사례 | 설명 |
|---|
| SNS 소셜 그래프 | 친구 추천, 영향력 분석 |
| 사기 탐지 | 이상 거래 패턴, 링 구조 |
| 지식 그래프 | Google 지식 패널, 시맨틱 검색 |
| 추천 엔진 | 협업 필터링 |
| 네트워크 분석 | IT 인프라 의존성 |
관련 개념