LPG (Labeled Property Graph)
정의: 노드(Nodes)와 관계(Relationships)로 구성되며, 각 요소가 **라벨(Label)**과 **속성(Properties)**을 가지는 그래프 모델. Neo4j의 기본 데이터 구조.
핵심 구조
4가지 요소
-
노드 (Node)
[Person: Alice { age: 30, email: "alice@example.com" }]- 라벨:
Person(엔티티 타입) - 속성:
{age, email}
- 라벨:
-
관계 (Relationship)
-[WORKS_AT { since: 2020 }]->- 관계 타입:
WORKS_AT - 속성:
{since}
- 관계 타입:
-
라벨 (Label)
- 노드의 타입/분류
- 예:
Person,Company,Product
-
속성 (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 | GoogleLPG의 특징
설계 철학: 실용성 중심
✅ 직관적 — 노드-관계-속성이 명확히 구분 ✅ 유연함 — 동적 속성 추가 가능 ✅ 성능 — 관계 순회가 빠름 (인덱싱 최적화) ✅ 단순 학습 — 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와의 비교
| 항목 | RDF | LPG |
|---|---|---|
| 기본 단위 | 트리플 (S-P-O) | 노드 + 관계 |
| 노드 표현 | URI | 라벨 + 속성 |
| 관계 표현 | Predicate (트리플의 일부) | 명시적 엣지 |
| 속성 | 제한적 | 풍부함 |
| 쿼리 언어 | SPARQL | Cypher |
| 표준화 | 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 |
관련 개념
- Neo4j — LPG 플랫폼
- Cypher Query Language — LPG 쿼리 언어
- RDF — 대안적 표현 방식
- Knowledge Graph — LPG 응용
- GraphRAG — LPG 기반 RAG
출처: rdf-lpg — RDF vs LPG 상세 비교