웹사이트 검색

Ubuntu 22.04에서 Neo4j 그래프 데이터베이스를 설치하고 구성하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - Neo4j 설치
  3. 2단계 - 연결 테스트
  4. 3단계 - 원격 액세스를 위한 Neo4j 구성\n
  5. 4단계 - 방화벽 액세스(UFW) 구성\n
  6. 5단계 - Neo4j 사용
  7. 결론

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 SinghSlite 유형의 노드를 생성합니다.

> 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를 설치하고 구성하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.