G·Graph Daily Lab
DAY 27 / 100
내 학습 기록
DAY 27개념·실험속성 그래프 모델

관계에도 타입과 속성이 있다

노드 사이의 선에도 이름과 값이 있습니다. 두 노드 사이에서만 성립하는 사실을 어디에 적어야 하는지 살펴봅니다.

약 20분조작형 실험 확인 퀴즈
A SMALL DETOUR

이번 회차, 내 속도로.

기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 27로 돌아옵니다.

난이도·관심 주제 고르기
이번 회차는 어느 속도로 볼까요?
더 살펴볼 주제 1~2개 선택

1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.

이렇게 다녀와요 1단계 · 약 12분

  1. 출발 · DAY 27관계 타입·관계 속성
  2. 1. 관심 주제레이블·관계 타입·속성 이름 규칙추가 11 · 새 추가 수업
  3. 복귀 · DAY 27원래 회차 이어가기
  • 레이블·관계 타입·속성 이름 규칙 · DAY 26·27에서 레이블·관계·속성을 배운 뒤, 이름을 잘못 지어 질의가 조용히 틀리는 경우를 미리 막기 위해 옵니다.

선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.

복귀: DAY 27 → 본과정 다음 회차: DAY 28

핵심 개념

속성 그래프의 관계(relationship)는 항상 시작 노드와 끝 노드, 방향, 그리고 정확히 하나의 타입을 가집니다. (:Person {name:'민수'})-[:WORKS_AT]->(:Lab {name:'그래프연구실'})에서 WORKS_AT이 관계 타입이고 화살표가 방향입니다. 관계 타입 이름은 보통 대문자와 밑줄로 씁니다. 관계도 노드처럼 키–값 속성을 가질 수 있습니다.

관계 속성은 두 노드 사이에서만 성립하는 사실을 기록합니다. ‘2021년부터 근무’는 민수 혼자의 성질도, 연구실 혼자의 성질도 아니고 민수와 그래프연구실 사이의 사실입니다. 그래서 [:WORKS_AT {since:2021}]처럼 관계에 since를 둡니다. 민수가 두 연구실을 겸임하면 WORKS_AT 관계가 두 개 생기고 since도 각 관계에 따로 붙습니다.

방향은 저장되지만 질의할 때는 무시할 수 있습니다. (a:Person)-[:KNOWS]-(b:Person)처럼 화살표를 빼면 양쪽 방향이 모두 일치합니다. 그래서 서로 아는 사이처럼 대칭인 관계를 굳이 두 번 저장할 필요가 없습니다. 두 번 저장하면 관계 수가 두 배가 되고, 한쪽만 고쳐지는 불일치가 생길 수 있습니다.

관계에는 한계도 있습니다. 관계는 정확히 두 노드만 잇기 때문에 세 명이 함께한 회의는 관계 하나로 표현할 수 없습니다. 또 관계에 다른 관계를 붙일 수 없어서, 관계 자체에 대해 많은 사실을 말해야 한다면 그 관계를 중간 노드로 바꾸는 편이 낫습니다(DAY 42).

관계는 방향과 타입 하나를 가지며, 두 노드 사이에서만 성립하는 사실은 관계 속성에 적습니다.

작은 예제로 따라가기

01

민수 —WORKS_AT {since:2021}→ 그래프연구실: 시작 노드 민수, 끝 노드 그래프연구실, 타입 WORKS_AT, 속성 1개입니다.

02

민수가 2023년부터 언어연구실도 겸임하면 WORKS_AT 관계가 2개가 되고, since 2021과 2023이 각 관계에 따로 붙습니다.

03

since를 민수 노드로 옮기면 값이 2021과 2023 두 개가 되어, 어느 연구실의 시작 연도인지 노드만 보고는 알 수 없습니다.

직접 실험해 보기

관계 칩에서 WORKS_AT 하나를 눌러 타입·방향·since를 확인하고, ‘관계 속성을 노드 속성으로 옮기면?’ 토글을 켠 뒤 어떤 정보가 모호해지는지 한 문장으로 적으세요.

LIVE EXPERIMENT · RELATIONSHIPS

관계의 타입·방향·속성 살펴보기

WORKS_AT {since: 2021}그래프실언어실민수지아서준하린도윤유나P1P2P3P4
선택한 관계
항목값
타입:WORKS_AT (관계마다 정확히 1개)
방향민수(:Person) → 그래프실(:Lab)
속성{since: 2021}
MATCH (a:Person {name: '민수'})
      -[r:WORKS_AT]->
      (b:Lab {name: '그래프연구실'})
RETURN type(r), r.since

이번에는 직접 풀어 보세요

정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.

문제 1
힌트 보기

WORKS_AT 관계가 몇 개 필요한지 먼저 셉니다.

풀이와 비교하기

(:Person {name:'하린'})-[:WORKS_AT {since:2019}]->(:Lab {name:'언어연구실'})과 (:Person {name:'하린'})-[:WORKS_AT {since:2024}]->(:Lab {name:'그래프연구실'})입니다. 실제로 저장할 때는 두 패턴의 하린이 같은 노드여야 합니다. since를 하린 노드에 두면 2019와 2024 중 어느 값이 어느 연구실 것인지 알 수 없습니다.

풀이와 확인 표시는 이 브라우저에 저장됩니다.

YOUR NOTES

오늘 이해한 것과 다시 볼 것

계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.

메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.

오늘의 이해 확인

한 사람이 두 연구실에 서로 다른 해부터 근무할 때 since를 두기에 가장 정확한 곳은?

완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1

FURTHER READING

더 깊이 읽기

예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.

What is a graph databaseNeo4j Getting StartedWhat is graph data modeling?Neo4j Getting Started

이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.