관계 모양을 그대로 적는 쿼리

Cypher는 그래프 구조를 먼저 보여 주고, 그 구조를 그대로 찾는다

노드, 관계 타입, 이동 깊이가 같은 문법 안에 함께 들어가므로 “무엇을 연결했고 얼마나 따라갈지”가 쿼리에서 바로 읽힙니다.

공통 읽기법
(:User)-[:FRIEND]->(:User) (:User)-[:FRIEND*2]->(:User) shortestPath((a)-[:FRIEND*..6]-(b))
노드 `(:User)`처럼 라벨과 속성을 함께 적어 시작점을 고릅니다.
관계 `[:FRIEND]`가 연결 종류 자체를 데이터 의미로 남깁니다.
깊이 `*2`, `*..6`처럼 몇 단계까지 탐색할지 문법 안에서 드러납니다.
그래프에서 읽히는 모양
FRIEND 관계를 따라 이동
김철수
이영희
박민수

그래프 DB에서는 간선이 1급 객체이므로, 관계를 여러 테이블 조인으로 복원하지 않고도 “연결된 경로”를 바로 질의할 수 있습니다.

하려는 일
Cypher 표현
왜 읽기 쉬운가
1
노드 생성
관계 저장
CREATE (u:User {name:"김철수", age:28})
MATCH (a:User {name:"김철수"}),
      (b:User {name:"이영희"})
CREATE (a)-[:FRIEND {since:"2020-01-01"}]->(b)
관계가 별도 해석 대상이 아니라 저장된 사실이 됩니다.

`FRIEND`와 `since`가 간선 자체에 붙으므로, 누가 누구와 언제 연결됐는지가 모델 안에 직접 남습니다.

2
친구의 친구
2-hop 탐색
MATCH (me:User {name:"김철수"})
      -[:FRIEND*2]->(fof:User)
WHERE fof <> me
RETURN DISTINCT fof.name
탐색 깊이 자체가 쿼리에 드러납니다.

`*2`를 보는 순간 “관계를 두 번 따라간다”는 뜻이 읽히므로, 다단계 자기 조인을 머릿속에서 다시 풀어낼 필요가 없습니다.

3
최단 경로
선택
MATCH path = shortestPath(
  (a:User {name:"김철수"})
  -[:FRIEND*..6]-
  (b:User {name:"박민수"})
)
RETURN path
경로 문제를 경로 문법으로 바로 적습니다.

범위를 `*..6`으로 제한하고 가장 짧은 연결만 고르기 때문에, 경로 탐색 조건과 반환 결과가 같은 구조 안에서 이어집니다.

학습 포인트: Cypher의 강점은 새 문법이 많아서가 아니라, 그래프의 관계 구조와 탐색 범위가 쿼리 모양 그대로 보인다는 점입니다.