엔티티 사이에 관계 만들기
모델링 캔버스에서 두 엔티티를 연결하고, 관계 데이터에 필요한 구조 컬럼을 확인한 뒤 파이프라인으로 적재합니다.
엔티티가 객체를 표현한다면 관계는 객체 사이의 연결을 표현합니다. 이번 레슨에서는 iot_sensor를 소스 엔티티로 추가하고, 기존 iot_machine을 대상 엔티티로 연결해 iot_reads_from 관계를 만듭니다. 이어서 실제 관계 행도 Batch 파이프라인으로 적재합니다.
사전 준비
- 이전 레슨에서 만들고 데이터를 적재한
iot_machine엔티티 iot_machine의 식별 키id
관계의 소스와 대상 엔티티에는 식별 키가 반드시 있어야 합니다. 식별 키가 없는 엔티티를 선택하면 다음 엔티티에 식별 키가 없어 관계를 만들 수 없습니다라는 메시지가 표시됩니다.
iot_sensor 엔티티와 행 준비하기
- 온톨로지 → 모델링에서 실습 컬렉션의 빌더를 엽니다.
- 엔티티 → +를 선택하고 다음 기본 정보를 입력합니다.
| 항목 | 값 |
|---|---|
| 이름 | iot_sensor |
| 별칭 | IoT 센서 |
| 설명 | id로 식별되는 기계 부착 센서입니다. |
- 속성에서 다음 스키마를 만듭니다.
| 속성 | 데이터 타입 | NULL 허용 |
|---|---|---|
id | Text | 허용하지 않음 |
machine_id | Text | 허용하지 않음 |
sensor_type | Text | 허용 |
- Identity Keys를
id로 지정하고 엔티티 만들기를 선택합니다.


-
iot_sensor.csv 내려받기를 클릭해 준비된 파일을 저장합니다.
-
저장된 IoT 센서 노드를 선택해 데이터 → 업로드에서 CSV를 추가합니다.
-
데이터 탭에서
sensor_001행을 확인합니다.

관계 방향 먼저 정하기
관계는 소스 엔티티 → 관계 → 대상 엔티티 순서로 읽습니다. 이번 실습의 의미는 다음과 같습니다.
다이어그램을 불러오는 중입니다. Mermaid 원본:
flowchart LR
accTitle: 센서와 기계 관계 및 관계 데이터 적재
accDescr: iot_sensor가 iot_reads_from 관계를 통해 iot_machine을 가리키며 sensor_machine_links 데이터셋이 매핑 Code를 거쳐 관계 행을 만드는 구조입니다.
sensor[iot_sensor<br/>소스 엔티티] -->|iot_reads_from| machine[iot_machine<br/>대상 엔티티]
dataset[(sensor_machine_links)] --> mapper[map_sensor_machine_links]
mapper -. 관계 행 적재 .-> relation{iot_reads_from}
relation -. 소스 .-> sensor
relation -. 대상 .-> machine즉, “센서가 기계에 부착되어 그 기계의 값을 측정한다”입니다. 방향을 반대로 만들면 그래프 쿼리와 이웃 확장 결과도 반대로 해석되므로, 만들기 전에 문장으로 읽어 보세요.
모델링 캔버스에서 관계 만들기
- 왼쪽 사이드바에서 온톨로지 → 모델링을 엽니다.
- 레슨에서 사용 중인 컬렉션을 선택해 빌더 화면을 엽니다.
iot_sensor노드 오른쪽의 연결점을iot_machine노드까지 끌어 놓습니다.- 관계 만들기 창에서 소스 엔티티가
iot_sensor, 대상 엔티티가iot_machine인지 확인합니다. - 다음 기본 정보를 입력합니다.
| 화면 항목 | 입력값 | 설명 |
|---|---|---|
| 이름 | iot_reads_from | 파이프라인과 쿼리에서 사용하는 시스템 이름 |
| 별칭 | 센서가 기계에서 측정 | 캔버스와 인스펙터에 표시되는 이름 |
| 설명 | IoT 센서가 부착되어 측정값을 수집하는 IoT 머신을 연결합니다. | 방향과 의미를 설명하는 문장 |

이름은 1~63자의 소문자, 숫자, 밑줄만 사용할 수 있으며 소문자로 시작해야 합니다. IOT_READS_FROM처럼 대문자가 포함된 이름은 저장되지 않습니다.
관계 속성 추가하기
관계 자체에 속한 값이 있다면 창 아래쪽 속성에서 추가합니다. 이번 관계에는 다음 속성을 추가합니다.
| 속성 이름 | 데이터 타입 | NULL 허용 | 의미 |
|---|---|---|---|
installed_at | Timestamp | 허용 | 센서를 기계에 설치한 시각 |

