데이터베이스 · 7 min read · Dec 20, 2025
우분투 22.04에 Neo4j 그래프 데이터베이스 설치 및 구성 방법

Neo4j는 데이터 관계를 생성하는 데 사용되는 그래프 데이터베이스입니다. 전통적인 데이터베이스의 데이터는 테이블과 같은 구조로 저장됩니다. 그래픽 데이터베이스는 데이터 노드 간의 관계를 기록합니다. 각 노드는 연결된 모든 다른 노드에 대한 참조를 저장합니다. 전통적인 데이터베이스는 관계 데이터를 직접 저장하지 않지만, 인덱싱의 도움으로 데이터 구조를 검색하여 연결을 파악할 수 있습니다. 이는 비용이 많이 들고 시간이 소요됩니다. Neo4j와 같은 그래픽 데이터베이스는 이러한 모든 오버헤드를 피하고 복잡한 관계를 인코딩하고 쿼리할 수 있습니다.

Neo4j는 Neo Technology에서 개발하였습니다. Java와 Scala로 작성되었으며 무료 커뮤니티 버전과 기업 버전 모두에서 사용할 수 있습니다. Neo4j는 Cypher라는 자체 쿼리 언어를 사용하지만, 다른 스타일로 쿼리를 작성할 수도 있습니다.
이 튜토리얼에서는 우분투 22.04 서버에 Neo4j를 설치하고 구성하는 방법을 배웁니다.
전제 조건
- 최소 1개의 CPU 코어와 2GB의 메모리를 갖춘 우분투 22.04 서버. 요구 사항에 따라 서버를 업그레이드해야 합니다.
- sudo 권한이 있는 비루트 사용자.
- 모든 것이 업데이트되었는지 확인하십시오.
$ sudo apt update- 기본 유틸리티 패키지를 설치합니다. 일부는 이미 설치되어 있을 수 있습니다.
$ 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
Neo4j 리포지토리를 시스템 APT의 소스 디렉토리에 추가합니다.
$ 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 정책에 따라 에포크 버전 구성 요소(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에 연결합니다.
$ 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@neo4j>
이것은 Neo4j DBMS에 성공적으로 연결되었음을 확인합니다.
shell에서 나가려면 :exit를 입력합니다.
neo4j@neo4j> :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를 시스템의 모든 사용 가능한 IPv4 인터페이스에 바인딩하며, localhost를 포함합니다. Neo4j를 특정 IP 주소로 제한하려면, 예를 들어, 개인 네트워크 IP를 지정하려면, 여기서 서버의 개인 네트워크 인터페이스에 할당된 IP 주소를 지정하십시오.
Neo4j가 IPv6 인터페이스를 사용하도록 구성할 수도 있습니다. IPv4와 마찬가지로, Neo4j와 통신하는 데 사용할 특정 IPv6 주소로 default_listen_address 값을 설정할 수 있습니다. 서버의 로컬 IPv6 주소만 사용하도록 Neo4j를 제한하려면 ::1을 지정하십시오. 이는 IPv6 표기법을 사용한 localhost에 해당합니다.
IPv6 주소로 Neo4j를 구성하면 IPv6 주소를 직접 사용하여 cypher-shell에 연결할 수 없습니다. 대신, IPv6 주소에 해결되는 DNS 이름을 구성하거나 원격 시스템의 /etc/hosts 파일에 주소를 이름에 매핑하는 항목을 추가해야 합니다. 그러면 원격 시스템에서 IPv6를 사용하여 Neo4j에 연결할 수 있습니다.
예를 들어, 2001:db8::1과 같은 IPv6 주소를 가진 Neo4j 서버는 원격 연결 시스템에 다음과 같은 /etc/hosts 항목이 필요합니다.
2001:db8::1 your_hostname
그런 다음 원격 시스템에서 다음과 같이 지정한 이름을 사용하여 서버에 연결할 수 있습니다.
$ cypher-shell -a 'neo4j://your_hostname:7687'
Neo4j의 IPv6 localhost 주소인 ::1을 사용하도록 제한하면, /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
신뢰할 수 있는 원격 시스템의 IP 주소를 203.0.113.1 값 대신 대체하십시오. 마찬가지로, 다음 명령을 사용하여 전체 네트워크 범위를 허용할 수 있습니다.
$ 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
신뢰할 수 있는 시스템의 IPv6 주소를 2001:DB8::1/128 값 대신 대체하십시오.
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 유형의 노드를 생성합니다.
neo4j@neo4j> 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 관계를 사용하여 연결합니다.
neo4j@neo4j> 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가 같은 부서에서 일하고 노드로서 동일한 속성을 가지고 있으므로, 이름 열로 관계를 생성하겠습니다.
neo4j@neo4j> 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 간의 또 다른 연결을 생성하겠습니다. 그들은 같은 프로젝트에서 작업하고 있습니다.
neo4j@neo4j> 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
다음 쿼리를 사용하여 모든 데이터를 표시해 보겠습니다.
neo4j@neo4j> 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
결론
이로써 우분투 22.04 서버에 Neo4j를 설치하고 구성하는 튜토리얼이 마무리되었습니다. 질문이 있으시면 아래 댓글에 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.