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

이름만 봐도 역할이 보이게

레이블, 관계 타입, 속성 이름을 일관된 규칙으로 지으면 질의가 짧아지고 실수가 줄어듭니다. Neo4j 문서의 권장 규칙과 흔한 실수를 봅니다.

속성 그래프 모델

배운 뒤 돌아올 회차

DAY 26·27에서 레이블·관계·속성을 배운 뒤, 이름을 잘못 지어 질의가 조용히 틀리는 경우를 미리 막기 위해 옵니다.

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

이번에 더 배울 것

Neo4j 문서가 권장하는 규칙은 세 가지입니다. 레이블은 단어 첫 글자를 대문자로 붙여 쓰는 PascalCase(Person, ResearchLab), 관계 타입은 대문자와 밑줄을 쓰는 SCREAMING_SNAKE_CASE(WORKS_AT, AUTHORED), 속성은 첫 단어만 소문자로 시작하는 camelCase(name, firstName)입니다. 모양만 봐도 무엇이 레이블이고 관계이며 속성인지 구분됩니다.

이름은 대소문자를 구분합니다. :Person, :PERSON, :person은 서로 다른 레이블이라, 한 노드만 :person으로 저장돼도 MATCH (p:Person)은 오류 없이 그 노드를 빠뜨립니다. 레이블은 단수 명사(Papers가 아니라 Paper), 관계 타입은 왼쪽에서 오른쪽으로 읽히는 동사구로 지으면 (:Person)-[:AUTHORED]->(:Paper)가 ‘사람이 논문을 썼다’로 자연스럽게 읽힙니다.

가장 흔한 실수는 값을 이름에 넣는 것입니다. WORKS_AT_2021 같은 관계 타입이나 :Daejeon 같은 레이블은 연도·도시가 바뀔 때마다 새 이름을 만들고 범위 비교도 막습니다. 값은 {since:2021}처럼 속성에 둡니다. 숫자로 시작하거나 공백·기호가 든 이름은 백틱으로 감싸야 하며, 사용자 입력을 그대로 백틱 이름에 넣으면 주입 공격에 취약해진다는 경고도 문서에 있습니다.

작은 예제로 따라가기

1

한 노드만 :person으로 저장했다면 MATCH (p:Person)의 결과에서 그 노드가 조용히 빠집니다.

2

[:WORKS_AT_2021]을 [:WORKS_AT {since:2021}]로 바꿔야 WHERE r.since >= 2020 같은 범위 조건을 쓸 수 있습니다.

3

속성 First_Name은 규칙에 맞게 firstName으로, 레이블 :Papers는 :Paper로 고칩니다.

COMPARE & EXPLAIN

같은 데이터, 다른 이름 규칙

WORKS_AT 관계가 6개인 연구소 그래프에서 MATCH (p:Person)-[:WORKS_AT]->(l:Lab) RETURN count(*)의 값이 각 조건에서 얼마일지 먼저 예상하세요.

count(*) = 6

모든 노드가 :Person·:Lab, 모든 관계가 WORKS_AT으로 저장되어 패턴과 정확히 일치합니다.

이름에는 종류·동작·속성 이름만 담고 값은 속성에 두며, 대소문자 규칙을 하나로 통일합니다.

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