Cypher
- [Neo4j] 그래프 데이터베이스의 표준 질의 언어, Cypher란?
- 1. Cypher의 핵심 개념: 아스키 아트(Ascii Art) 구조
- 2. SQL과 Cypher의 문법 비교
- 3. Cypher의 주요 기본 명령어
- 4. 결론
[Neo4j] 그래프 데이터베이스의 표준 질의 언어, Cypher란?
데이터 간의 복잡한 관계를 다룰 때 관계형 데이터베이스(RDB)의 SQL은 조인(Join)의 성능 저하와 쿼리 복잡도 증가라는 한계에 직면한다. 이러한 문제를 해결하기 위해 등장한 그래프 데이터베이스(GDB)가 바로 Neo4j이며, Neo4j에서 데이터를 조회하고 조작하기 위해 사용하는 전용 질의 언어가 바로 Cypher(사이퍼)이다.
관계형 데이터베이스에 SQL이 있다면, 그래프 데이터베이스에는 Cypher가 존재한다.
1. Cypher의 핵심 개념: 아스키 아트(Ascii Art) 구조
Cypher의 가장 큰 특징은 선언형 언어이면서 동시에 ‘눈에 보이는 대로 작성한다’는 점이다. 텍스트로 그림을 그리는 아스키 아트 스타일을 채택하여 그래프의 형태를 쿼리문에 그대로 투영한다.
- 노드 (Node): 그래프에서 대상이나 개체를 의미하며, 동그란 모양을 본떠 소괄호
()로 표현한다. - 관계 (Relationship): 노드와 노드를 연결하는 선을 의미하며, 대괄호
[]로 표현한다. - 방향성 (Direction): 관계가 흘러가는 방향은 화살표 기호(
->또는<-)를 사용하여 직관적으로 나타낸다.
예를 들어 “사용자가 프로젝트를 개발했다”라는 구조는 Cypher에서 (사용자)-[:개발했다]->(프로젝트)와 같이 시각적으로 표현된다.
2. SQL과 Cypher의 문법 비교
이해를 돕기 위해 “정환(Jeonghwan)이라는 유저가 참여한 프로젝트의 이름을 조회한다”는 동일한 요구사항을 SQL과 Cypher로 각각 구현하여 비교한다.
RDB (SQL) 구조
관계형 데이터베이스에서는 유저 테이블과 프로젝트 테이블, 그리고 이 둘을 연결하는 매핑 테이블까지 총 3개의 테이블을 조인해야 하므로 쿼리가 길고 복잡해진다.
SELECT p.project_name
FROM users u
JOIN user_project up ON u.id = up.user_id
JOIN projects p ON up.project_id = p.id
WHERE u.name = 'Jeonghwan';
Neo4j (Cypher) 구조
Cypher는 데이터 간의 연결을 직접 따라가므로 복잡한 조인 과정 없이 경로를 선언하는 것으로 끝난다.
MATCH (u:User {name: 'Jeonghwan'})-[:DEVELOPED]->(p:Project)
RETURN p.project_name
MATCH: 찾고자 하는 그래프의 패턴을 정의하는 명령어이다.- **
:User,:Project**: 노드의 종류를 구별하는 라벨이다. {name: 'Jeonghwan'}: 해당 노드가 가진 속성(Property) 조건을 의미한다.-[:DEVELOPED]->: 두 노드가DEVELOPED라는 관계로 연결되어 있음을 명시한다.
3. Cypher의 주요 기본 명령어
Cypher에서 데이터를 생성, 조회, 수정, 삭제(CRUD)할 때 사용하는 가장 기본적인 명령어는 다음과 같이 요약할 수 있다.
| 명령어 | 역할 | 예시 코드 |
|---|---|---|
CREATE |
새로운 노드나 관계를 생성한다. | CREATE (p:Person {name: 'Alice'}) |
MATCH |
조건에 맞는 패턴을 검색한다. (SQL의 FROM + WHERE 역할) | MATCH (p:Person) WHERE p.name = 'Alice' RETURN p |
SET |
기존 노드나 관계의 속성을 수정하거나 추가한다. | MATCH (p:Person {name: 'Alice'}) SET p.age = 30 |
DELETE |
노드나 관계를 데이터베이스에서 삭제한다. | MATCH (p:Person {name: 'Alice'}) DETACH DELETE p |
참고: DETACH DELETE는 노드를 삭제할 때 해당 노드에 연결된 모든 관계까지 함께 안전하게 제거하는 명령어이다.
4. 결론
Cypher 언어는 관계 중심의 데이터를 다룰 때 강력한 장점을 지닌다.
첫째, 아무리 깊고 복잡한 레이어의 관계 데이터라도 SQL에 비해 가독성이 압도적으로 높다. 둘째, 대규모 데이터셋에서 여러 단계를 거치는 다단계(Multi-hop) 관계를 탐색할 때 RDB보다 연산 속도가 현저히 빠르다.
최근 그래프 질의 언어의 국제 표준인 GQL(Graph Query Language) 규격 제정에도 Cypher가 막대한 영향을 미쳤을 만큼, 지식 그래프(Knowledge Graph), 추천 시스템, 사기 탐지(Fraud Detection) 등의 도메인을 다루는 엔지니어에게 Cypher는 필수적인 도구로 자리 잡고 있다.