✅ 그래프의 기본 구성 요소
📍 정점(Vertex) = 노드(Node)
- 그래프에서 데이터의 주체(엔터티)를 의미합니다.
- 예: 사람(Person), 회사(Company), 제품(Product) 등
- 예시에서 "Marko", "Josh"와 같은 개인은 정점입니다.
📍 간선(Edge) = 관계(Relation)
- 정점 간의 관계를 나타냅니다.
- 방향성이 있을 수도 있고 없을 수도 있습니다.
- 예: “Marko → Josh” 관계는 “Knows”라는 간선을 통해 표현됩니다.
📍 속성(Property)
- 정점이나 간선에 부여되는 부가 정보
- 예: 이름(name), 나이(age), 입사일(joined_date) 등이 속성으로 들어갈 수 있습니다.
✅ 속성과 관계형 데이터베이스의 비교
관계형 데이터베이스(RDB)의 테이블과 비교해보면 이해가 쉬워요.
RDB | 테이블그래프 |
행(Row) | 정점(Vertex) |
열(Column) | 속성(Property) |
외래키(FK) | 간선(Edge) |
예를 들어, Employees 테이블에 직원 이름(name), ID, 부서(dept) 컬럼이 있을 경우, 이를 그래프에서는 다음과 같이 표현할 수 있습니다:
- 각 직원은 하나의 정점
- 각 속성은 정점에 부여된 정보
- 다른 테이블(부서 등)과의 연결은 간선으로 표현
✅ 라벨(Label)의 개념
📍 정점 라벨(Vertex Label)
- 정점의 유형을 식별합니다.
- 예: 정점 "Marko"와 "Josh"에 person이라는 라벨이 붙어 있다면, 이들은 모두 ‘사람’이라는 동일한 유형을 공유합니다.
📍 간선 라벨(Edge Label)
- 간선의 관계를 설명하는 명칭입니다.
- 예: Marko → Josh 간선에 knows라는 라벨이 있다면 “Marko는 Josh를 안다”는 의미
✅ 시각 예시
아래와 같은 구조를 상상해볼 수 있습니다.
[Marko] -- knows --> [Josh]
| |
name: Marko name: Josh
label: person label: person
- knows는 간선 라벨
- name은 속성
- person은 정점 라벨
🧩 요약
개념 | 설명 | 예시 |
Vertex | 데이터 주체 | 사람, 회사 등 |
Edge | 관계 | knows, works_at |
Property | 속성 정보 | name: "Marko" |
Vertex Label | 정점 유형 | person |
Edge Label | 관계 유형 | knows |
아래 쿼리를 가지고 어떻게 진행되는지 한번 자세하게 알아보겠습니다.
g.V().has('person','name', within('marko','josh')).outE().groupCount().by(label()).next()
g.V() | 그래프 전체 정점에서 시작 |
has('person', 'name', within(...)) | name 속성이 'marko' 또는 'josh'인 person 정점 선택 |
outE() | 해당 정점에서 나가는 간선을 모두 탐색 |
groupCount().by(label()) | 간선의 label 기준으로 그룹핑 + 개수 세기 |
.next() | 결과 반환 (Map 형태) → 예: {knows=2, created=3} |
각 Step (이미지)와 쿼리의 작동 과정을 연결해서 설명드릴게요.
🔍 STEP 1 :
- g.V()로 그래프의 모든 정점들을 순회하는 중
- 그 중에서 has('person', 'name', within('marko', 'josh')) 조건을 만족하는 정점만 통과
- 즉, 정점 1 (marko), 정점 4 (josh)만 필터링됨
- 그려진 초록색 작은 생물들이 Gremlin 트래버설 엔진을 상징
🔍 STEP 2 :
- outE()로 marko와 josh로부터 나가는 간선을 탐색
- marko → knows(vadas), knows(josh), created(lop)
- josh → created(ripple), created(lop)
- 총 간선 수: 5
🔍 STEP 3 :
- 그 중에서 groupCount().by(label())으로
- label이 knows인 간선: 2개
- label이 created인 간선: 3개
- 결과: {knows=2, created=3}
🔍 의미:
- 실제로 Gremlin 쿼리가 실행된 그래프 구조를 보여줌
- marko (정점 1), josh (정점 4)의 연결 관계와 label, 속성(name, age), 간선 weight 확인 가능
- 시각적으로 qurey가 어디를 탐색했는지 경로를 추적 가능
'JanusGraph > JanusGraph 이론' 카테고리의 다른 글
JanusGraph 기초 개념 ④ / Hadoop과 Spark (0) | 2025.04.15 |
---|---|
JanusGraph 기초 개념 ③ / Gremlin 쿼리 언어로 그래프 탐색(+Cyper와 비교) (0) | 2025.04.15 |
JanusGraph 기초 개념 ② / 다양한 라벨과 정점/간선 모델링 방법 (0) | 2025.04.15 |
JanusGraph의 핵심 이점 ③ / 실무 적용 중심으로 (0) | 2025.04.15 |
JanusGraph의 핵심 이점 ① / 트랜잭션 처리 중심으로 (0) | 2025.04.15 |