> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# Neo4J Cypher 가이드
- URL: https://www.popit.kr/neo4j-cypher-guide/
- Published: 2018-04-25T23:30:53.000Z
- Updated: 2018-04-26T23:40:36.000Z
- Author: 송 준이
- Tags: #소프트웨어, neo4j, cypher, graphdb, ogm

Neo4j를 기반으로 프로그래밍을 할 일이 생겼다. 특히 Cypher 쿼리 언어를 중심으로 스터디하면서 가장 기본적인 내용을 정리했다. 그래프 DB와 Neo4J를 처음 접하는 처지에서, 전문적인 튜토리얼이나 서적을 보기 전에 먼저 읽어두면 도움이 될 것이다. 이 글에선 간략히 개요를 설명하며, 정리한 내용은 맨 밑의 슬라이드에서 확인할 수 있다. 

## 그래프 DB와 Neo4J

그래프 DB란 데이터 간의 관계를 일급(first-class) 엔티티로 다룰 수 있도록 설계된 데이터베이스다. 관계형 데이터베이스의 경우 검색 시점에 저장된 관계를 이용하는 반면, 그래프 DB는 데이터 간의 관계를 저장 시점에 저장한다. 그래프 모델에서 가장 핵심적인 요소는 노드(Node)와 관계(Relation)이다.

![popit_neo4j_graph_model2](https://www.popit.kr/content/images/wp/2018/04/popit_neo4j_graph_model2-1024x405.png)

그림. 그래프 모델 예시

- 노드(Node)
  - 그래프의 엔티티로서 역할(Role)에 따른 레이블을 가진다
  - 예) Employee, Company, City
- 관계(Relatoin)
  - 도 노드 사이의 연결
  - 예) :HAS\_CEO, :LOCATED\_IN

 Neo4J는 오픈소스 그래프 DB이며, 아래와 같은 특성을 가진다. 커뮤니티 버전은 무료이지만, 운영 관점의 주요 기능은 대체로 유료다.

- ACID 트랜잭션 지원
- Native 그래프 DB로서, 그래프 엔진 레벨이 아닌 스토리지 레벨까지 구현됨
- 유연하며 강력한, 그래프 전용 쿼리 언어인 Cypher 제공

## 쿼리언어 Cypher

Cypher는 SQL-Like 선연형 쿼리 언어로, 그래프 모델에 특화된 쿼리 언어다. 가장 기본적인 쿼리 구문은 다음과 같다.

![popit_neo4j_graph_cypher](https://www.popit.kr/content/images/wp/2018/04/popit_neo4j_graph_cypher.png)

그림. Cypher 기본 구문

노드는 마치 동그라미와 같은 (a)와 같은 형태로, 관계는 --> 로 표현된다. 

## NorthWind 예제 따라하기

예제는 Neo4J의 샘플 데이터셋 중에서 NorthWind 샘플을 사용한다.

![popit_neo4j_graph_northwind](https://www.popit.kr/content/images/wp/2018/04/popit_neo4j_graph_northwind.png)

그림. NorthWind 데이터 구조

 예제는 2가지로 구성된다.

- 하나는 관계형 DB에 저장된 NorthWind 데이터셋을 Neo4J로 Load하고, Cypher 쿼리 언어를 이용해서 질의하는 방법을 간략히 설명한다.
- 나머지 예제는 Neo4J의 Java 클라이언트 라이브러리 중 하나인 OGM(Object Graph Mapping) 라이브러리를 사용해서 자바 클라이언트를 작성하는 방법을 설명한다. 자바 예제 코드는 [socurites/neo4j-northwind-java](https://github.com/socurites/neo4j-northwind-java?ref=popit.kr)에서 내려받을 수 있다.

## 슬라이드

정리된 내용은 아래 슬라이드에서 확인할 수 있으나, 화질이 구리니 PPT 파일을 다운로드하는 것이 좋을 것 같다. [\[다운로드\]](https://drive.google.com/open?id=1llMY3PzBxRQEU5liO%5FLFzsFhcGhDwv4c&ref=popit.kr)[https://www.slideshare.net/JunyiSong1/201804-neo4-jcypherguide](https://www.slideshare.net/JunyiSong1/201804-neo4-jcypherguide?ref=popit.kr)