속성을 하나라도 추가하면 시스템이 관계 행을 식별하는 id 컬럼을 함께 관리합니다. id와 소스·대상 엔티티를 참조하는 컬럼은 관계의 구조 컬럼이므로 사용자 속성으로 다시 만들지 마세요.
- 관계 만들기를 선택합니다.

저장 결과 확인하기
캔버스에서 별칭 센서가 기계에서 측정이 표시된 선을 선택합니다. 오른쪽 인스펙터에서 다음 항목을 확인합니다.
- 탭: 개요, 속성, 데이터, 히스토리
- 이름, 소스 엔티티, 대상 엔티티: 읽기 전용
- 소스 엔티티:
IoT 센서 - 대상 엔티티:
IoT 머신 - 속성:
installed_at
저장 직후 데이터 탭이 비어 있는 것은 정상입니다. 관계 정의를 만드는 것과 실제 관계 행을 적재하는 것은 별도 작업입니다.
파이프라인 출력 컬럼 이해하기
iot_reads_from의 관계 행에는 다음 컬럼이 필요합니다.
| 출력 컬럼 | 값 예시 | 출처 |
|---|---|---|
id | sensor_001__machine_001 | 관계 행의 고유 ID |
iot_sensor_id | sensor_001 | 소스 엔티티 이름 + 소스 식별 키 id |
iot_machine_id | machine_001 | 대상 엔티티 이름 + 대상 식별 키 id |
installed_at | 2026-07-01T09:00:00 | 관계 속성 |
소스와 대상이 서로 다른 엔티티이면 참조 컬럼 이름은 기본적으로 <엔티티 이름>_<식별 키> 형식입니다. 같은 엔티티를 양쪽에 사용하는 자기 참조 관계는 이름 충돌을 피하기 위해 source_<엔티티 이름>_<식별 키>와 target_<엔티티 이름>_<식별 키>를 사용합니다.
파이프라인으로 관계 데이터 적재하기
먼저 컬렉션에서 항목 추가 → 데이터셋 → 테이블을 선택해 sensor_machine_links 데이터셋을 만듭니다. 네 컬럼은 모두 Text로 만들고 sensor_machine_links.csv 내려받기를 클릭해 준비된 CSV를 업로드합니다.
관계 원본 데이터셋에 위 네 컬럼이 있으므로 앞의 다이어그램처럼 sensor_machine_links → map_sensor_machine_links → iot_reads_from 순서로 연결합니다.
- 데이터 → 파이프라인에서 같은 컬렉션의 Batch 파이프라인을 만듭니다.
- 빠른 추가 → 코드 → Python을 캔버스에 추가하고 이름을
map_sensor_machine_links로 입력합니다. - 다음 코드를 입력합니다.
import polars as pl
def run(sensor_machine_links, *, options=None, contexts=None):
output = sensor_machine_links.with_columns(
pl.col("id").cast(pl.Utf8),
pl.col("iot_sensor_id").cast(pl.Utf8),
pl.col("iot_machine_id").cast(pl.Utf8),
pl.col("installed_at").str.to_datetime(strict=False),
)
return {"iot_reads_from": output}
sensor_machine_links → map_sensor_machine_links → 센서가 기계에서 측정(온톨로지 → 관계에서 선택)순서로 연결합니다.- Code 노드의 옵션에서 입력 키
sensor_machine_links, 출력 키iot_reads_from을 확인하고, 쓰기 방식이 병합인지 확인합니다. - 파이프라인을
load_iot_reads_from으로 저장하고 지금 실행을 선택합니다. - 상단 상태 준비됨과 최근 실행 성공을 확인합니다.
Upsert는 같은 id가 다시 들어오면 기존 관계 행을 갱신합니다. 같은 소스와 대상을 연결하더라도 id가 다르면 별도 관계 행으로 저장되므로, 반복 실행 시 안정적으로 같은 값을 만드는 규칙을 사용하세요.
결과 확인하기
- 실행 이력에서 파이프라인 실행이 완료됐는지 확인합니다.
- 온톨로지 → 모델링으로 돌아가
iot_reads_from관계를 선택합니다. - 데이터 탭을 새로 고쳐 관계 행과 네 컬럼을 확인합니다.
- 그래프 반영은 백그라운드에서 처리되므로 그래프 탐색기에 선이 바로 보이지 않으면 잠시 뒤 다시 확인합니다.
자가 점검
- 관계가
iot_sensor → iot_machine방향으로 만들어졌습니다. - 이름을 소문자
iot_reads_from으로 입력했습니다. iot_sensor에sensor_001행이 있습니다.- 관계 속성으로
installed_at을 추가했습니다. - 파이프라인 출력에
id와 두 엔티티 참조 컬럼이 모두 있습니다. - 실행 후 관계의 데이터 탭에서 행을 확인했습니다.
다음 레슨
다음 레슨에서는 그래프 탐색기에서 적재된 엔티티와 관계를 확인하고, 실제 이름을 사용한 Cypher 쿼리를 실행합니다.