Neo4j 개요 - 주요 특징, 운영 환경 등 소개

Neo4j 개요

Neo4j(네오포제이)란, 그래프 구조의 데이터 모델(1)을 다루는 데이터베이스 관리 시스템(DBMS)이며, 그래프 데이터베이스(2)로 분류된다.

Neo4j는 그래프 데이터베이스 중에서 가장 많이 사용되고 있는 제품 중 하나로 미국의 Neo Technology사에 의해 개발되고 있다. 개발 언어는 Java이다.
Neo4j는 RDBMS의 성능 문제를 해결하기 위해 2000년부터 개발이 시작되었으며, 2002년에 초기 버전이 출시되고, 2007년에 오픈 소스화, 2010년에 버전 1.0이 출시되었다.

Neo4j는 스키마없는 데이터 구조, 개발의 용이성, 노드별 ACID 트랜잭션 등이 평가되고 있으며, 그래프 데이터에 적합한 데이터베이스 아키텍처로서 전세계에서 주목을 받고 있다.

미국 IDG 산하의 IT 정보 사이트 InfoWorld가 주최하는 뛰어난 하드웨어, 소프트웨어, 개발 툴, 클라우드 서비스를 표창하는 “InfoWorld’s 2014 Technology of the Year Award"에서 선출되는 등, 이미 럽과 미국에서는 높은 평가를 얻고 있는 Neo4j이다. 향후 한국에서도 본격적인 도입이 진행될 것으로 기대되고 있다.

Neo4j의 주요 특징

Neo4j의 주요 특징은 다음과 같다.

  • 강력한 트랜잭션
    • Neo4j는 ACID 준수(원자성, 일관성, 독립성, 지속성) 트랜잭션을 지원하며 항상 데이터 무결성을 보장한다.
  • 유연한 스키마
    • 인 Neo4j는 속성 그래프 모델이라고 불리는 모델링 기법을 기반으로 하며 자연에 가까운 형태로 데이터를 모델링할 수 있다.
  • 고성능 검색
    • Neo4j는 초당 수백만 단위의 데이터를 검색하는 데 가장 빠른 index-free adjacency (그래프와 같이 서로 점과 선으로 연결된 데이터의 특성) 따라서 데이터 세트의 볼륨이나 복잡성에 관계없이 일정한 성능을 유지할 수 있다.
  • 쿼리 언어
    • Neo4j는 Cypher라는 선언형 그래프 쿼리 언어를 사용한다. Cypher는 직관적으로 이해하고 습득할 수 있으며 SQL보다 코드 양을 줄일 수 있다.
  • 주요 언어와 프레임워크에 대응
    • Neo4j는 Java, C#, Python, JavaScript 등의 주요 언어용 드라이버를 공식적으로 지원하고 있다. 또한 Neo4j 커뮤니티는 Spring Data, Django ORM, Laravel, JDBC 등의 주요 프레임 워크를 지원한다.
  • 클라우드 환경 지원
    • Neo4j는 Amazon Web Services(AWS), Microsoft Azure, Google Cloud Platform 등의 클라우드 환경에서도 사용할 수 있다. 또한 공식 Docker 이미지를 사용하면 쉽게 도입할 수 있다.
  • 멀티 데이터베이스
    • Neo4j 4.0부터는 클러스터별로 여러 데이터베이스를 처리 할 수 있는 멀티 데이터베이스를 지원한다.
  • 리액티브 아키텍처
    • Neo4j 4.0부터는 리액티브 아키텍처를 도입하여 응답성, 탄력성, 견고성을 높였다.

관계형 데이터베이스와 비교

관계형 데이터베이스 Neo4j
데이터 스토리지 데이터는 미리 정의된 행과 열이 있는 테이블로 분할되므로 쿼리 효율성을 저하시킨다. index-free adjacency가 있는 그래프 스토리지 구조는 트랜잭션 및 관계 처리를 보다 빠르다.
데이터 모델 데이터 모델은 논리 모델에서 물리적 모델로 변환되어야 한다. 데이터 유형과 소스를 미리 알아야 하므로 변경하는 데 비용이 많이 든다. 데이터 모델은 논리 모델과 물리적 모델이 일치하고 유연성이 있다. 데이터 유형과 소스는 언제든지 추가 및 변경할 수 있으며 개발 기간이 크게 단축된다.
쿼리 성능 데이터 처리 성능은 조인(또는 관계)의 수와 깊이에 영향을 받는다. 그래프 처리는 관계의 수와 깊이에 관계없이 대기 시간이 낮고 실시간 성능을 보장한다.
쿼리 언어 SQL: 조인 수가 많을수록 복잡해지는 쿼리 언어. Cypher: 관계 쿼리를 설명하는 가장 효율적이고 표현력 있는 방법을 제공하는 그래프 쿼리 언어.
트랜잭션 지원 ACID 트랜잭션 지원. ACID 트랜잭션 지원.
데이터 센터 효율 서버 통합은 가능하지만 스케일 업에는 비용이 많이 듭니다. 또한 스케일 아웃은 구매, 에너지 사용 및 관리 시간 측면에서 비용이 많이 든다. 데이터와 관계는 함께 저장되어 복잡성과 규모가 커짐에 따라 성능이 향상된다. 이렇게하면 서버 통합과 하드웨어의 매우 효율적인 사용이 가능하다.

