그래프데이터베이스 4

(번외) Neptune 에서 Spring Data Neo4j 쓰는 법

현업에서 백엔드 개발로 가장 많이 쓰는 프로젝트는 Spring이 될 것입니다. 닷넷코어나 nestjs 가 아무리 강력하다고 해도 전자정부프레임워크를 기반으로 만들어진 국내시장의 관성은 꽤나 단단하기 때문입니다. Spring 에서 그래프데이터베이스를 가장 쉽게 사용하는 방법은 무엇인가? 그것은 바로 Spring Data Neo4j 입니다. 하지만 이름에서도 보이듯이 Neo4j 를 전문으로 지원하며 현업에서는 Neo4j보다 Neptune을 훨씬 많이 사용합니다. 뭐 이유는 다양한데 개인적으로는 그래프데이터베이스 시장이 작다보니 인프라구축하는 사람들이 구축해본적 없는 오픈소스인 Neo4j를 구축하고 관리하는걸 부담스러워하는게 크다고 생각합니다. Neptune은 AWS에서 전면지원하기때문에 상대적으로 신경을 덜..

3. 서울에서 Vertex 서방 찾기

Graphdatabase의 가장 높은 활용처는 경로탐색입니다. 그래프이론의 등장배경인 괴니히스베르크의 다리문제도 경로탐색 문제였었습니다. 경로라는 것은 출발지와 목적지가 있어야 될것입니다. 일반적으로 이 출발지와 목적지는 Vertex가 될것이고 그렇다면 우리는 Vertex를 찾는 방법을 먼저 익혀야 될 것 입니다. g.V().has("name","aimyon") 가장 일반적으로 Vertex의 property를 이용하여 검색하는 예제입니다. 속성값이 아닌 다른 요소로 Vertex를 찾을 수 도 있지만 개인적인 경험으로 Vertex를 조회할때 가장 많이 사용하는 건 속성값을 이용한 조회였습니다. 물론 현업에서 사용하는 조건은 위처럼 간단하지는 않습니다. g.V().or(__.has("age",lt(40)),..

2. Vertex와 Edge

Vertex 혹은 Node, Edge 혹은 Relationship 에 대한 개념을 먼저 짚고넘어가야합니다. 이 두가지는 Graph Database를 이루는 모든 것이라고 봐도 무방하며 모든 결과물은 이 두가지를 이용하여 만들게 됩니다. Vertex 는 RDB에서 레코드 혹은 튜플과 유사하며 우리가 흔히 알고있는 데이터 그자체입니다.그러나 몇가지 특징을 가지고있는데레이블이라는 카테고리로 묶을수 있지만 RDB의 TABLE처럼 정형데이터만 취급할 수 있는 형태가 아닌 다양한 형태의 데이터를 다룰 수 있도록 설계되어 있습니다. 저장소에 따라 인덱스를 같이 저장할수있는 유형이 있고 (Neo4j) 간접적으로 인덱싱을 지원하는 경우도 있습니다 (TinkerPop) Vertex 안에는 프로퍼티라는 이름의 속성값을 넣을..

1. Gremlin과 Cypher

GraphDatabase는 안타깝게도 SQL처럼 표준언어가 없고 현재 Gremlin, SPARQL, Cypher로 파편화 되어있는데요 다행히 저희회사에는 아마존 넵튠을 사용하기에 세가지 언어를 모두 사용할 수 있었습니다 (Cypher는 OpenCyper지만요) 각 언어의 특징을 아주 짧게 요약하면 우선 SPARQL은 학술적으로 많이 사용되고 있습니다, Graphdatabase 논문을 찾아보시면 SPARQL을 많이 사용하는걸 보시게 될겁니다. 현업에서는 Gremlin과 Cyper로 나뉘는데 상용 그래프데이터베이스의 대표인 Neptune 이 Gremlin을 오픈소스의 대표인 Neo4j 가 Cypher를 표준으로 채택했기 때문으로 보입니다. 개인적인 소감으로는 Cypher가 훨씬 직관적이고 쉽지만 복잡성이 증..