G·Graph Daily Lab 전체 140회
추가 17 / 40 · 보충 · 약 12분

다중 레이블과 레이블 남용

노드 하나에 레이블을 여러 개 붙일 수 있습니다. 어디까지가 유용한 분류이고 어디부터가 남용인지 기준을 세웁니다.

그래프 모델링 패턴

배운 뒤 돌아올 회차

DAY 41에서 값의 자리를 고르는 법을 배운 뒤, 레이블이라는 또 하나의 선택지를 언제 쓰는지 보충하러 옵니다.

시작하면 직접 풀기와 퀴즈 기록이 저장됩니다. 본과정 100회 진도와는 별도입니다.

이번에 더 배울 것

Neo4j에서는 (:Person:Professor {name:'지아'})처럼 노드에 레이블을 여러 개 붙일 수 있습니다. 그러면 MATCH (p:Person)과 MATCH (p:Professor) 모두 지아를 찾습니다. 레이블은 SET p:Alumni, REMOVE p:Student로 붙이고 뗄 수 있고, MATCH (n:Person&Professor)처럼 레이블 식으로 조합해 찾을 수도 있습니다.

레이블이 잘 맞는 것은 오래 유지되는 종류나 역할이면서 값 종류가 적고, 질의의 출발 범위를 좁히는 데 자주 쓰이는 분류입니다. 교수·학생 같은 역할이 예입니다. 반대로 :Year2021, :Daejeon, :Score95처럼 값이 많거나 자주 바뀌는 것을 레이블로 만들면 레이블 수가 끝없이 늘고, 범위 비교를 할 수 없으며, 새 값이 생길 때마다 질의를 고쳐야 합니다. 이런 값은 속성이나 노드로 둡니다.

레이블 사이에는 상속이 없습니다. 지아에게 :Professor만 붙이고 :Person을 빼면 MATCH (p:Person)에서 지아가 사라집니다. 제약도 레이블 단위라서 :Person에 건 email 유일성 제약은 :Professor만 가진 노드에는 적용되지 않습니다. 그래서 하위 역할 레이블을 붙일 때는 상위 레이블도 함께 붙인다는 규칙을 팀에서 정해 둡니다.

작은 예제로 따라가기

1

(:Person:Professor {name:'지아'})는 MATCH (p:Person)과 MATCH (p:Professor) 모두에서 나옵니다.

2

지아에게서 :Person을 빼면 :Person에 건 email 유일성 제약도 지아에게는 적용되지 않습니다.

3

합류 연도를 :Joined2021 레이블 대신 joinedYear: 2021 속성으로 두면 WHERE p.joinedYear >= 2020 한 줄로 범위를 찾습니다.

COMPARE & EXPLAIN

레이블로 할까, 속성으로 할까

‘2020년 이후 합류한 교수’를 찾는 질의가 각 설계에서 얼마나 길어지고, 내년에 고칠 곳이 생기는지 먼저 예상하세요.

MATCH (p:Professor&(Joined2020|Joined2021|Joined2022|Joined2023|Joined2024|Joined2025))

연도마다 레이블을 나열해야 하고, 새해가 되면 질의를 고쳐야 합니다.

레이블은 값이 적고 오래가는 종류·역할에만 쓰고, 많거나 자주 바뀌는 값은 속성이나 노드로 둡니다.

학습을 시작하면 새 문제를 직접 풀고 확인 퀴즈를 마친 뒤 선택한 본과정 회차로 돌아갑니다.