프로그래밍/코딩 공부

GraphQLite: SQLite에 그래프 데이터베이스 기능을 더하다

Tech코알라 2026. 1. 19. 10:52

블로그를 시작한지 얼마되지 않은 것 같은데 벌써 60번째 글을 쓰게되었습니다. 앞으로도 열심히 글을 작성하도록 하겠습니다! 이번 주제는 Geek News에 올라온 흥미로운 도구에 대한 내용입니다. SQLite를 사용하면서 그래프 데이터를 다루고 싶다면? GraphQLite가 그 해답이 될 수 있습니다. 이 오픈소스 프로젝트는 SQLite에 그래프 데이터베이스 기능을 추가하는 확장 모듈로, Cypher 쿼리 언어를 사용해 노드와 관계를 표현할 수 있게 해줍니다.

 

왜 GraphQLite인가?

 

일반적으로 그래프 데이터베이스를 사용하려면 Neo4j 같은 별도의 서버를 구축해야 합니다. 하지만 GraphQLite는 SQLite의 단순함을 그대로 유지하면서 그래프 쿼리 기능을 제공합니다. 단일 파일 데이터베이스, 별도 설정 없음, 서버 불필요 등 SQLite의 장점을 그대로 살리면서 관계형 데이터를 표현하는 Cypher의 강력함을 결합했습니다.

로컬 개발이나 학습 목적, 또는 별도의 데이터베이스 서버 없이 그래프 쿼리가 필요한 애플리케이션에 특히 유용합니다.

 

설치 및 시작

 

소스에서 빌드하려면 gcc, bison, flex가 필요합니다:

make extension

빌드가 완료되면 SQLite에서 바로 로드할 수 있습니다:

 
.load build/graphqlite.dylib

-- 노드 생성
SELECT cypher('CREATE (a:Person {name: "Alice", age: 30})');
SELECT cypher('CREATE (b:Person {name: "Bob", age: 25})');

-- 관계 생성
SELECT cypher('
    MATCH (a:Person {name: "Alice"}), (b:Person {name: "Bob"})
    CREATE (a)-[:KNOWS]->(b)
');

-- 그래프 쿼리
SELECT cypher('MATCH (a:Person)-[:KNOWS]->(b) RETURN a.name, b.name');

 

Python에서 사용하기

 

Python 바인딩이 제공되어 pip으로 간단히 설치할 수 있습니다:

pip install graphqlite
from graphqlite import Connection

conn = Connection(":memory:")
conn.cypher("CREATE (n:Person {name: 'Alice'})")
for row in conn.cypher("MATCH (n:Person) RETURN n.name"):
    print(row[0])

 

Rust 바인딩도 제공됩니다.

 

Cypher 지원 범위

 

GraphQLite는 Cypher의 상당 부분을 지원합니다. 노드 패턴, 관계, 가변 길이 경로, 양방향 매칭 등의 패턴을 사용할 수 있고, MATCH, CREATE, MERGE, SET, DELETE, WITH, RETURN 등의 주요 절을 지원합니다. 집계 함수, 리스트 연산, CASE 표현식, 경로 함수 등도 사용 가능합니다.

 

내장 그래프 알고리즘

 

PageRank와 레이블 전파를 통한 커뮤니티 탐지 알고리즘이 내장되어 있습니다:

-- PageRank 실행
SELECT cypher('RETURN pageRank(0.85, 20)');

-- 커뮤니티 탐지
SELECT cypher('RETURN labelPropagation(10)');

-- 특정 노드의 커뮤니티 확인
SELECT cypher('MATCH (n:Person) RETURN n.name, communityOf(n)');

결과는 JSON 형태로 반환되어 SQLite의 json_each() 함수와 함께 사용할 수 있습니다.

 

성능

 

최대 50만 노드, 500만 엣지 규모의 그래프에서 테스트되었습니다. 단순 탐색은 1-2ms, 집계는 500ms 이하, 그래프 알고리즘은 반복 횟수에 따라 1-5초 정도 소요됩니다.

 

저장 방식

 

GraphQLite는 타입이 지정된 속성 그래프 모델을 사용하며, 일반 SQLite 테이블에 데이터를 저장합니다. 필요한 경우 순수 SQL로도 데이터를 조회할 수 있습니다.

 

마무리

 

GraphQLite는 SQLite의 단순함과 그래프 데이터베이스의 표현력을 결합한 흥미로운 프로젝트입니다. 소규모 그래프 데이터를 다루거나, 프로토타이핑, 학습 목적으로 활용하기 좋으며, MIT 라이선스로 공개되어 있어 자유롭게 사용할 수 있습니다.