{{위키데이터 속성 추적}}
'''사이퍼'''(Cypher)는 식으로 나타내는, 프로퍼티 그래프의 효율적인 질의 및 업데이트를 허용하는 선언형 그래프 질의어이다. 사이퍼는 상대적으로 단순하지만 매우 강력한 언어이다. 매우 복잡한 데이터베이스 쿼리들은 사이퍼를 통해 쉽게 표현이 가능하다. 이를 통해 사용자들이 데이터베이스 접근 중에 길을 잃지 않고 자신의 도메인에 집중할 수 있게 한다.<ref name="cypher-introduction">{{웹 인용|url=http://neo4j.com/docs/developer-manual/current/cypher/#cypher-intro|title=Cypher Introduction|last=|first=|date=|website=|publisher=Neo Technology|accessdate=January 31, 2017|보존url=https://web.archive.org/web/20180206074506/http://neo4j.com/docs/developer-manual/current/cypher/#cypher-intro|보존날짜=2018-02-06|url-status=dead}}</ref>

사이퍼는 처음에는 그래프 데이터베이스 [[Neo4j]]를 대상으로 Neo4j사(이전 명칭: 네오 테크놀로지)가 만들었으나 2015년 10월 오픈사이퍼(openCypher) 프로젝트를 통해 개방되었으며<ref>{{뉴스 인용|url=https://neo4j.com/blog/open-cypher-sql-for-graphs/|title=Meet openCypher: The SQL for Graphs - Neo4j Graph Database|date=2015-10-21|newspaper=Neo4j Graph Database|language=en-US|access-date=2017-01-31}}</ref> 그 뒤로 SAP HANA<ref>{{웹 인용|url=https://blogs.sap.com/2016/12/01/graph-processing-with-sap-hana-2/|title=Graph Processing with SAP HANA 2|last=|first=|last2=|first2=|date=|website=blogs.sap.com|publisher=|access-date=2017-01-31|보존url=https://web.archive.org/web/20180203065201/https://blogs.sap.com/2016/12/01/graph-processing-with-sap-hana-2/|보존날짜=2018-02-03|url-status=dead}}</ref>, [[아젠스그래프]]를 포함한 여러 다른 그래프 데이터베이스 벤더들에 채택되었다.<ref>{{웹 인용|url=http://bitnine.net/solutions/agensgraph/|title=Bitnine AgensGraph|last=|first=|date=|website=bitnine.net|publisher=|language=|access-date=2017-01-31|보존url=https://web.archive.org/web/20170422142942/http://bitnine.net/solutions/agensgraph/|보존날짜=2017-04-22|url-status=dead}}</ref>

== 그래프 모델 ==
사이퍼는 프로퍼티 그래프 모델에 기반을 두며, 그 외에 노드와 엣지의 표준 [[그래프]] 요소들(사이퍼에서는 "관계", relationship이라고 함)이 콘셉트로서 레이블(label)과 프로퍼티(property)를 추가한다. 노드들은 0개 이상의 레이블이 있을 수 있는 반면, 각 관계는 정확히 하나의 관계형(relationship type)이 있다.<ref>{{웹 인용|url=https://github.com/opencypher/openCypher/blob/master/docs/property-graph-model.adoc|title=Property Graph Model|last=|first=|date=|website=GitHub|publisher=|language=en|access-date=2017-01-31}}</ref> 노드와 관계 또한 0개 이상의 프로퍼티가 있으며 여기에서 프로퍼티는 사이퍼 자료형에서 문자열 키와 일부 값의 키-값 바인딩으로 되어 있다.
=== 자료형 체계 ===
사이퍼 자료형 체계는 CIP(Cypher Improvement Proposal)에 자세히 기술되어 있으며,<ref>{{웹 인용|url=https://github.com/opencypher/openCypher/blob/master/cip/1.accepted/CIP2015-09-16-public-type-system-type-annotation.adoc|title=Cypher Type System|last=|first=|date=|website=GitHub|publisher=|language=en|access-date=2017-01-31}}</ref> 다음의 자료형을 포함하고 있다: nodes, relationships, paths, maps, lists, integers, floating-point numbers, booleans, strings

== 문법 ==
사이퍼는 다양한 절(clause)을 포함한다. 그 중 가장 일반적으로 쓰이는 것들이 MATCH와 WHERE이다. 이 기능들은 [[SQL]]의 것과는 다소 다르다. MATCH는 검색할 패턴의 구조를 기술하기 위해 사용하며 주로 관계에 기반을 둔다. WHERE은 패턴에 추가적인 제약을 추가하기 위해 사용된다.<ref name="cypher-queries">{{웹 인용|url=http://neo4j.com/docs/developer-manual/current/cypher/clauses/match/|title=Neo4j 3.1.1 manual - MATCH clause|last=|first=|date=|website=|publisher=Neo Technology|accessdate=January 31, 2017|보존url=https://web.archive.org/web/20180417023519/https://neo4j.com/docs/developer-manual/current/cypher/clauses/match/|보존날짜=2018-04-17|url-status=dead}}</ref> 이를테면, 아래의 쿼리는 'Nicole Kidman'이라는 이름의 배우가 활동한 모든 영화들을 반환하며 특정한 해 이전으로 국한시킨다. (파라미터에 의해 전달됨):

<syntaxhighlight lang="cypher">
    MATCH (nicole:Actor {name: 'Nicole Kidman'})-[:ACTED_IN]->(movie:Movie)
    WHERE movie.year < $yearParameter
    RETURN movie</syntaxhighlight>

게다가 사이퍼는 데이터의 쓰기, 업데이트, 삭제를 위한 절을 포함하고 있다. CREATE와 DELETE는 노드와 관계의 생성, 삭제를 위해 사용된다. SET과 REMOVE는 값을 프로퍼티에 설정하고 노드에 레이블을 추가하기 위해 사용된다. 노드들은 다른 관계들이 존재하지 않을 때에만 삭제가 가능하다. 이를테면:<ref name='cypher-queries' />

<syntaxhighlight lang="cypher">
    MATCH (start:Content)-[:RELATED_CONTENT]->(content:Content)
    WHERE content.source = 'user'
    OPTIONAL MATCH (content)-[r]-()
    DELETE r, content</syntaxhighlight>

== 표준화 ==
오픈사이퍼 프로젝트와 함께 그래프 처리를 위한 질의어로서 사이퍼를 표준화하는 노력이 시작되었다. 이러한 과정 중 일부는 First openCypher Implementers Meeting(oCIM)이며, 2016년 12월 처음 발표되었다.<ref>{{웹 인용|url=http://www.opencypher.org/2017/01/17/ocim-announcement/|title=openCypher Implementers Meeting · openCypher.org|last=|first=|date=|website=www.opencypher.org|publisher=|language=en|access-date=2017-01-31|보존url=https://web.archive.org/web/20170128052615/http://www.opencypher.org/2017/01/17/ocim-announcement|보존날짜=2017-01-28|url-status=dead}}</ref><ref>{{웹 인용|url=https://groups.google.com/forum/#!topic/opencypher/vCNM4UOXcTY|title=oCIM announcement on openCypher Google Groups|last=|first=|date=|website=groups.google.com|publisher=|access-date=2017-01-31}}</ref>

== 같이 보기 ==
* [[SPARQL]]: 그래프 데이터를 조회하기 위한 또다른 선언형 질의어

== 각주 ==
{{각주}}

== 외부 링크 ==
* [https://web.archive.org/web/20180409103006/http://www.opencypher.org/ 오픈사이퍼](OpenCypher): 사이퍼를 다른 그래프 데이터베이스에서 사용하도록 확대하기 위한 Neo4j 등의 이니셔티브<ref>https://neo4j.com/blog/open-cypher-sql-for-graphs/</ref>

{{질의어}}

[[분류:프로그래밍 언어]]
[[분류:선언형 프로그래밍]]
[[분류:그래프 데이터베이스]]
[[분류:2007년 소프트웨어]]
[[분류:NoSQL]]
[[분류:도메인 특화 프로그래밍 언어]]
[[분류:자바로 작성된 자유 소프트웨어]]
[[분류:자유 데이터베이스 관리 시스템]]
[[분류:질의 언어]]