468. 그래프 DB - Node, Edge, Property (Neo4j)

⚠️ 이 문서는 데이터를 표(Table)에 가둬두지 않고, **점(Node)과 선(Edge)이라는 수학적인 그래프 구조로 표현하여 데이터 간의 '관계(Relationship)'를 빛의 속도로 탐색해 내는 NoSQL인 '그래프 데이터베이스'**를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 데이터 간의 연결(조인)을 계산할 때마다 뼈를 깎는 비용이 드는 RDBMS의 한계를 벗어나, 아예 데이터가 저장될 때부터 '누구랑 연결되어 있는지'를 선(Edge)으로 묶어서 저장하는 DB다.
  2. 구성 요소: 데이터를 나타내는 점인 노드(Node), 관계를 나타내는 선인 엣지(Edge), 그리고 점과 선에 부가 설명을 적어두는 **프로퍼티(Property)**로 구성된 Labeled Property Graph(LPG) 모델을 쓴다.
  3. 기술 체계: 세계 1위 그래프 DB인 Neo4j가 사실상 표준이며, BFS, DFS, PageRank 같은 그래프 알고리즘(383번 문서)을 돌려 인사이트를 뽑아내는 데 최적화되어 있다.

Ⅰ. 개요: 6단계 분리 법칙 (Context & Necessity)

"케빈 베이컨의 6단계 법칙"을 아는가? 지구상의 누구든 6명만 건너면 다 아는 사람이라는 뜻이다. 페이스북에서 "나의 친구의 친구의 친구의 친구가 좋아하는 영화 목록을 뽑아줘"라고 RDBMS(MySQL)에 쿼리를 날린다고 치자.

SELECT ... FROM User u1 
JOIN Friend f1 ON ... JOIN Friend f2 ON ... JOIN Friend f3 ON ... 

이 쿼리를 돌리면 JOIN이 5번 발생하며 서버가 뻗어버린다.

그래프 DB는 조인(JOIN)을 하지 않는다. 나를 나타내는 동그라미(노드)에서 시작해서, "친구"라고 적힌 화살표(엣지)를 따라 5번만 점프하면 0.01초 만에 결과를 찾는다. 이것을 **Index-Free Adjacency(인덱스 없는 인접성)**라고 부르며, 그래프 DB가 RDBMS보다 수백 배 빠른 이유다.

📢 섹션 요약 비유: RDBMS의 JOIN이 **'졸업앨범 10권을 펴놓고 이름과 얼굴을 일일이 대조해가며 친구를 찾는 것'**이라면, 그래프 DB는 **'경찰서 벽에 압정(노드)을 박고 붉은 실(엣지)로 범인들을 묶어둔 칠판'**과 같습니다. 실만 따라가면 누가 누구와 공범인지 1초 만에 알 수 있죠.


Ⅱ. Labeled Property Graph (LPG) 모델 ★

Neo4j 등 현대 그래프 DB가 사용하는 가장 직관적인 데이터 저장 구조다.

1. 노드 (Node) = 점

  • 전통적인 DB의 '행(Row)'과 같다.
  • 어떤 실체(Entity)를 나타낸다. (예: Lepisode, Database_Book)
  • **라벨(Label)**을 붙여서 종류를 구분한다. (예: User, Book)

2. 엣지 (Edge / Relationship) = 선

  • 노드와 노드를 연결하는 선이다. 반드시 **방향성(Direction)**과 **이름(Type)**을 가져야 한다.
  • 예: [Lepisode] --(LIKES)--> [Database_Book]

3. 프로퍼티 (Property) = 속성

  • 노드나 엣지 안에 저장하는 'Key-Value' 형태의 세부 정보다.
  • 노드의 프로퍼티: Lepisode 노드 안에 {age: 30, city: Seoul}
  • 엣지의 프로퍼티: LIKES 엣지 안에 {since: 2026, rating: 5} (언제부터 좋아했는지 선에다가도 적을 수 있다!)

Ⅲ. 실무 쿼리: Cypher 언어 (Neo4j)

그래프 DB는 SQL 대신, 그림을 그리는 것처럼 직관적인 특수 쿼리 언어(Cypher 등)를 쓴다.

목표: 철수가 좋아하는 영화의 감독을 찾아라!

MATCH (u:User {name: "철수"})-[:LIKES]->(m:Movie)<-[:DIRECTED]-(d:Director)
RETURN d.name
  • () : 동그라미(노드)
  • -> : 화살표(엣지)
  • 코드를 보면 마치 칠판에 화살표를 그리는 것처럼 시각적으로 쿼리를 짤 수 있다.
┌──────────────────────────────────────────────────────────────┐
│           그래프 DB (Property Graph) 모델 구조 시각화                │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│        (Node 1)                            (Node 2)          │
│   ┌────────────────┐                  ┌────────────────┐     │
│   │ Label: Person  │                  │ Label: Movie   │     │
│   │ name: "철수"    │ ──────┐          │ title: "아바타" │     │
│   │ age: 25        │       │          │ year: 2009     │     │
│   └────────────────┘       │          └────────────────┘     │
│                            │                                 │
│                   [ Edge: LIKES ]                            │
│                 (rating: 5, date: "어제")                       │
│                            │                                 │
│                            ▼                                 │
│                   (Node 2를 향해 화살표가 꽂힘)                    │
│                                                              │
│ ★ 특징: 엣지(선) 위에도 "얼마나 좋아하는지(rating)" 같은 속성을 달 수 있다! │
└──────────────────────────────────────────────────────────────┘

Ⅳ. 결론

"데이터의 가치는 고립된 값이 아니라 연결된 관계에서 나온다." 그래프 DB는 모든 서비스에 다 어울리는 만능 치트키가 아니다. 단순한 영수증 내역이나 블로그 글을 저장하는 데 쓰면 RDBMS보다 훨씬 무겁고 비효율적이다. 하지만 추천 시스템(Recommendation), 사기 탐지(Fraud Detection), 소셜 네트워크(SNS)처럼 "데이터 간의 연결 고리" 자체가 가장 중요한 비즈니스 핵심 자산인 도메인에서 그래프 DB는 그 어떤 NoSQL도 흉내 낼 수 없는 궁극의 탐색 속도와 논리적 아름다움을 제공한다.


📌 관련 개념 맵

  • 관련 데이터베이스: Neo4j (독보적 1위), Amazon Neptune, ArangoDB (Multi-model)
  • 그래프 알고리즘: PageRank, BFS, DFS (383번 문서 참조)
  • 쿼리 언어: Cypher (Neo4j), Gremlin, SPARQL
  • 비교 아키텍처: Relational DB (RDBMS), Document DB (MongoDB)

👶 어린이를 위한 3줄 비유 설명

  1. RDBMS는 학생 30명의 '이름과 키'를 엑셀 표에 반듯하게 적어두는 거예요.
  2. 그래프 DB는 칠판에 30명의 얼굴 사진(Node)을 붙이고, 친한 친구끼리 빨간 털실(Edge)로 묶어두는 거예요.
  3. 털실 위에는 포스트잇(Property)으로 "단짝 친구", "그냥 친구"라고 적어두면, 칠판만 봐도 우리 반의 교우 관계가 1초 만에 파악된답니다!