Neo4j 사용 사례

  • 보안 강화
    • 기존의 무단 액세스 검출은 사용자 계정, IP 주소, 이용 장치 등 개별 데이터 포인트에 대해 검출을 실시하고 있다. Neo4j는 개별 데이터 포인트의 관계에 대한 탐지를 수행 할 수 있기 때문에 기존의 탐지 방법은 탐지 할 수 없었던 무단 액세스를 탐지 할 수 있다.
  • 향상된 검색 기능
    • 그래프 기반 검색 기능을 활용하면 키워드 검색의 경우 추가 키워드를 입력하지 않고 관련 정보를 볼 수 있다.

Neo4j의 운영 환경

Neo4j는 다음 환경에서 작동한다.

Neo4j 4.x의 경우에는 아래와 같다.

지원되는 플랫폼

물리적, 가상 및 컨테이너에 관계없이 x86_64 아키텍처 시스템에서 지원된다.

하드웨어

개인용 및 소프트웨어 개발의 경우

구분 사양
CPU 최소 Intel Core i3. Intel Core i7 권장
메모리 최소 2GB. 16GB 이상 권장
스토리지 최소 10GB SATA. SATAExpress 또는 NVMe를 탑재한 SSD를 추천.

클라우드 환경의 경우

구분 사양
CPU 최소 2vCPU. 16개 이상 권장(가능하면 Xeon processor)
메모리 최소 2GB. 크기는 워크로드에 따라 다릅니다. 경우에 따라 사용하는 그래프의 크기에 맞는 메모리를 갖춘 인스턴스를 사용하는 것이 좋다.
스토리지 최소 10GB 블록 스토리지. NVMe SSD 권장. 스토리지 크기는 데이터베이스의 크기에 따라 다르다.

온프레미스 환경 서버의 경우

구분 사양
CPU Intel Xeon processor
메모리 최소 8GB. 크기는 워크로드에 따라 다르다. 경우에 따라 사용하는 그래프의 크기에 맞는 메모리를 갖춘 인스턴스를 사용하는 것이 좋다.
스토리지 최소 SATA 7.2K RPM 6Gbps 하드 드라이브. NVMe SSD 권장. 스토리지 크기는 데이터베이스의 크기에 따라 다르다.

소프트웨어

Neo4j 인스턴스를 실행하려면 호환되는 Java 가상 머신(JVM)이 설치되어 있어야 한다. Neo4j 3.x는 Java 8이 필요하며, Neo4j 4.x에서는 Java 11이 필요하다.

개인 사용 및 소프트웨어 개발의 경우

OS 종류 지원되는 JDK
MacOS 10.14 이상
우분투 데스크톱 16.04 이상
데비안 9 이상 OpenJDK11, OracleJDK11, ZuluJDK11
SuSE 15 이상 OracleJDK11
Windows10 OracleJDK11, ZuluJDK11

클라우드 환경의 경우

OS 종류 지원되는 JDK
Ubuntu Server 16.04 이상 OpenJDK11, OracleJDK11, ZuluJDK11
Red Hat Enterprise Linux Server 7.5 이상 Red Hat OpenJDK11, OracleJDK11, ZuluJDK11
CentOS Server 7.7 OpenJDK11
Amazon Linux 2 AMI Amazon Corretto 11, OpenJDK11, OracleJDK11
Windows Server 2016 이상 OracleJDK11, ZuluJDK11

Neo4j 라이센스

Neo4j의 커뮤니티 버전 라이센스는 GNU General Public License(GPLv3.0) 이다. 소프트웨어의 복사나 배포, 소스 코드의 공개를 원칙적으로 소스 코드의 자유로운 변경도 인정되고 있다.

Neo4j의 참고 정보


  1. 그래프 구조의 데이터 모델이란, 최소 단위인 “노드"와, 노드간의 “관계성"을 가지는 데이터 구조를 말한다. ↩︎

  2. 그래프 데이터베이스는 NoSQL의 일종이며, 그래프 이론을 기초로 노드 및 노드간의 관계성을 다룰 수 있다. 그래프 데이터베이스는 데이터를 테이블 형식으로 저장하는 관계형 데이터베이스와 달리 복잡한 관계를 기반으로 데이터 처리가 가능한 것이 큰 특징이다. 또한 스키마(테이블 정의)가 필요하지 않은 것도 특징이다. 노드의 속성을 복잡한 계층에서도 관리할 수 있고, 쿼리의 작성이 용이하여 GUI 도구 사용이 좋다는 점 등이 있어서 최근 주목을 받고 있다. ↩︎




최종 수정 : 2024-01-18