기술/DB

[neo4j] 자체 개발 plugin implement하기(docker)

하기싫지만어떡해해야지 2024. 7. 31. 18:07

우리 연구실에선 공간 데이터의
효율적인 DB 검색을 위해
graphDB인 neo4j를 채택했는데
neo4j에서 공간 데이터를 위한
쿼리 기능이 그렇게 좋지는 않다고 한다
 
따라서 우리 연구실에서
검색 성능 개선 및 공간연산(join, intersect)을
자체 plugin을 java로 개발했고
이를 neo4j에 플러그인으로
implement 해야했다
 
neo4j 공식문서에서
docker 환경에서의 plugin
설치 및 적용법을 참고하여
진행하였다
 
참고:
https://neo4j.com/docs/operations-manual/current/docker/plugins/

Plugins - Operations Manual

How to load plugins when using Neo4j in Docker.

neo4j.com

 

환경

서버: Ubuntu 20.04.6 LTS


 
neo4j 공식 문서에 따르면
neo4j에 존재하는 plugin을
docker 환경에 있는 neo4j에
적용하려면

위와 같이 
neo4j docker image를 다운받고
docker run을 해줄 때

--env NEO4J_PLUGINS = [다운받을 플러그인 이름]

라인을 추가해주면
해당 플러그인이 install이 된다고 한다
 

 
정상적으로 설치가 되었다면
neo4j/plugins 폴더에
해당 플러그인의 jar파일이
있는 걸 확인할 수 있다고 한다
 

 
neo4j/plugins 폴더에
jar 파일이 제대로 다운로드 된 걸
확인했으면

--volume=$HOME/neo4j/plugins:/plugins \

라인을 docker run할 때
추가해준 뒤,
새로운 컨테이너로 실행해주면
plugin이 적용된다고 한다
 
 
따라서
우리가 자체 개발한 plugin을
jar 파일로 생성해서
neo4j/plugins 폴더에 넣어준 뒤
--volume 라인 명령어와 함께
새로운 container로 실행하면
자체 플러그인이 적용되지않을까 생각했다


1. jar 파일 만들기

neo4j는 java로 만들어진
소프트웨어이기 때문에
plugin도 java로 개발했다
 
이 plugin 실행파일을
생성해줘야하니
jar 파일을 생성해주었다
 
이런 plugin과 같은 java project는
외부에서 실행을 시켜줘야하기 때문에
project 내부에
main class와 같은 entry point가
없을 수도 있다고 생각했다
 
intellij jar파일 생성을 구글링하면
보통 File -> Project Structure에서
Jar Application을 생성하는 법이 많이 나오는데
그건 main class를 설정해줘야하므로
조금 다른 방법으로
jar 파일을 생성해줬다
 
intellij의 경우 가장 오른쪽 사이드바 아이콘들 중에서
Maven을 클릭한 뒤,
jar를 선택해서
jar:jar을 더블클릭

 
이렇게 해주면 프로젝트 내부에
target이라는 폴더가 생성되고

 
버전 명과 함께 이렇게
jar파일이 생성된 것을 확인할 수 있다
 

2. jar파일 neo4j/plugins 폴더로 이동

jar 파일이 생성이 되었으면
이제 이 파일을
neo4j/plugins 폴더로 이동시켜줘야한다
 
우선 ssh로 서버에 접속한 뒤,
neo4j 경로로 접속해주었다
 
아무런 plugin을 설치하지 않았다면
plugins라는 폴더가 아예 생성되어있지 않을 것이다
따라서 mkdir을 통해 plugins 폴더를 생성해주었다

mkdir plugins

 
그런 다음 scp 명령어를 통해
내 로컬 컴퓨터에 있는 jar 파일을
서버로 복사+전송 시켜주었다
 

scp [전송할 파일경로] [사용자명@전송서버ip주소]:[전송서버내 저장경로]

 
여기서 permission denied 에러가 뜰 경우
https://think0905.tistory.com/8

[리눅스/우분투] ssh 파일 전송, permission denied 해결

ssh를 통해 접속한 서버로내 로컬에 있는 파일을 전송해야했다 우선 ssh 접속을 통해파일을 원격으로 전송하는 명령어이다scp [전송할 파일경로] [사용자명@전송서버ip주소]:[전송서버내 저장경로

think0905.tistory.com

이 게시글 참고하기
 
이렇게 해주면 neo4j/plugins 폴더에
성공적으로 로컬에 있던 jar 파일이
만들어진 것을 확인할 수 있다

 

3. plugin 포함한 새로운 container 실행

이렇게 plugins폴더에
import하고 싶은 jar파일을 넣어주었으면
neo4j 공식 문서에 나와있는대로

--volume=$HOME/neo4j/plugins:/plugins \

라인을 추가해
새로운 container를 실행해주면 된다
 

docker run -d -it\
--publish=7474:7474 --publish=7687:7687\
--volume=$HOME/neo4j/data:/data --volume=$HOME/neo4j/plugins:/plugins \
neo4j

나는 위처럼 명령어를 통해
새로운 container를 실행시켜줬다
 
그럼 서버의 ip주소의 7474포트로
neo4j의 브라우저를 이용할 수 있다
 
 
 
브라우저에 접속한 뒤
제작한 plugin의 메소드들이 잘 작동하는지 확인해주었다

 
plugin 내에서 새롭게 정의한 코드들이
잘 있는 것을 확인해주었다
 
이제 작동만 잘 되면...
 
아무튼 이렇게 직접 개발한 neo4j plugin
docker 환경에서 implement하기 완료!