본문 바로가기

JanusGraph/JanusGraph 이론

JanusGraph 기초 개념 ② / 다양한 라벨과 정점/간선 모델링 방법

다양한 라벨과 정점/간선 모델링 방법

이전 편에서는 그래프 데이터베이스의 가장 기초가 되는 정점(Vertex), 간선(Edge), 속성(Property), **라벨(Label)**에 대해 알아보았습니다. 이번에는 한 단계 더 나아가서, 여러 개의 정점 유형과 그 사이의 관계를 어떻게 표현하는지를 설명드립니다.


✅ 1. 여러 유형의 정점을 하나의 그래프에 담을 수 있다

관계형 DB에서는 여러 테이블을 만들어야 할 정보를, 그래프 DB에서는 한 그래프 안에서 라벨로 구분할 수 있습니다.

📊 예시: 직원과 부서 테이블

관계형 DB 구조는 다음과 같습니다:

Employee Table
emp_id name dept_id
1 Marko 101 
Department Table
dept_id name
101 HR
 
🔁 이를 그래프 DB로 바꾸면:
  • 직원과 부서 모두 정점(Vertex)으로 표현
  • 정점 라벨(Vertex Label)로 employee, department을 구분
  • 간선(Edge)로 두 정점을 연결 (belongs_to)
[Marko] --belongs_to--> [HR]

정점1: Marko (label: employee, name: Marko)
정점2: HR (label: department, name: HR)
간선: belongs_to

✅ 2. 정점 라벨(Vertex Label)은 정점의 역할을 명확히 한다

JanusGraph에서는 여러 정점 유형이 혼재할 수 있습니다. 이럴 때 라벨을 통해 정점의 성격을 분명히 구분할 수 있습니다.

  • employee 라벨 → 사람 정보
  • department 라벨 → 조직 정보
  • project 라벨 → 업무 단위

각 정점은 이름, 코드 등 속성을 가질 수 있고, 이 속성은 라벨과 관계없이 정의됩니다.


✅ 3. 간선 라벨(Edge Label)로 관계를 명확히 구분

정점이 많아질수록 간선의 의미를 정확히 파악하는 것이 중요해집니다. 예를 들어:

  • works_on → 직원이 프로젝트에 참여
  • belongs_to → 직원이 부서에 소속
  • reports_to → 직원이 상사에게 보고
[Marko] --works_on--> [AI 프로젝트]
[Marko] --belongs_to--> [HR 부서]
[Marko] --reports_to--> [팀장]

→ 간선마다 의미가 다르기 때문에, 라벨을 통해 구체화

✅ 4. 그래프 모델링은 자유롭고 유연하다

JanusGraph는 다음과 같은 구조도 가능합니다:

  • 하나의 정점에 여러 개의 속성
  • 하나의 정점에서 다양한 관계로 연결되는 다수의 간선
  • 간선 자체에 속성 부여 (예: joined_date, level, comment 등)

예시:

[Marko] --belongs_to (since: 2022)--> [HR]
[Marko] --works_on (role: Developer)--> [AI 프로젝트]

🧩 요약

요소 설명 예시
정점 라벨(Vertex Label) 정점의 종류 employee, department
간선 라벨(Edge Label) 관계의 종류 belongs_to, works_on
정점-정점 관계 간선으로 연결 직원 → 부서
간선 속성 관계에 부가 정보 추가 joined_date: 2022

✅ 왜 이게 중요한가?

  • 관계형 DB보다 현실 세계의 관계를 더 직관적으로 표현
  • 정점/간선 라벨로 다형성 구조 쉽게 구현 가능
  • 시스템 구조가 복잡해져도 한 눈에 이해 가능한 구조