Ubuntu 22.04에서 Neo4j 그래프 데이터베이스를 설치하고 구성하는 방법
이 페이지에서
- 전제 조건
- 1단계 - Neo4j 설치
- 2단계 - 연결 테스트
- 3단계 - 원격 액세스를 위한 Neo4j 구성\n
- 4단계 - 방화벽 액세스(UFW) 구성\n
- 5단계 - Neo4j 사용
- 결론
Neo4j는 데이터 관계를 생성하는 데 사용되는 그래프 데이터베이스입니다. 기존 데이터베이스 내부의 데이터는 테이블과 같은 구조로 저장됩니다. 그래픽 데이터베이스는 데이터 노드 간의 관계를 기록합니다. 각 노드는 연결된 다른 모든 노드에 대한 참조를 저장합니다. 기존 데이터베이스는 관계 데이터를 직접 저장하지 않지만 비용과 시간이 많이 드는 인덱싱을 통해 데이터 구조를 검색하여 연결을 파악할 수 있습니다. Neo4j와 같은 그래픽 데이터베이스는 이 모든 오버헤드를 피하고 복잡한 관계를 인코딩하고 쿼리할 수 있습니다.
Neo4j는 Neo Technology에서 개발했습니다. Java 및 Scala로 작성되었으며 무료 커뮤니티 버전과 엔터프라이즈 버전 모두에서 사용할 수 있습니다. Neo4j는 Cypher라는 자체 쿼리 언어를 사용하지만 쿼리는 다른 스타일로 작성할 수 있습니다.
이 튜토리얼은 Ubuntu 22.04 서버에 Neo4j를 설치하고 구성하는 방법을 알려줍니다.
전제 조건
-
A server running Ubuntu 22.04 with a minimum of 1 CPU core and 2 GB of memory. You will need to upgrade the server as per requirements.
-
A non-root user with sudo privileges.
-
Make sure everything is updated.
-
$ sudo apt update
-
Install basic utility packages. Some of them may already be installed.
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
1단계 - Neo4j 설치
Neo4j를 설치하는 첫 번째 단계는 GPG 키를 추가하는 것입니다.
$ curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
시스템 APT 소스 디렉토리에 Neo4j 리포지토리를 추가합니다.
$ echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable latest" | sudo tee -a /etc/apt/sources.list.d/neo4j.list
다음 주 버전으로 업그레이드하는 위험을 방지하려면 위의 명령에서 latest
대신 필요한 주 버전과 부 버전을 지정할 수 있습니다.
다음 명령은 Neo4j 5.x 리포지토리를 추가합니다. 즉, 6.x 버전이 출시될 때마다 업그레이드하지 않아도 됩니다.
$ echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 5" | sudo tee -a /etc/apt/sources.list.d/neo4j.list
시스템 저장소 목록을 업데이트합니다.
$ sudo apt update
설치할 수 있는 Neo4j 버전을 나열합니다.
$ apt list -a neo4j Listing... Done neo4j/stable 1:5.3.0 all neo4j/stable 1:5.2.0 all neo4j/stable 1:5.1.0 all
Neo4j 커뮤니티 에디션을 설치합니다.
$ sudo apt install neo4j
다음 명령을 사용하여 특정 버전을 설치할 수 있습니다.
$ sudo apt install neo4j=1:5.3.0
버전 관리에 대한 Debian 정책에 따라 버전에는 epoch 버전 구성 요소(1:)가 포함되어 있습니다.
Neo4j는 필요한 JDK 버전을 자동으로 설치합니다.
Neo4j 서비스를 활성화합니다.
$ sudo systemctl enable neo4j
Neo4j 서비스를 시작합니다.
$ sudo systemctl start neo4j
Neo4j 서비스의 상태를 확인합니다.
$ sudo systemctl status neo4j ? neo4j.service - Neo4j Graph Database Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2023-01-21 20:50:52 UTC; 33s ago Main PID: 5241 (java) Tasks: 72 (limit: 1030) Memory: 399.3M CPU: 20.350s CGroup: /system.slice/neo4j.service
2단계 - 연결 테스트
Neo4j는 데이터 작업을 위해 Cypher Shell을 사용합니다.
사이퍼 셸에 연결합니다.
$ cypher-shell
사용자 이름과 암호를 묻는 메시지가 나타납니다. 기본 사용자 이름과 비밀번호는 neo4j
입니다. 새 암호를 선택하라는 메시지가 표시됩니다.
username: neo4j password: Password change required new password: confirm password: Connected to Neo4j using Bolt protocol version 5.0 at neo4j://localhost:7687 as user neo4j. Type :help for a list of available commands or :exit to exit the shell. Note that Cypher queries must end with a semicolon. >
이로써 Neo4j DBMS에 성공적으로 연결되었음을 확인할 수 있습니다.
:exit
를 입력하여 셸을 종료합니다.
> :exit Bye!
3단계 - 원격 액세스를 위한 Neo4j 구성
프로덕션 환경의 경우 원격 호스트의 연결을 수락하려면 Neo4j를 확인해야 할 수 있습니다. 기본적으로 Neo4j는 localhost
의 연결만 허용합니다.
구성 파일을 편집하여 원격 호스트의 연결을 수락하도록 Neo4j를 구성할 수 있습니다. Neo4j는 /etc/neo4j/neo4j.conf
파일에 설정을 저장합니다. 편집을 위해 엽니다.
$ sudo nano /etc/neo4j/neo4j.conf
주석 처리된 줄 #dbms.default_listen_address=0.0.0.0
을 찾아 선행 해시를 제거하여 주석 처리를 해제합니다.
. . . #***************************************************************** # Network connector configuration #***************************************************************** # With default configuration Neo4j only accepts local connections. # To accept non-local connections, uncomment this line: server.default_listen_address=0.0.0.0 . . .
Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.
기본적으로 0.0.0.0
값은 Neo4j를 localhost를 포함하여 시스템에서 사용 가능한 모든 IPv4 인터페이스에 바인딩합니다. Neo4j를 특정 IP 주소(예: 사설 네트워크 IP)로 제한하려면 여기에서 서버의 사설 네트워크 인터페이스에 할당된 IP 주소를 지정하십시오.
IPv6 인터페이스를 사용하도록 Neo4j를 구성할 수도 있습니다. IPv4와 마찬가지로 default_listen_address
값을 Neo4j와 통신하는 데 사용할 특정 IPv6 주소로 설정할 수 있습니다. 서버의 로컬 IPv6 주소만 사용하도록 Neo4j를 제한하려면 IPv6 표기법을 사용하는 localhost에 해당하는 ::1
를 지정합니다.
IPv6 주소로 Neo4j를 구성하면 IPv6 주소를 직접 사용하여 cypher-shell에 연결할 수 없습니다. 대신 IPv6 주소로 확인되는 DNS 이름을 구성하거나 주소를 이름에 매핑하는 원격 시스템의 /etc/hosts
파일에 항목을 추가해야 합니다. 그런 다음 DNS 또는 호스트 파일 이름을 사용하여 원격 시스템에서 IPv6을 사용하여 Neo4j에 연결할 수 있습니다.
예를 들어 2001:db8::1
과 같은 IPv6 주소가 있는 Neo4j 서버는 원격 연결 시스템에 /etc/hosts
가 있어야 합니다. 아래와 같이 입력합니다.
2001:db8::1 your_hostname
그런 다음 아래와 같이 지정한 이름을 사용하여 원격 시스템에서 서버에 연결할 수 있습니다.
$ cypher-shell -a 'neo4j://your_hostname:7687'
Neo4j가 ::1의 IPv6 로컬 호스트 주소를 사용하도록 제한하는 경우 /etc/hosts
에서 미리 구성된 ip6-localhost 이름을 사용하여 Neo4j 서버 자체에서 로컬로 연결할 수 있습니다. 아래에 표시된 파일.
$ cypher-shell -a 'neo4j://ip6-localhost:7687'
연결 URI로 cypher-shell
을 호출하면 평소와 같이 사용자 이름과 암호를 입력하라는 메시지가 표시됩니다.
4단계 - 방화벽 액세스(UFW) 구성
원격 연결을 활성화하면 방화벽을 사용하여 Neo4j가 연결할 수 있는 신뢰할 수 있는 시스템의 연결만 제한하도록 제한할 수 있습니다.
Neo4j는 내장 HTTP 인터페이스용 포트 7474에 하나, 포트 7687에 기본 볼트 프로토콜 등 두 개의 네트워크 소켓을 생성합니다.
우분투 22.04는 기본적으로 복잡하지 않은 방화벽(UFW)을 사용합니다.
다음 명령을 사용하여 신뢰할 수 있는 원격 호스트가 IPv4를 사용하여 bolt
인터페이스에 액세스할 수 있도록 방화벽을 구성합니다.
$ sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp
203.0.113.1
값 대신 신뢰할 수 있는 원격 시스템의 IP 주소를 대체하십시오. 마찬가지로 다음 명령을 사용하여 전체 네트워크 범위를 허용할 수 있습니다.
$ sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp
192.0.2.0/24
값 대신 실제 네트워크를 대체하십시오.
IPv6을 사용하여 원격 호스트에 대한 액세스를 허용하려면 다음 명령을 사용할 수 있습니다.
$ sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp
2001:DB8::1/128
값 대신 신뢰할 수 있는 시스템 IPv6 주소를 대체하십시오.
IPv4와 마찬가지로 다음 명령을 사용하여 IPv6 주소 범위를 허용할 수 있습니다.
$ ufw allow from 192.0.2.0/24 to any port 7687 proto tcp
다시 강조 표시된 2001:DB8::/32 네트워크 범위 대신 신뢰할 수 있는 네트워크 범위를 대체합니다.
변경 사항을 적용하려면 방화벽을 다시 로드하십시오.
$ sudo ufw reload
방화벽의 상태를 확인하십시오.
$ sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 7687/tcp ALLOW 203.0.113.1
5단계 - Neo4j 사용
cypher-shell
도구를 사용하여 Neo4j에 연결합니다. 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.
$ cypher-shell
원격 액세스를 위해 Neo4j를 구성한 경우 다음 명령을 사용하여 원격 시스템에서 Neo4j에 연결합니다.
$ cypher-shell -a 'neo4j://203.0.113.1:7687'
여기서 203.0.113.1
은 Neo4j 서버의 IP 주소입니다.
IPv6를 사용하는 경우 3단계에서 설명한 이름의 /etc/hosts
항목이 있는지 확인합니다. 그런 다음 다음과 같이 Neo4j 서버에 연결합니다.
$ cypher-shell -a 'neo4j://your_hostname:7687'
your_hostname
이 원격 시스템 /etc/hosts
파일의 Neo4j 서버 IPv6 주소에 매핑되는지 확인합니다.
Slite
라는 노드와 작성자 이름을 Neo4j에 추가해 보겠습니다. 다음 명령은 이름이 Navjot Singh
인 Slite
유형의 노드를 생성합니다.
> CREATE (:Slite {name: 'Navjot Singh'});
다음과 같은 결과가 표시됩니다.
0 rows ready to start consuming query after 124 ms, results consumed after another 0 ms Added 1 nodes, Set 1 properties, Added 1 labels
다음으로 더 많은 직원을 추가하고 COLLEAGUE
라는 관계를 사용하여 연결합니다. 임의로 명명된 관계로 노드를 연결할 수 있습니다.
세 명의 직원을 더 추가하고 COLLEAGUE
관계를 사용하여 연결합니다.
> CREATE (:Slite {name: 'Sammy'})-[:COLLEAGUE]-> (:Slite {name: 'Peter Jack'})-[:COLLEAGUE]-> (:Slite {name: 'Chris Rock'});
비슷한 출력을 얻을 수 있습니다.
0 rows ready to start consuming query after 72 ms, results consumed after another 0 ms Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
이제 몇 가지 관계를 만들어 보겠습니다.
Peter와 Chris는 같은 부서에서 일하고 있고 노드와 같은 속성을 가지고 있기 때문에 이름 컬럼으로 관계를 생성할 것입니다.
> MATCH (a:Slite),(b:Slite) WHERE a.name = 'Peter Jack' AND b.name = 'Chris Rock' CREATE (a)-[r:DEPARTMENT { name: 'Designers' }]->(b) RETURN type(r), r.name; +----------------------------+ | type(r) | r.name | +----------------------------+ | "DEPARTMENT" | "Designers" | +----------------------------+ 1 row ready to start consuming query after 60 ms, results consumed after another 17 ms Created 1 relationships, Set 1 properties
이제 Sammy와 Peter는 같은 프로젝트에서 작업하고 있으므로 그 사이에 또 다른 연결을 만들어 보겠습니다.
> MATCH (a:Slite), (b:Slite) WHERE a.name = 'Peter Jack' AND b.name = 'Sammy' CREATE (a)-[r:PROJECT { name: 'Test Project 1' }]->(b) RETURN type(r), r.name; +------------------------------+ | type(r) | r.name | +------------------------------+ | "PROJECT" | "Test Project 1" | +------------------------------+ 1 row ready to start consuming query after 132 ms, results consumed after another 12 ms Created 1 relationships, Set 1 properties
다음 쿼리를 사용하여 이 모든 데이터를 표시해 보겠습니다.
> MATCH (a)-[r]->(b) RETURN a.name,r,b.name ORDER BY r; +-------------------------------------------------------------------+ | a.name | r | b.name | +-------------------------------------------------------------------+ | "Sammy" | [:COLLEAGUE] | "Peter Jack" | | "Peter Jack" | [:COLLEAGUE] | "Chris Rock" | | "Peter Jack" | [:DEPARTMENT {name: "Designers"}] | "Chris Rock" | | "Peter Jack" | [:PROJECT {name: "Test Project 1"}] | "Sammy" | +-------------------------------------------------------------------+ 4 rows ready to start consuming query after 99 ms, results consumed after another 5 ms
결론
이것으로 Ubuntu 22.04 서버에 Neo4j를 설치하고 구성하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.