피드로 돌아가기
I Built a TypeScript Object-Graph Database Because I Got Tired of Flattening Everything
Dev.toDev.to
Database

TypeScript 객체 그래프 구조를 보존하는 임베디드 DB GraphVault 설계

I Built a TypeScript Object-Graph Database Because I Got Tired of Flattening Everything

Nicolai Kilian2026년 5월 14일6advanced

Context

관계형 데이터베이스의 Table 기반 모델과 TypeScript의 Rich Domain Model 간의 구조적 불일치로 인한 데이터 변환 비용 발생. ORM과 DTO 레이어의 복잡도로 인해 애플리케이션 상태와 저장소 모델 간의 간극이 심화되는 한계 직면.

Technical Solution

  • 객체 그래프 자체를 영속화하여 애플리케이션의 자연스러운 데이터 형상을 유지하는 Embedded Storage 구조 설계
  • Shared References 및 Cyclic Graph를 지원하여 데이터 로드 후에도 Object Identity를 보존하는 메커니즘 구현
  • WAL(Write-Ahead Logging) 기반의 복구 시스템과 Optimistic/Pessimistic Locking을 통한 데이터 정합성 확보
  • Fencing Tokens 도입을 통해 공유 저장소 환경에서의 동시성 제어 및 충돌 방지
  • GVQL(GraphVault Query Language)을 통한 그래프 패턴 기반의 필터링, 조인 및 배치 업데이트 기능 제공
  • Schema Migration 도구를 통한 버전 관리와 Up/Down 마이그레이션 체계 구축

1. 도메인 모델의 복잡도가 매우 높고 연결성이 강한 경우 RDBMS의 Mapping 비용을 계산해볼 것

2. Local-first 또는 Embedded 환경에서 Object Identity 보존이 필수적인지 검토할 것

3. 그래프 구조 저장 시 단순 직렬화를 넘어 WAL 및 Locking 전략이 포함된 정합성 보장책을 마련할 것

4. 복잡한 객체 그래프를 관리하기 위한 전용 쿼리 언어(GVQL 등)와 시각화 도구의 필요성을 고려할 것

원문 읽기