개발/GraphDatabase 10

6. 길이 없으면 길을 만들자

기본적인 개념을 설명하면서 Gremlin 문법은 사실상 거의 다 말씀드렸다고 생각합니다 좀더 있긴하지만 굳이 하나하나 설명할 필요성이 있다고 생각하지는 않고 궁금하시면 유투브의 튜토리얼이나 존경하는 Kelvin R. Lawrence의 가이드문서를 참고하시길 바랍니다. 자 그러면 그래프가 탐색에 용이한건 알겠는데 현실에 적용하기에는 문법이 부족해보일 수도 있습니다. 본격적으로 실무에 적용하면서 까다로웠던 문제들을 해결했던 가장 좋은 방법은 길을 새로 뚫는 것이였습니다. g .addV("user").property("no","A1").property("grade",4).as("A1") .addV("user").property("no","A2").property("grade",3).as("A2").addE("..

(퀴즈1) 최고의 NBA 선수를 찾아서

NBA 선수들을 대상으로 인기투표가 진행되었습니다. 참여한 스타플레이어들은 1인1표로 특정 선수를 지목할 수 있고 (자기 자신에게 투표 불가능) 그 결과를 그래프로 저장하면 아래와 같습니다. g .addV("player").property("name","Lebron").as("Lebron") .addV("player").property("name","Westbrook").as("Westbrook") .addV("player").property("name","Kawhi").as("Kawhi") .addV("player").property("name","Harden").as("Harden") .addV("player").property("name","Jokic").as("Jokic") .addV("playe..

5. 세상을 녹이는 TinkerPop

Gremlin approached The TinkerPop. The closer he got, the more his world dissolved 위 문구는 팅커팝 공식문서에 나와있는 말입니다. TinkerPop은 그래프 데이터를 처리하기위한 프레임워크입니다. Gremlin과 Neptune 이 아무리 훌륭하다고해도 프로그래밍에 활용할 프레임워크가 없다면 접근성 측면에서 매우 불편할 것입니다. 하지만 우리에겐 TinkerPop이 있고 다양한 언어, 다양한 환경에서 그래프 데이터를 처리 할수있도록 도와줍니다. Apache 프로젝트인 만큼 자바를 디폴트로 설명드리겠습니다. 우선 팅커팝을 세팅하기 위해서는 gradle에 아래와 같이 추가해줄 필요가 있습니다 implementation 'org.apache.tin..

4. Repeat 과 Emit

본격적인 그래프 탐색에서 가장 많이 사용하는 함수는 repaet 과 emit 입니다. repeat 은 순회를, emit 은 방출을 나타냅니다 일단 문법부터 보자면g.V().has("name","aimyon").repeat(in()).emit()aimyon 입장에서 in 관계에 놓인 모든 vertex를 조회하고 그 조회한 vertex 입장에서 in 관계에 놓인 모든 vertex를 조회하는 쿼리입니다. 여기서 그런 사람들중 특정 조건을 만족하는 사람들만 뽑고싶다고하면g.V().has("name","aimyon").repeat(in()).emit(has("gradeLevel",30))위와 같이 방출 시점에서 조건을 걸면 됩니다. 그런데 여기서 aimyon 의 level이 30이라서 출발지도 같이 나오는 형태를..

(번외) 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가 훨씬 직관적이고 쉽지만 복잡성이 증..

0. 자연스러운 데이터베이스 Graph Database

RDB와 SQL은 오랜기간 동안 개발자들의 동반자였고, 끊임없이 개선되고 발전해왔으나 수십년의 시간이 지나면서 많은 문제점이 노출되었습니다. 가장 큰 문제는 두가지 형태로 나타났는데 1. 비정형 데이터의 저장 2. 부자연스러운 탐색 이를 해결하기 위해 NoSQL (not only sql) 이 등장하게 되는 것은 자연스러운 현상이였습니다. 수 많은 NoSQL 중에서 오늘 이야기해볼 대상은 Graph Database입니다. 아이디어는 간단합니다. 기존의 SQL에서는 데이터간의 관계를 FK로 정의하고 JOIN 을 통해 데이터를 가져올수 있었습니다 그러나 Graph Database 세계에서는 관계라는 부분을 더욱더 강화하여 관계를 데이터와 동격으로 승격시킨 방식이라고 할 수 있습니다. 예를들어 관계자체가 검색조..