LPG (Labeled Property Graph)

정의: 노드(Nodes)와 관계(Relationships)로 구성되며, 각 요소가 **라벨(Label)**과 **속성(Properties)**을 가지는 그래프 모델. Neo4j의 기본 데이터 구조.

핵심 구조

4가지 요소

  1. 노드 (Node)

    [Person: Alice { age: 30, email: "alice@example.com" }]
    
    • 라벨: Person (엔티티 타입)
    • 속성: {age, email}
  2. 관계 (Relationship)

    -[WORKS_AT { since: 2020 }]->
    
    • 관계 타입: WORKS_AT
    • 속성: {since}
  3. 라벨 (Label)

    • 노드의 타입/분류
    • 예: Person, Company, Product
  4. 속성 (Properties)

    • 노드와 관계 양쪽이 가질 수 있는 키-값 데이터
    • 예: {name: "Alice", age: 30}

시각적 표현

[Person: Alice {age: 30}] 
  -[WORKS_AT {since: 2020}]-> 
[Company: Google {industry: "Tech"}]

[Person: Bob {age: 28}]
  -[REPORTS_TO]->
[Person: Alice {age: 30}]

Cypher 쿼리 언어

// 노드 생성
CREATE (alice:Person {name: "Alice", age: 30})
CREATE (google:Company {name: "Google"})
 
// 관계 생성
CREATE (alice)-[:WORKS_AT {since: 2020}]->(google)
 
// 검색
MATCH (p:Person)-[:WORKS_AT]->(c:Company)
WHERE p.age > 25
RETURN p.name, c.name
 
// 결과: Alice | Google

LPG의 특징

설계 철학: 실용성 중심

직관적 — 노드-관계-속성이 명확히 구분 ✅ 유연함 — 동적 속성 추가 가능 ✅ 성능 — 관계 순회가 빠름 (인덱싱 최적화) ✅ 단순 학습 — SQL 경험자도 쉽게 접근 가능

속성 표현의 우월성

RDF의 제약:

ex:alice ex:knows ex:bob .
ex:alice_knows_bob_since 2020 .  # 번거로움

LPG의 장점:

(alice)-[:KNOWS {since: 2020}]->(bob)  # 직관적

LPG의 장점

빠른 개발 — 프로토타입 신속 구축 ✅ 복잡한 속성 — 관계와 노드 모두에 풍부한 속성 ✅ 성능 — 깊은 쿼리도 빠름 ✅ 실무 도메인 — 추천, 사기 탐지, 네트워크 분석 ✅ 도구 생태계 — Neo4j 주변 풍부한 도구

LPG의 한계

표준화 부족 — 업계 표준이나 공식 스펙 없음 ❌ 호환성 — Neo4j ↔ ArangoDB ↔ JanusGraph 간 호환성 낮음 ❌ 의미 명시성 — RDF에 비해 의미 표현이 약함

사용 사례

추천 시스템 — User-Item-Category 관계 모델링 ✅ 사기 탐지 — 거래-계정-IP 네트워크 분석 ✅ 소셜 네트워크 — 사용자 관계와 콘텐츠 연결 ✅ 고객 분석 — 구매 이력, 선호도, 유사 고객 발굴 ✅ Graph RAG — LLM 기반 의미 검색

RDF와의 비교

항목RDFLPG
기본 단위트리플 (S-P-O)노드 + 관계
노드 표현URI라벨 + 속성
관계 표현Predicate (트리플의 일부)명시적 엣지
속성제한적풍부함
쿼리 언어SPARQLCypher
표준화W3C 표준업계 표준
성능복잡한 쿼리 느림빠름
학습곡선가파름완만함
실무 채용낮음높음

온톨로지 설계 예시

# 클래스 (노드 라벨)
Labels:
  - Person
  - Company
  - Product
 
# 관계 타입
RelationshipTypes:
  - WORKS_AT: Person → Company
  - MANAGES: Person → Person
  - PURCHASED: Person → Product
  - MANUFACTURES: Company → Product
 
# 속성
Properties:
  Person: [name, age, email, hire_date]
  Company: [name, industry, founded_year]
  Product: [name, price, category]
  WORKS_AT: [since, position]
  MANAGES: [start_date, end_date]

언제 LPG를 선택할까?

상황권장
빠른 프로토타입 필요✅ LPG
복잡한 속성 표현✅ LPG
팀이 SQL 경험 많음✅ LPG
실무 비즈니스 도메인✅ LPG
표준화 필수✅ RDF
학술·의료 도메인✅ RDF
이미 온톨로지 정의됨✅ RDF

관련 개념


출처: rdf-lpg — RDF vs LPG 상세 비교