프로젝트 목록으로
프로젝트 상세

Lynxes: 그래프 분석 엔진 프로젝트

Arrow 기반 컬럼 메모리와 그래프 네이티브 탐색 구조를 결합해 Python에서 사용할 수 있는 고성능 그래프 분석 엔진을 설계한 프로젝트입니다.

유형 그래프 시스템 엔진 프로젝트
연도 2026
주요 역할 ML 엔지니어
역할 ML 엔지니어, 라이브러리 개발자
그래프 네이티브 깊이를 가진 데이터 시스템 스페셜리스트 구현 완료 Graph AnalyticsApache ArrowCSRRustLazy ExecutionPyO3

그래프 데이터를 1급 실행 모델로 다루는 시스템 설계와 구현 역량을 보여줍니다.

structuredgraphhybrid
dataexperimentevaluation
그래프 엔진 아키텍처 설계CSR 탐색 구조 구현Python 연동 레이어 구축
문제

기존 Python 그래프 라이브러리나 범용 데이터프레임 래퍼만으로는 메모리 효율, 탐색 성능, 지연 실행 기반 최적화를 함께 만족시키기 어려웠습니다.

접근

GraphFrame이 Arrow RecordBatch를 직접 소유하도록 설계했습니다.

결과

Arrow 컬럼 메모리 모델과 CSR 기반 그래프 탐색, lazy collect 실행 흐름을 갖춘 그래프 분석 엔진의 기반을 마련했습니다.

아키텍처

Arrow RecordBatch, CSR 인덱스, lazy logical plan, Rust 알고리즘, Python 바인딩을 결합한 그래프 분석 엔진 구조입니다.

Arrow RecordBatch

노드와 엣지를 담는 컬럼 지향 메모리 구조

GraphFrame

그래프 데이터를 소유하는 핵심 객체

CSR Index

O(degree) 이웃 탐색을 위한 인접성 구조

LogicalPlan

lazy query pipeline

Python Bindings

PyO3 기반 사용자 표면

성과 지표
O(degree) CSR 기반 인접성 인덱스
Arrow RecordBatch 기반 컬럼 지향 저장
Lazy collect LogicalPlan 중심 실행 흐름

배경

Lynxes는 대규모 그래프 데이터를 더 빠르고 구조적으로 다루기 위해 직접 설계한 그래프 분석 엔진 프로젝트입니다. 저는 이 프로젝트에서 단순히 기존 라이브러리를 감싸는 방식이 아니라, Apache Arrow 기반 컬럼 저장과 그래프 전용 인덱스를 처음부터 결합한 엔진을 Rust로 구현하는 데 집중했습니다.

문제

기존 그래프 도구들은 사용성은 좋지만 내부적으로 범용 자료구조나 래퍼 계층에 의존하는 경우가 많아, 그래프 탐색 성능과 메모리 효율, 그리고 분석 파이프라인의 지연 실행을 동시에 만족시키기 어려웠습니다. 특히 이웃 탐색이 그래프 구조의 핵심인데도 선형 스캔이나 느슨한 추상화에 기대는 경우가 많아, 그래프를 진짜 1급 구조로 다루는 엔진이 필요했습니다.

구현

저는 Lynxes의 핵심 데이터 레이아웃부터 직접 설계했습니다. 노드와 엣지는 Arrow RecordBatch 기반으로 보관하고, EdgeFrame에는 CSR 기반 인접성 인덱스를 결합해 이웃 조회가 O(degree)로 이뤄지도록 구성했습니다. 실행 모델 역시 eager 방식이 아니라 lazy execution을 기본으로 두어, 사용자가 질의를 연결해 LogicalPlan을 만들고 실제 계산은 .collect() 시점에만 수행되도록 설계했습니다. 여기에 Rust로 그래프 알고리즘과 실행 엔진을 구현하고, Python 사용성을 위해 PyO3 바인딩과 입출력 계층까지 함께 구축했습니다.

결과

Lynxes는 Arrow의 zero-copy 지향 메모리 구조와 CSR 기반 그래프 탐색을 결합한 그래프 네이티브 엔진으로 발전했습니다. 이를 통해 단순 데이터프레임 래핑이 아닌, 그래프 구조 자체를 중심에 둔 분석 환경의 기반을 마련했고, 고성능 Rust 엔진과 Python 인터페이스를 함께 설계하며 제품형 그래프 시스템을 끝단까지 만드는 경험을 축적했습니다.