이번에 더 배울 것
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}처럼 속성에 둡니다. 숫자로 시작하거나 공백·기호가 든 이름은 백틱으로 감싸야 하며, 사용자 입력을 그대로 백틱 이름에 넣으면 주입 공격에 취약해진다는 경고도 문서에 있습니다.
작은 예제로 따라가기
한 노드만 :person으로 저장했다면 MATCH (p:Person)의 결과에서 그 노드가 조용히 빠집니다.
[:WORKS_AT_2021]을 [:WORKS_AT {since:2021}]로 바꿔야 WHERE r.since >= 2020 같은 범위 조건을 쓸 수 있습니다.
속성 First_Name은 규칙에 맞게 firstName으로, 레이블 :Papers는 :Paper로 고칩니다.
같은 데이터, 다른 이름 규칙
WORKS_AT 관계가 6개인 연구소 그래프에서 MATCH (p:Person)-[:WORKS_AT]->(l:Lab) RETURN count(*)의 값이 각 조건에서 얼마일지 먼저 예상하세요.
모든 노드가 :Person·:Lab, 모든 관계가 WORKS_AT으로 저장되어 패턴과 정확히 일치합니다.
학습을 시작하면 새 문제를 직접 풀고 확인 퀴즈를 마친 뒤 선택한 본과정 회차로 돌아갑니다.