DBMS/활용 사례

가장 인기 있는 5가지 그래프 DB 쿼리 언어

(주)비트나인 2023. 9. 3. 14:11

가장 인기 있는 5가지 그래프 DB 쿼리 언어를 소개합니다

 

그래프 데이터 관리에 사용되는 쿼리 언어를 그래프 쿼리 언어(GQL)라고 합니다. 그래프 쿼리 언어는 그래프로 모델링 된 데이터를 추출하고 검색할 때 사용됩니다. 

 

다음은 그래프로 정보를 풀 수 있는 방법을 제공하며 세계적으로 널리 사용되는 그래프 DB 쿼리 언어들에 대해 알아보겠습니다. 또한 각 인기 있는 쿼리 언어들의 장단점을 자세히 살펴보겠습니다. 

 

AQL

AQL은 “ArangoDB Query Language”의 약어로, 사용자가 ArangoDB에 저장된 데이터를 검색하고 수정할 수 있게 해 줍니다. AQL은 영어 키워드를 사용하기 때문에 사람이 읽을 수 있으며, 선언적 쿼리이므로 어떤 결과를 얻어야 하는지는 설명하지만, 어떻게 얻어야 하는지에 대해서는 설명하지 않습니다. 

 

AQL의 장점

1) AQL은 복잡한 계산을 할 수 있도록 ANALYZER(), BOOST(), EXISTS(), 등과 같은 다양한 함수를 지원합니다. 

 

2) 개발자가 강력한 애플리케이션을 개발하고 데이터를 데이터베이스에 기본적으로 매핑하도록 도와줍니다.

 

3) 아키텍처 설계자가 훨씬 적은 노력으로 아키텍처를 확장시킬 수 있고, 변화하는 요구 사항에 맞게 조정하는 데 도움이 되는 유연한 언어입니다.

 

AQL의 단점

1) 컬렉션이나 데이터베이스 생성 및 삭제와 같은 데이터 정의 작업을 지원하지 않습니다.

 

2) 초기 실행 계획에 4,000개 이상의 실행 노드를 가질 수 없습니다.

 

3) 1,000개 이상의 결과 레지스터를 사용할 수 없습니다.

 

AQL을 지원하는 그래프 DB

ArangoDB



Cypher

Cypher는 그래프에서 데이터를 검색할 수 있는 그래프 DB 쿼리 언어입니다. 직관적이고 다른 언어와 유사하여 배우기 가장 쉬운 언어입니다. Cypher는 Neo4j가 개발한 쿼리 언어이며, 패턴을 기반으로 하고 관계와 패턴을 시각적으로 일치시키는 방법을 제공한다는 점에서 독특함을 자랑합니다. Object Graph Mappers(OGM)를 사용하여 그래프의 관계와 노드를 도메인 모델의 참조 및 객체에 매핑할 수 있습니다. 

 

Cypher의 장점

1) Cypher 쿼리 언어는 간결하고 배우기 쉽습니다. 사용자가 직관적이고 표현력 있는 쿼리를 작성하여 결과를 빠르게 조회할 수 있도록 도와줍니다.

 

2) 데이터가 풍부하고 안정성과 안전성이 보장됩니다. 애플리케이션 개발에 적합합니다.

 

3) ASCII-Art 구문을 사용하여 그래프의 노드 및 관계 패턴과 일치하며 시각적이고 논리적입니다.

 

Cypher의 단점

1) Neo4j Cypher는 날짜 데이터 유형을 내부적으로 지원하지 않습니다.

 

2) 많은 조인이나 집계가 필요하지 않은 단순한 데이터 모델에는 성능적인 이점이 없습니다.

 

3) Write 부하가 많은 경우 Write 스케일링이 잘 되지 않습니다. 

 

Cypher를 지원하는 그래프 DB

Neo4j, AgensGraph, Apache AGE, RedisGraph, Memgraph



GraphQL

GraphQL은 클라이언트 측 애플리케이션에서 데이터베이스를 쿼리 하는 것을 목표로 하는 REST 기반 아키텍처의 최신 대안입니다. 이는 백엔드에서 API에 대한 데이터를 클라이언트에 표시하는 방법을 지정합니다. 또한 클라이언트가 정확한 데이터를 요청할 수 있도록 함으로써 유연성을 제공하고 클라이언트 - 서버 상호 작용을 개선시킵니다. 

 

GraphQL의 장점

1) GraphQL은 복잡한 마이크로서비스에 가장 적합하며, API 뒤에 여러 시스템을 통합할 수 있습니다. 서버는 기존 시스템에서 데이터를 가져와 GraphQL 응답 형식으로 패키징 합니다. 따라서 방대한 크기로 인해 처리 및 유지 관리가 어려운 타사 API 및 레거시 인프라에 큰 이점이 있습니다. 또한 GraphQL은 여러 마이크로서비스를 하나의 GraphQL 스키마로 병합하여 여러 마이크로서비스 간의 통신을 처리합니다.

 

2) REST 응답의 데이터가 적거나 충분하지 않아서 다른 요청이 필요한 경우가 있습니다. GraphQL은 한 번의 요청으로 필요한 데이터를 가져와서 이 문제를 해결합니다.

 

