🎮60

스키마가 살아있는지 확인한다

Neo4j 시작하기

학습 목표
  • 최소 패턴을 넣어 스키마·타입·관계를 검증한다
  • 지연 계산 질의로 설계가 CQ 에 답하는지 확인한다
Interactive Simulator
스키마가 살아있는지 확인한다
클릭하여 시뮬레이터를 실행하세요

스모크 테스트

빈 그래프에 손으로 최소 패턴을 넣어 스키마가 살아있는지 확인합니다. 코스 3의 대량 적재 전 예행연습입니다.

// 기항 허브 패턴 1건 생성
CREATE (v:Vessel {imoNumber:"9999999", name:"한바다호", vesselType:"ContainerShip"})
CREATE (p:Port {unLocode:"KRPUS", name:"부산항",
        position: point({latitude:35.1, longitude:129.04})})
CREATE (b:Berth {berthCode:"PNC-B2", length:350, position: point({latitude:35.08, longitude:128.83})})
CREATE (pc:PortCall {callId:"urn:mrn-compat:portkg:call:2026-0813-001", status:"BERTHED"})
CREATE (be:BerthingEvent {plannedTime: datetime("2026-08-13T04:35+09:00"),
        actualTime: datetime("2026-08-13T14:05+09:00"),
        timeBasis:"berth", source:"PORTMIS"})
CREATE (v)-[:MAKES_CALL]->(pc)-[:AT_PORT]->(p)
CREATE (pc)-[:ALLOCATED_TO]->(b)
CREATE (be)-[:PART_OF_CALL]->(pc)
CREATE (be)-[:AT_BERTH]->(b);

이제 AN-01의 축소판 — 접안 지연을 계산합니다.

MATCH (v:Vessel)-[:MAKES_CALL]->(pc:PortCall)<-[:PART_OF_CALL]-(be:BerthingEvent)
RETURN v.name,
       duration.between(be.plannedTime, be.actualTime).hours AS delayHours,
       be.source;
// 기대 결과: 한바다호, 9(시간대 반올림에 따라 9~10), "PORTMIS"

계획 04:35, 실제 14:05 — 9.5시간 지연이 계산되어 나오면 스키마·타입·관계가 모두 정상입니다.

이 축소판이 코스 4에서 CQ 정식 구현으로, 그리고 자연어 질의 "한바다호 접안이 왜 늦었나"의 답변 재료로 성장합니다.

확인할 것

  1. source 속성이 결과에 함께 나오는지 — 앞 모듈에서 "전 이벤트 필수"라고 한 이유가 여기서 보입니다. 답에 근거가 붙습니다.
  2. 유일성 제약이 실제로 작동하는지 — 같은 imoNumber로 두 번째 Vessel을 만들어 보고 거부되는지 확인하세요.
  3. 존재성 제약이 없다는 것 — actualTime 없는 BerthingEvent를 만들어 보세요. 막히지 않습니다. 이것이 앞 과제에서 L2로 이관한 제약의 실제 모습입니다.

이 모듈의 신규 용어

용어
LPG (Labeled Property Graph)라벨 노드 + 타입 관계 + 속성의 그래프 모델. Neo4j의 모델
라벨(Label) / 다중 라벨노드의 분류 태그. 한 노드에 여러 개 가능 — 클래스 계층의 LPG 구현 수단
boltNeo4j의 바이너리 접속 프로토콜(7687 포트). 드라이버가 사용
APOCNeo4j 유틸리티 함수 확장 플러그인 (Awesome Procedures On Cypher)
GDSGraph Data Science 플러그인. 중심성·커뮤니티 탐지 등 그래프 알고리즘
neosemantics (n10s)LPG↔RDF 변환 플러그인. 링크드데이터 연동 경로
PROFILECypher 실행 계획·비용 분석 명령. 인덱스 튜닝의 증거
스모크 테스트본격 가동 전 "연기만 안 나면 통과" 수준의 기본 동작 확인
용어