개발/GraphDatabase

5. 세상을 녹이는 TinkerPop

희묭 2023. 6. 13. 19:22
Gremlin approached The TinkerPop. The closer he got, the more his world dissolved

위 문구는 팅커팝 공식문서에 나와있는 말입니다.

TinkerPop은 그래프 데이터를 처리하기위한 프레임워크입니다.

Gremlin과 Neptune 이 아무리 훌륭하다고해도 프로그래밍에 활용할 프레임워크가 없다면 접근성 측면에서 매우 불편할 것입니다.

하지만 우리에겐 TinkerPop이 있고 다양한 언어, 다양한 환경에서 그래프 데이터를 처리 할수있도록 도와줍니다.

Apache 프로젝트인 만큼 자바를 디폴트로 설명드리겠습니다.

 

우선 팅커팝을 세팅하기 위해서는 gradle에 아래와 같이 추가해줄 필요가 있습니다

implementation 'org.apache.tinkerpop:tinkergraph-gremlin:3.6.4'

이제 팅커팝의 세계로 들어올 준비가 끝났고 간단하게 문법을 사용할 수 있습니다.

앞에서 작성한 쿼리를 날려볼 수 있습니다

public static void main(String[] args) throws Exception {
        try(Graph graph = TinkerGraph.open()) {
            var g = traversal().withEmbedded(graph);
            g.addV("testLabel").property("name","aimyon").property("job","singer").next();
            g.addV("testLabel").property("name","ohtani").property("job","baseballer").next();

            g.V().has("name","aimyon").addE("testEdge").property("name","firstEdge").to(__.V().has("name","ohtani")).next();

            var result = g.V().path();

            result.forEachRemaining(System.out::println);
        }
    }

뒤에 있는 next() 를 제외하고는 기존의 쿼리를 그대로 쓸수있는 장점이 있습니다.

jpa 의 querydsl 수준이 아니라 말그대로 그대로 쓸 수 있습니다.

뿐만아니라 vertex 를 객체화 시켜서 코드레벨에 손쉽게 녹일 수 있습니다.

try(Graph graph = TinkerGraph.open()) {
            var g = traversal().withEmbedded(graph);
            g.addV("testLabel").property("name","aimyon").property("job","singer").next();
            var vertex = g.V().toList().get(0);
            var vertexName = (String) vertex.value("name");

            System.out.println(vertexName); //output : aimyon
}

객체화된 vertex를 활용하면 별도의 인덱스용 케쉬맵을 만들 수도 있고 다른 RDB, NoSQL과의 합성결과도 쉽게 만들 수 있습니다.