[Neo4j] 그래프 데이터베이스 쿼리문 1장

zoo_gathers·2025년 3월 5일

Neo4J

목록 보기
4/4
  1. 노드 생성하기

노드란 사람, 사물, 제품 등 개체(Entity)를 의미한다.

예를 들어, 사람이라는 노드를 만들고 싶다면 다음과 같이 Cypher문을 작성하면 된다.

CREATE (:Person {name: '길동', age: 23})

위 Cypher문은 다음과 같은 의미를 갖는다.

  • :Person → "Person"이라는 레이블(Label)을 가진 노드를 만든다는 뜻
  • {name: "길동", age: 23} → 속성(properties)을 추가

해당 Cypher을 실행하면 위와 같은 결과를 얻을 수 있다.

메시지의 내용은 다음과 같다.

"Person"이라는 레이블을 가진 노드 1개가 생성되었고, 그 노드에는 "name"과 "age" 두 개의 속성이 추가되었다는 뜻!

생성한 레이블 전체를 확인하기 위해 MATCH를 활용하면 다음과 같이 생성된 레이블을 확인할 수 있다.


만약 여러 개의 노드를 생성하고자 하는 경우 다음과 같이 생성이 가능하다.

CREATE (:Person {name: "민식", age: 25}),
       (:Person {name: "춘향", age: 22})
  • 위와 같이 작성된 Cypher문은 "민식"과 "춘향"이라는 2개의 노드를 한 번에 생성한다는 의미를 갖는다.

위 Cypher을 실행하면 위와 같은 결과를 얻을 수 있다.


이렇게 보면 노드와 레이블 그리고 속성에 대한 내용이 헷갈릴 수 있는데 다음과 같이 쉽게 정리하면 된다.

  • 노드(Node): 하나의 개체 (예: 철수)
  • 레이블(Label): 노드의 종류를 구분하는 태그 (예: Person)
  • 속성(Property): 노드가 가진 정보 (예: name: "철수", age: 25)
CREATE (:Person {name: '길동', age: 23})

해당 Cypher문을 분석해 보면 다음과 같다.

위 Cypher문은 하나의 노드를 생성하는 쿼리문이다.

위 Cypher문은 여러 노드의 종류 중 Person을 의미한다.

위 Cypher을 통해 생성된 노드는 이름이 철수이고 나이가 25이라는 속성을 갖는다.

더 쉽게 직관적으로 보면 Neo4J의 노드는 엑셀의 한 행과 같은 개념이라고 할 수 있다.

이와 같이 엑셀에 하나의 행으로 노드가 생성된 것이고 Person은 카테고리, 철수와 25는 속성값이 된다.


이는 여러 노드가 생성될 때도 마찬가지로

CREATE (:Person {name: "철수", age: 25}),
       (:Person {name: "영희", age: 22})

위와 같은 Cypher문은 아래와 같은 구조를 갖는다.


이제 CREATE와 비슷한 MERGE에 대해서 알아보자.

CREATE와 MERGE의 차이점은 다음과 같다.

CREATE = 새로운 노드나 관계를 반드시 생성합니다. 이미 존재하는 노드가 있더라도 중복으로 생성

CREATE (p:Person {name: "철수"})

위 쿼리는 철수라는 이름을 가진 노드를 새로 생성하는 쿼리문이다.
기존에 철수라는 노드가 이미 존재하더라도 새로운 노드를 추가하게 된다.

MERGE = 중복을 피하고 기존 데이터를 찾아서 연결하거나, 없으면 새로 생성

MERGE (p:Person {name: "철수"})

위 쿼리를 보면 기존 CREATE와 비슷하게 구성되어 있으며 단지 CREATE가 MERGE로 바뀐 것 뿐이다.

하지만 위 쿼리는 중요한 역할을 진행하는 데, 바로 기존에 동일한 노드나 관계가 존재하면 그걸 찾아서 사용하고, 없으면 새로 생성한다는 것이다.

예를 들어 확인해 보자.

이전에 진행했던

위 쿼리를 한 번 더 진행하게 되면 결과는 다음과 같다.

이와 같이 똑같은 노드가 2개 생성된 것을 확인할 수 있다.

하지만 여기서

MERGE를 활용하게 되면 다음과 같이

이미 존재하는 노드이기 때문에 아무것도 바뀐 것이 없다는 문구가 보이게 된다.

이게 바로 MERGE와 CREATE의 차이점이다.


다음 포스터에서는 관계를 형성하는 방법에 대해서 공부해보자.

profile
전공: 소프트웨어, 관심 분야: LLM, NLP, 지식 그래프

0개의 댓글