사이퍼 (질의어)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
사이퍼(Cypher)는 프로퍼티 그래프 모델을 기반으로 하는 선언적 질의 언어이다. 노드와 관계를 사용하여 데이터를 구성하며, 레이블과 프로퍼티를 통해 데이터의 세분화된 범주와 속성을 설명한다. 아스키 아트에서 영감을 받은 시각적 구문을 사용하여 노드와 관계의 패턴을 묘사하고, `MATCH`, `WHERE`, `RETURN` 등의 절을 활용하여 쿼리를 작성한다. 사이퍼는 그래프 데이터베이스에서 데이터를 검색, 생성, 수정, 삭제하는 데 사용되며, 국제 표준 그래프 질의어인 GQL의 기반이 되었다. GQL은 ISO/IEC 39075:2024로 표준화되었으며, 사이퍼를 표준화하려는 노력의 일환으로 오픈사이퍼 프로젝트가 진행되었다.
더 읽어볼만한 페이지
- 그래프 데이터베이스 - Neo4j
Neo4j는 Neo4j, Inc.에서 개발한 그래프 데이터베이스 관리 시스템으로, 노드, 엣지, 속성으로 이루어진 데이터 모델을 사용하며 Cypher 쿼리 언어를 통해 데이터에 접근하고 관리한다. - 선언형 프로그래밍 - 스위프트 (프로그래밍 언어)
2014년 애플 세계 개발자 컨퍼런스에서 처음 공개된 스위프트는 크리스 래트너가 개발한 애플의 범용 프로그래밍 언어로서, Objective-C를 대체하며 다양한 플랫폼 지원, 모던 문법, 안정성, 인터랙티브한 개발 환경, SwiftUI 등의 특징을 가진다. - 선언형 프로그래밍 - 제약 프로그래밍
제약 프로그래밍은 제약 조건을 프로그래밍 언어에 통합하여 제약 만족 문제 해결에 사용되는 패러다임으로, 제약 조건 유형과 다양한 해 탐색 알고리즘을 활용하여 여러 영역에 적용될 수 있다. - 도메인 특화 프로그래밍 언어 - 도메인 특화 언어
도메인 특화 언어(DSL)는 특정 문제 영역에 특화된 프로그래밍 언어로, 외부 DSL, 내부 DSL, 시각적 다이어그램 언어 등으로 분류되며, 생산성 향상에 기여하지만 새로운 언어 학습의 필요성과 적용 분야의 제한이라는 특징을 가진다. - 도메인 특화 프로그래밍 언어 - G-code
G-코드는 1950년대 MIT에서 처음 구현된 수치 제어 공작 기계를 제어하는 프로그래밍 언어로서, 다양한 표준과 구현을 거쳐 발전해왔으며 현대에는 매크로 기능과 CAD/CAM 응용 프로그램과의 연동을 지원한다.
사이퍼 (질의어) | |
---|---|
기본 정보 | |
![]() | |
개발자 | 알프레드 아호 제프리 울만 피터 번스타인 세르주 아비테불 댄 수시우 |
종류 | 질의어 |
설계 시기 | 2011년 |
첫 공개 | 2012년 |
상태 | 활성화 |
설계 기반 | SQL SPARQL 패턴 매칭 |
구현체 | Neo4j SAP HANA AgensGraph |
파일 확장자 | .cypher |
특징 | |
자료형 | 정수 부동소수점 수 문자열 불린 노드 관계 경로 맵 리스트 |
표현 패러다임 | 선언형 프로그래밍 |
영향 | |
영향 받은 언어 | GraphQL PGQL |
2. 그래프 모델
사이퍼는 프로퍼티 그래프 모델을 기반으로 하며, 이 모델은 데이터를 노드와 엣지(사이퍼에서는 "관계"라고 함)로 구성한다.[4] 이러한 표준 그래프 요소인 노드와 관계 외에도, 프로퍼티 그래프 모델은 데이터의 보다 세분화된 범주와 속성을 설명하기 위해 레이블과 프로퍼티를 추가한다.
노드는 그래프 내의 개체이다. 노드는 속성이라고 하는 임의의 수의 속성(키-값 쌍)을 가질 수 있다. 노드는 도메인에서 서로 다른 역할을 나타내는 0개 이상의 레이블(태그 또는 범주와 유사)로 태그될 수 있다. 관계는 두 노드 개체 간의 방향성 있고, 명명되고, 의미적으로 관련된 연결을 제공한다. 관계는 항상 방향, 시작 노드, 종료 노드 및 정확히 하나의 관계 유형을 갖는다. 노드와 마찬가지로 관계도 속성을 가질 수 있다.[4]
레이블은 0개 이상의 노드 레이블을 할당하여 유사한 노드를 함께 그룹화할 수 있다. 프로퍼티는 문자열 키와 사이퍼 유형 시스템의 일부 값의 바인딩을 가진 키-값 쌍이다.[22]
2. 1. 노드
2. 2. 관계
2. 3. 자료형 체계
사이퍼는 CIP(Cypher Improvement Proposal)에 자세히 기술되어 있으며,[23] 노드, 관계, 경로, 맵, 리스트, 정수, 부동 소수점 숫자, 불리언, 문자열 등의 자료형을 포함하고 있다. 자료형 시스템은 다른 프로그래밍 및 질의 언어에서 사용되는 많은 공통 자료형을 포함한다. 불리언, 문자열, 숫자, 정수, 부동 소수점과 같은 스칼라 값 형식을 지원한다. 또한 `datetime`, `localdatetime`, 날짜, 시간, 현지 시간 및 기간과 같은 시간적 자료형을 지원한다. 노드, 관계, 경로에 대한 그래프 자료형과 무 형식을 비롯하여 맵 및 목록에 대한 컨테이너 자료형을 사용할 수 있다.[5]3. 문법
사이퍼는 아스키 아트(ASCII art)에서 영감을 받은 시각적 구문을 사용하는 선언적 질의 언어이다. 쿼리는 절(Clause)로 구성되며, 각 절은 특정 기능을 수행한다.
사이퍼 쿼리 언어는 노드와 관계의 패턴을 묘사하고, 레이블과 속성을 기반으로 해당 패턴을 필터링한다. 사이퍼의 구문은 쿼리에서 지정된 데이터를 시각적으로, 구조적으로 모두 표현하기 때문에 이 언어를 매우 시각적이고 읽기 쉽게 만든다.
예를 들어, 노드는 엔티티에 대한 속성과 정보를 괄호로 묶어 표현한다. 관계는 대괄호 안에 관계 유형을 포함하는 화살표(방향이 있거나 없는)로 묘사된다.
```cypher
// 노드
(변수:레이블 {속성키: '속성값'})
// 관계
- [변수:관계_유형]->
// 사이퍼 패턴
(노드1:레이블A)-[관계1:관계_유형]->(노드2:레이블B)
```
`MATCH` 절은 검색할 패턴을 지정하는 데 사용된다.[6] 주로 관계에 기반을 두어 패턴의 구조를 기술한다. `WHERE` 절은 패턴에 추가적인 제약을 추가하고 원치 않는 패턴을 필터링하는 데 사용된다.[7] `RETURN` 절은 결과를 어떻게 출력해야 하는지 형식화하고 구성한다.[8] 예를 들어, 'Nicole Kidman'이라는 이름의 배우가 활동한 모든 영화를 반환하되, 특정 해 이전으로 제한하는 쿼리는 다음과 같다.
```cypher
MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie
```
위 쿼리에서 `MATCH` 절은 `Actor` 레이블과 `name` 속성이 'Nicole Kidman'인 노드가 `ACTED_IN` 관계를 통해 `Movie` 레이블을 가진 노드와 연결된 패턴을 찾는다. `WHERE` 절은 `Movie` 노드의 `year` 속성이 `$yearParameter` 값보다 작은 경우만 남도록 필터링한다. `RETURN` 절은 `movie` 노드를 반환한다.
`CREATE`와 `DELETE` 절은 노드와 관계를 생성하고 삭제하는 데 사용된다.[9] `SET` 절은 속성 값을 설정하거나 변경하고,`REMOVE` 절은 속성 또는 레이블을 제거하는 데 사용된다. 노드는 다른 관계가 존재하지 않을 때에만 삭제할 수 있다. `OPTIONAL MATCH` 절은 매칭되는 패턴이 없을 때에도 결과를 반환하도록 한다. 이는 SQL의 `OUTER JOIN`과 유사하다. 예를 들어, `IS_RELATED_TO`관계를 통해 `Content` 노드와 연결된 `Content` 노드중 `source`속성이 `user`인 노드 및 연결된 관계를 삭제하는 쿼리는 다음과 같다.
```cypher
MATCH (startContent:Content)-[relationship:IS_RELATED_TO]->(endContent:Content)
WHERE endContent.source = 'user'
OPTIONAL MATCH (endContent)-[r]-()
DELETE relationship, endContent
```
가장 일반적으로 쓰이는 절은 `MATCH`와 `WHERE`이다. 이 기능들은 SQL의 것과는 다소 다르다. `MATCH`는 검색할 패턴의 구조를 기술하기 위해 사용하며 주로 관계에 기반을 둔다. `WHERE`은 패턴에 추가적인 제약을 추가하기 위해 사용된다.[24] 이를테면, 아래의 쿼리는 'Nicole Kidman'이라는 이름의 배우가 활동한 모든 영화들을 반환하며 특정한 해 이전으로 국한시킨다. (파라미터에 의해 전달됨):
```cypher
MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie
```
게다가 사이퍼는 데이터의 쓰기, 업데이트, 삭제를 위한 절을 포함하고 있다. `CREATE`와 `DELETE`는 노드와 관계의 생성, 삭제를 위해 사용된다. `SET`과 `REMOVE`는 값을 프로퍼티에 설정하고 노드에 레이블을 추가하기 위해 사용된다. 노드들은 다른 관계들이 존재하지 않을 때에만 삭제가 가능하다. 이를테면:
```cypher
MATCH (start:Content)-[:RELATED_CONTENT]->(content:Content)
WHERE content.source = 'user'
OPTIONAL MATCH (content)-[r]-()
DELETE r, content
3. 1. 주요 절
`MATCH` 절은 검색할 패턴을 지정하는 데 사용된다.[6] 주로 관계에 기반을 두어 패턴의 구조를 기술한다. `WHERE` 절은 패턴에 추가적인 제약을 추가하고 원치 않는 패턴을 필터링하는 데 사용된다.[7] `RETURN` 절은 결과를 어떻게 출력해야 하는지 형식화하고 구성한다.[8] 예를 들어, 'Nicole Kidman'이라는 이름의 배우가 활동한 모든 영화를 반환하되, 특정 해 이전으로 제한하는 쿼리는 다음과 같다.```cypher
MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
WHERE movie.year < $yearParameter
RETURN movie
```
위 쿼리에서 `MATCH` 절은 `Actor` 레이블과 `name` 속성이 'Nicole Kidman'인 노드가 `ACTED_IN` 관계를 통해 `Movie` 레이블을 가진 노드와 연결된 패턴을 찾는다. `WHERE` 절은 `Movie` 노드의 `year` 속성이 `$yearParameter` 값보다 작은 경우만 남도록 필터링한다. `RETURN` 절은 `movie` 노드를 반환한다.
`CREATE`와 `DELETE` 절은 노드와 관계를 생성하고 삭제하는 데 사용된다.[9] `SET` 절은 속성 값을 설정하거나 변경하고,`REMOVE` 절은 속성 또는 레이블을 제거하는 데 사용된다. 노드는 다른 관계가 존재하지 않을 때에만 삭제할 수 있다. `OPTIONAL MATCH` 절은 매칭되는 패턴이 없을 때에도 결과를 반환하도록 한다. 이는 SQL의 `OUTER JOIN`과 유사하다. 예를 들어, `IS_RELATED_TO`관계를 통해 `Content` 노드와 연결된 `Content` 노드중 `source`속성이 `user`인 노드 및 연결된 관계를 삭제하는 쿼리는 다음과 같다.
```cypher
MATCH (startContent:Content)-[relationship:IS_RELATED_TO]->(endContent:Content)
WHERE endContent.source = 'user'
OPTIONAL MATCH (endContent)-[r]-()
DELETE relationship, endContent
3. 2. 예제
4. 표준화
프로젝트를 통해, 그래프 처리를 위한 질의어로서 사이퍼를 표준화하려는 노력이 시작되었다. 이 과정의 일환으로 다섯 차례의 구현자 회의()가 열렸다. 첫 번째 회의는 2017년 2월 독일 발도르프에 있는 SAP 본사에서 열렸으며, 이는 링크 데이터 벤치마크 위원회 회의와 일치했다. 가장 최근의 OCIM은 2019년 3월 베를린에서 열렸으며,[10] 이는 W3C 그래프 데이터 관리를 위한 웹 표준 워크숍과 일치했다.[11]
이 회의에서 사이퍼를 국제 표준화된 그래프 질의어인 GQL을 위한 더 광범위한 프로젝트의 중요한 입력으로 만드는 방향으로 작업하는 데 합의가 이루어졌다. 2019년 9월, GQL 표준 프로젝트 제안이 ISO/IEC 합동 기술 위원회 1(정보 기술 표준 담당) 회원인 각국 표준 기구의 투표로 승인되었다.[12] GQL 프로젝트 제안은 다음과 같이 명시하고 있다.
데이터 모델링의 기본 표현으로 그래프를 사용하는 것은 데이터 관리에서 새롭게 부상하는 접근 방식이다. 이 접근 방식에서 데이터 세트는 각 데이터 개체를 그래프의 정점(노드라고도 함)으로, 두 개체 간의 각 관계를 해당 정점 간의 가장자리로 표현하여 그래프로 모델링된다. 그래프 데이터 모델은 고유한 장점으로 인해 주목받고 있다. 첫째, 그래프 모델은 계층적, 복잡하거나 임의의 구조를 가진 데이터 세트에 자연스럽게 적합할 수 있다. 이러한 구조는 그래프 모델에 가장자리로 쉽게 인코딩될 수 있다. 이는 고정된 행 유형을 가진 일련의 테이블로 데이터 세트를 정규화해야 하는 관계형 모델보다 더 편리할 수 있다. 둘째, 그래프 모델은 도달 가능성 질의, 최단 또는 최저 비용 경로 질의, 중심성 분석 등 데이터 개체 간의 다중 홉 관계를 관찰해야 하는 고비용 질의 또는 데이터 분석 기능을 효율적으로 실행할 수 있게 해준다. 현재 두 가지 그래프 모델이 사용되고 있다. 바로 리소스 설명 프레임워크(RDF) 모델과 속성 그래프 모델이다. RDF 모델은 W3C에 의해 여러 사양으로 표준화되었다. 반면에 속성 그래프 모델은 그래프 데이터베이스, 그래프 알고리즘 및 그래프 처리 시설에서 다양한 구현을 가지고 있다. 그러나 (관계형 데이터베이스 시스템의 SQL과 같은) 속성 그래프를 위한 공통적이고 표준화된 질의어가 없다. GQL은 이 공백을 채우기 위해 제안되었다.[13]
2024년 현재, GQL 표준은 ISO/IEC 39075:2024로 표준 그래프 질의어로 출판되었다.[14] 언어의 하위 집합에 대한 첫 번째 오픈 소스 구현이 이미 제공되고 있다.[15][16] 구현 외에도, 형식화된 문서와 GQL의 특정 하위 집합의 구문을 읽을 수도 있다.[17]
4. 1. GQL 표준 (ISO/IEC 39075:2024)
오픈사이퍼(openCypher) 프로젝트와 함께 그래프 처리를 위한 질의어로서 사이퍼를 표준화하는 노력이 시작되었다.[25][26] 2017년 2월 독일 발도르프에 있는 SAP 본사에서 첫 번째 openCypher 구현자 회의(oCIM)가 열렸고, 가장 최근의 OCIM은 2019년 3월 베를린에서 개최되었다.[10]이 회의에서 사이퍼를 국제 표준화된 그래프 질의어인 GQL을 위한 더 광범위한 프로젝트의 중요한 입력으로 만드는 방향으로 작업하는 데 합의가 이루어졌다. 2019년 9월, GQL 표준 프로젝트 제안이 ISO/IEC 합동 기술 위원회 1(정보 기술 표준 담당) 회원인 각국 표준 기구의 투표로 승인되었다.[12] GQL 프로젝트 제안은 데이터 모델링의 기본 표현으로 그래프를 사용하는 것이 데이터 관리에서 새롭게 부상하는 접근 방식이며, 특히 속성 그래프 모델을 위한 표준화된 질의어가 없는 상황을 해결하기 위해 GQL이 제안되었다고 명시한다.[13]
2024년, GQL 표준은 ISO/IEC 39075:2024로 표준 그래프 질의어로 출판되었다.[14] GQL 언어의 하위 집합에 대한 오픈 소스 구현이 제공되고 있으며,[15][16] GQL의 특정 하위 집합의 구문을 읽을 수 있는 형식화된 문서도 제공된다.[17]
참조
[1]
웹사이트
Cypher Introduction
https://neo4j.com/do[...]
Neo4j
2019-11-08
[2]
웹사이트
Cypher: An Evolving Query Language for Property Graphs
https://hal.archives[...]
Proceedings of the 2018 International Conference on Management of Data. ACM
2018-06-27
[3]
뉴스
Meet openCypher: The SQL for Graphs - Neo4j Graph Database
https://neo4j.com/bl[...]
2019-11-08
[4]
웹사이트
Property Graph Model
https://github.com/o[...]
2019-11-08
[5]
웹사이트
Cypher Type System
https://github.com/o[...]
2019-11-08
[6]
웹사이트
Cypher manual - MATCH clause
https://neo4j.com/do[...]
Neo4j
2019-11-08
[7]
웹사이트
Cypher manual - WHERE clause
https://neo4j.com/do[...]
Neo4j
2019-11-08
[8]
웹사이트
Cypher manual - RETURN clause
https://neo4j.com/do[...]
Neo4j
2019-11-08
[9]
웹사이트
Cypher manual clauses
https://neo4j.com/do[...]
Neo4j
2019-11-08
[10]
웹사이트
Events · openCypher
https://www.opencyph[...]
[11]
웹사이트
W3C Workshop on Web Standardization for Graph Data. Creating Bridges: RDF, Property Graph and SQL
https://www.w3.org/D[...]
W3C
2019-09-29
[12]
웹사이트
ISO/IEC WD 39075 Information Technology — Database Languages — GQL
https://www.iso.org/[...]
ISO
2019-09-29
[13]
웹사이트
ISO/IEC JTC 1/SC 32 N 3007 - ISO/IEC NP 39075 Information Technology -- Database Languages -- GQL
https://standardsdev[...]
British Standards Institute
2019-09-29
[14]
웹사이트
Iso/Iec 39075:2024
https://www.iso.org/[...]
[15]
웹사이트
GQL Parser
https://github.com/O[...]
2021-01-18
[16]
웹사이트
First GQL research implementation from Olof Morra at TU Eindhoven!
https://www.linkedin[...]
Alastair Green
2021-01-18
[17]
웹사이트
A Semantics of GQL; a New Query Language for Property Graphs Formalized
https://github.com/O[...]
Olof Morra
2021-01-18
[18]
웹인용
Cypher Introduction
http://neo4j.com/doc[...]
Neo Technology
2017-01-31
[19]
뉴스
Meet openCypher: The SQL for Graphs - Neo4j Graph Database
https://neo4j.com/bl[...]
2017-01-31
[20]
웹인용
Graph Processing with SAP HANA 2
https://blogs.sap.co[...]
2017-01-31
[21]
웹인용
Bitnine AgensGraph
http://bitnine.net/s[...]
2017-01-31
[22]
웹인용
Property Graph Model
https://github.com/o[...]
2017-01-31
[23]
웹인용
Cypher Type System
https://github.com/o[...]
2017-01-31
[24]
웹인용
Neo4j 3.1.1 manual - MATCH clause
http://neo4j.com/doc[...]
Neo Technology
2017-01-31
[25]
웹인용
openCypher Implementers Meeting · openCypher.org
http://www.opencyphe[...]
2017-01-31
[26]
웹인용
oCIM announcement on openCypher Google Groups
https://groups.googl[...]
2017-01-31
[27]
URL
https://neo4j.com/bl[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com