본문 바로가기
IT/gremlin

Gremlin 실습해보기

by 가능성1g 2026. 5. 15.
반응형

그래도 언어는 써봐야 맛이기 때문에 실습환경을 구축해서 써봤습니다.

db 가 있어야 해서 casandra  기반으로 gremlin 을 사용할 수 있는 실습 환경입니다. 

 

1. wsl 설치

wsl --install

 

2. docker desktop 설치

 

3. 이미지 pull

#wsl 에서
docker pull datastax/dse-server:6.9.21-ubi

 

4. 볼륨 생성

docker volume create dse-cassandra-data

 

5. 카산드라 실행전 권한 정리

docker run --rm \
  --entrypoint /bin/bash \
  -u root \
  -e DS_LICENSE=accept \
  -v dse-cassandra-data:/var/lib/cassandra \
  datastax/dse-server:6.9.21-ubi \
  -lc '
    mkdir -p /var/lib/cassandra/commitlog \
             /var/lib/cassandra/data \
             /var/lib/cassandra/hints \
             /var/lib/cassandra/saved_caches \
             /var/lib/cassandra/metadata \
             /var/lib/cassandra/cdc_raw

    chmod -R 777 /var/lib/cassandra

    ls -ld /var/lib/cassandra /var/lib/cassandra/commitlog
  '

 

6. 컨테이너 실행

docker run -d \
  --name dse-graph \
  --memory 6g \
  -e DS_LICENSE=accept \
  -e LANG=C.UTF-8 \
  -e LC_ALL=C.UTF-8 \
  -e JVM_EXTRA_OPTS="-Xms1g -Xmx1g" \
  -p 9042:9042 \
  -p 8182:8182 \
  -v dse-cassandra-data:/var/lib/cassandra \
  datastax/dse-server:6.9.21-ubi -g

 

7. 정상 확인

docker logs -f dse-graph

#UN으로 표기시 정상
docker exec -it dse-graph nodetool status

 

8. Gremlin  콘솔 접속

docker exec -it \
  -u root \
  -e HOME=/root \
  dse-graph dse gremlin-console -u cassandra -p Cassandra

 

이제 그렘린을 써볼 준비가 되었습니다. 아래는 예제 그래프 생성 및 조회 명령어 입니다.

 

# 기본 그래프 생성

system.graph("simple_c360").create()

 

# Vertex 생성 ( RDB 에서 기본 정보 저장 테이블과 매칭 )
schema.vertexLabel("Customer").
ifNotExists().
partitionBy("customer_id", Text).
property("name", Text).
create();

schema.vertexLabel("Account").
ifNotExists().
partitionBy("acct_id", Text).
create();

schema.vertexLabel("Loan").
ifNotExists().
partitionBy("loan_id", Text).
create();

schema.vertexLabel("CreditCard").
ifNotExists().
partitionBy("cc_num", Text).
create();

 

# Edge 생성 ( RDB 에서는 관계 정의용 테이블 )
schema.edgeLabel("owes").
ifNotExists().
from("Customer").
to("Loan").
create();
schema.edgeLabel("uses").
ifNotExists().
from("Customer").
to("CreditCard").
create();
schema.edgeLabel("owns").
ifNotExists().
from("Customer").
to("Account").
property("role", Text).
create();

 

# 데이터 넣기
michael = g.addV("Customer").
property("customer_id", "customer_0").
property("name", "Michael").
next();

acct_14 = g.addV("Account").
property("acct_id", "acct_14").
next();

loan_32 = g.addV("Loan").
property("loan_id", "loan_32").
next();

cc_17 = g.addV("CreditCard").
property("cc_num", "cc_17").
next();

g.addE("owns").
from(michael).
to(acct_14).
property("role", "primary").
next();
g.addE("owes").
from(michael).
to(loan_32).
next();
g.addE("uses").
from(michael).
to(cc_17).
next();

maria = g.addV("Customer").
property("customer_id", "customer_1").
property("name", "Maria").
next();
g.addE("owns").
from(maria).
to(acct_14).
property("role", "limited").
next();

 

# 조회 예제 customer_0 가 쓰는 카드번호 
dev.V().has("Customer", "customer_id", "customer_0").
out("uses").
values("cc_num")

반응형