35

Property Graph 모델 이해

그래프 데이터 모델 기초

그래프 = 노드 + 관계 + 속성

왜 중요한가?

Property Graph는 그래프 데이터베이스의 표준 모델입니다. Neo4j, Amazon Neptune, Memgraph 모두 이 모델을 사용합니다.

이해하면:

  • Neo4j의 모든 개념이 자연스럽게 이해됨
  • 데이터 모델링 설계가 쉬워짐
  • Cypher 쿼리 작성이 직관적으로 됨

핵심 개념

Property Graph의 4가지 구성 요소

에디터 로딩 중...

1. 노드 (Node) - 엔티티

역할: 사람, 장소, 사물, 개념 등 실체를 표현

에디터 로딩 중...

비유: 명사 - "사람", "회사", "도시"

에디터 로딩 중...

2. 관계 (Relationship) - 연결

역할: 두 노드를 방향성 있게 연결

에디터 로딩 중...

특징:

  • 반드시 시작 노드끝 노드 필요 (허공에 존재 불가)
  • 반드시 타입 필요 (KNOWS, WORKS_AT 등)
  • 같은 두 노드 사이에 여러 관계 가능
  • Self-loop 가능 (노드가 자기 자신을 가리킴)

비유: 동사 - "알다", "근무하다", "구매하다"

에디터 로딩 중...
에디터 로딩 중...

3. 속성 (Property) - 상세 정보

역할: 노드나 관계에 붙는 키-값 쌍

에디터 로딩 중...

지원 타입 정리표:

타입예시참고
String"Alice"UTF-8
Integer3064-bit
Float3.1464-bit
Booleantrue, false
Datedate('2024-01-15')ISO 8601
DateTimedatetime('2024-01-15T10:30:00')
Durationduration('P30D')ISO 8601
Pointpoint({latitude: 37.5, longitude: 127.0})공간 데이터
List["a", "b", "c"]동일 타입 원소

저장 불가:

  • 중첩 객체 (Map/Dict) -> 별도 노드로 분리
  • 혼합 타입 List -> 동일 타입으로 통일

4. 레이블 (Label) - 분류

역할: 노드를 카테고리로 분류

에디터 로딩 중...

용도:

  • 노드 그룹핑 및 빠른 필터링
  • 인덱스 생성 (검색 최적화의 핵심)
  • 스키마 정의 (제약 조건)
  • 권한 관리 (Enterprise)
에디터 로딩 중...

Property Graph를 RDBMS 관점에서 이해하기

에디터 로딩 중...

자주 하는 실수

자주 하는 실수

실수문제올바른 방법
관계에 타입 없이 생성에러 발생-[:KNOWS]-> 타입 필수
관계 방향 무시예상과 다른 결과방향 고려해서 설계
속성에 객체 저장지원 안 됨별도 노드로 분리
레이블 없이 노드 생성검색 성능 저하레이블 반드시 부여
레이블을 소문자로컨벤션 위반PascalCase 사용
관계 타입을 camelCase로컨벤션 위반UPPER_SNAKE_CASE 사용
모든 것을 속성으로모델 비효율의미있는 엔티티는 별도 노드

Property Graph vs 다른 그래프 모델

모델특징대표 DB표준
Property Graph노드/관계에 속성 저장Neo4j, MemgraphGQL (ISO 표준화 진행)
RDF (Triple Store)Subject-Predicate-ObjectStardog, VirtuosoW3C 표준 (SPARQL)
Hypergraph관계가 2개 이상 노드 연결 가능HyperGraphDB없음

Property Graph 선택 이유:

  • 직관적 (현실 세계와 매핑 쉬움)
  • 풍부한 속성 (노드/관계 모두)
  • 성숙한 생태계 (Neo4j 15년+)
  • GQL 국제 표준화 진행중 (ISO/IEC 39075)

Property Graph와 RDF 비교 예시

에디터 로딩 중...

결론: 관계에 속성을 자연스럽게 붙일 수 있는 Property Graph가 실무에서 더 직관적

핵심 포인트
  • 노드(Node): 엔티티를 표현하는 점 - 괄호 () 사용
  • 관계(Relationship): 방향성 있는 연결선, 타입 필수 - 대괄호 [] + 화살표 ->
  • 속성(Property): 노드/관계에 붙는 키-값 데이터 - 중괄호 {}
  • 레이블(Label): 노드를 분류하는 태그 - 콜론 : 사용
  • RDBMS의 FK/JOIN = 그래프의 직접 관계 연결