3) GraphQL은 API 변경에 따라 문서를 동기화합니다. API가 코드와 긴밀하게 연결되어 있기 떄문에 쿼리, 필드 또는 유형이 변경되면 문서도 함께 변경됩니다. 

 

GraphQL의 단점

1) 클라이언트가 한 번에 너무 많은 중첩된 필드를 요청할 때 GraphQL 쿼리에서 성능 문제가 발생할 수 있습니다. 따라서 복잡한 쿼리에는 REST API를 사용하는 것이 좋습니다.

 

2) 파일 업로드 기능은 파일을 이해하지 못하기 때문에 GraphQL 사양에 포함되어 있지 않습니다.

 

3) 동일한 엔티티에서 작동하더라도 각 쿼리가 다를 수 있기 떄문에 GraphQL에서 단순화된 캐시를 구현하는 것이 어렵습니다. 

 

GraphQL을 지원하는 그래프 DB

Hasura, Dgraph



Gremlin

Gremlin은 많은 그래프 데이터베이스 솔루션들이 채택하고 있는 Apache Tinkerpop의 그래프 트래버스 언어입니다. 경로 지향 언어이기 때문에 다음과 같은 용도로 사용됩니다: 

 

- 그래프에서 데이터 검색

 

- 그래프 데이터 수정

 

- 복잡한 변이 연산 및 그래프 순회 표현. 개발자는 Python, Java, Javascript, Scala, Groovy 등 다양한 프로그래밍 언어로 그렘린 쿼리를 작성할 수 있음

 

Gremlin의 장점

1) Gremlin을 사용하면 그래프에서 명령형(procedural) 및 선언형(descriptive) 트래버스를 수행할 수 있습니다. 

 

2) 함수 구성 및 함수 중첩을 지원하는 모든 프로그래밍 언어로 Gremlin 트래버스를 작성할 수 있습니다. 

 

Gremlin의 단점

1) 읽기 쉽지 않은 저수준의 그래프 트래버스 언어입니다.

 

2) 패턴 매칭이 많이 필요한 복잡한 쿼리는 작성하기 어려우며, Gremlin에서 잘 작동하지 않습니다.

 

Gremlin을 지원하는 그래프 DB

Amazon Neptune, InfiniteGraph, JanusGraph, OrientDB



SPARQL

SPARQL은 “SPARQL Protocol and RDF Query Language”의 약어입니다. 사용자가 RDF에 매핑할 수 있는 데이터베이스의 정보를 쿼리 할 수 있는 쿼리 언어입니다. SPARQL에는 ASK, SELECT, CONSTRUCT, DESCRIBE의 네 가지 쿼리 유형이 있습니다. SPARQL 쿼리의 데이터는 내부적으로 주제, 술어, 객체로 구성된 트리플로 표현됩니다. 

 

SPARQL의 장점

1) SPARQL은 여러 리포지토리에서 쿼리를 연합할 수 있습니다.  

 

2) 관계형 데이터뿐만 아니라 RDF에도 접근할 수 있습니다.

 

3) SPARQL은 데이터가 교차 도메인에 있어야 하는 데이터를 통합할 수 있습니다.  

 

SPARQL의 단점

1) 읽고 이해하기 쉽지 않은 언어입니다.

 

2) 바인딩되지 않은 재귀(recursive) 쿼리를 허용하지 않습니다. 

 

3) SPARQL은 모든 데이터베이스가 따르지 않는 RDF 데이터를 위해 특별히 제작된 언어입니다. 

 

SPARQL을 지원하는 그래프 DB

Amazon Neptune, AllegroGraph, Blazegraph



결론: 각 그래프 쿼리 언어의 정리

널리 사용되는 대표적인 그래프 DB 쿼리 언어에 대한 지식을 얻으셨기를 바라며 이와 같이 마무리 하겠습니다. 각 언어에는 장단점이 있습니다. 그러나 그래프에서 데이터를 추출하는 데 사용할 수 있는 언어는 사용 가능한 데이터와 언어가 지원하는 연산에 따라 다릅니다. 언어 간에 비교를 할 수 없기에 어떤 언어가 가장 좋은지에 대해서는 알기 어렵습니다. 

 

위에 소개한 5가지 언어는 아래와 같이 다양한 영역에서 각기 다른 사용 목적이 있습니다:

 

AQL - 개발자와 아키텍트가 각각 강력한 애플리케이션과 확장 아키텍처를 개발하는 데 도움이 됩니다.

 

Cypher - 데이터 분석 및 애플리케이션 개발에 적합합니다.

 

GraphQL - 복잡한 시스템 및 마이크로서비스에 가장 적합합니다.

 

Gremlin - 사용자가 절차적 및 설명적 그래프 탐색을 수행할 수 있습니다.

 

SPARQL - 교차하는 다양한 도메인의 데이터를 통합하는 데 가장 적합합니다. 

 

 

 

 

글 : 서준섭 과장 ( 비트나인 글로벌 사업전략팀 )