Git처럼 SQL을 버전 관리한다 — Dolt 2.0의 실무적 의미
데이터베이스 스키마와 데이터 자체를 Git처럼 브랜치, 커밋, 머지로 관리할 수 있다면 어떨까? DoltHub가 공개한 Dolt 2.0은 바로 그 개념을 현실화한 오픈소스 SQL 데이터베이스의 메이저 업데이트다. 단순한 버전 관리 기능에 그치지 않고, 실제 운영 환경에서 활용 가능한 스토리지 최적화와 데이터 타입 지원 강화가 핵심이다.
Dolt는 MySQL 호환 SQL 인터페이스를 제공하면서, 내부적으로는 Git과 유사한 DAG(방향성 비순환 그래프) 구조로 데이터 변경 이력을 추적한다. 기존 RDB에서는 "어제 배포 이전 상태로 데이터를 되돌려야 한다"는 요구가 생기면 백업 복원이나 직접 쿼리 롤백에 의존해야 했지만, Dolt에서는 dolt checkout이나 브랜치 전환으로 데이터 자체를 특정 시점으로 되돌릴 수 있다.
자동 GC와 압축 — 운영 부담의 실질적 감소
Dolt 2.0의 가장 주목할 변경점은 가비지 컬렉션(GC)과 압축이 자동화되었다는 점이다. 버전 관리 데이터베이스의 특성상, 변경 이력이 쌓일수록 참조되지 않는 청크(chunk) 데이터가 늘어나고 스토리지가 무한정 증가하는 문제가 있었다. 기존에는 운영자가 주기적으로 GC를 수동 실행해야 했고, 이를 놓치면 디스크가 예상보다 빠르게 소진되는 상황이 발생했다.
2.0에서는 이 과정이 자동화되어, 사용하지 않는 오브젝트가 자동으로 정리되고 스토리지 압축도 함께 수행된다. 이는 단순한 편의 기능이 아니라, Dolt를 프로덕션 파이프라인에 편입하는 데 있어 가장 큰 운영 장벽 중 하나를 제거한다는 의미다. 백엔드 팀 입장에서는 별도의 크론 잡이나 DBA 개입 없이 스토리지 사이즈를 예측 가능한 수준으로 유지할 수 있게 된다.
대용량 및 벡터 데이터 타입 지원 강화
Dolt 2.0은 대용량 데이터 타입과 벡터 데이터 타입에 대한 지원도 강화했다. 이미지, 문서, 바이너리 blob 등 대용량 컬럼을 다루는 시스템에서 기존 버전의 Dolt는 타입 호환성이나 성능 면에서 제약이 있었다. 이번 업데이트로 그 제약이 완화되어, 데이터 집약적인 파이프라인에서도 Dolt를 도입할 수 있는 가능성이 넓어졌다.
벡터 타입 지원은 특히 주목할 부분이다. 임베딩 벡터를 관계형 데이터와 함께 버전 관리해야 하는 시나리오, 예를 들어 ML 피처 스토어나 검색 인덱스 데이터의 이력 추적 등에서 활용 가능성이 생긴다. MySQL 호환 문법을 그대로 사용할 수 있으므로, 기존 JDBC나 Spring Data 기반 코드를 크게 수정하지 않고 연동할 수 있다는 점도 실무 도입 측면에서 장점이다.
-- Dolt에서 브랜치를 생성하고 데이터 변경 후 커밋하는 예시
CALL dolt_branch('feature/add-index');
CALL dolt_checkout('feature/add-index');
ALTER TABLE orders ADD INDEX idx_status (status);
INSERT INTO orders (id, status) VALUES (1001, 'pending');
CALL dolt_commit('-am', 'Add status index and sample order');
이처럼 DDL과 DML 변경을 하나의 커밋으로 묶어 이력을 남길 수 있으며, dolt_diff 함수를 통해 브랜치 간 데이터 차이도 SQL로 조회할 수 있다.
정리
- Dolt 2.0은 GC와 압축을 자동화하여, 버전 관리 DB 운영 시 발생하는 스토리지 관리 부담을 실질적으로 줄였다.
- 대용량 타입 및 벡터 타입 지원 강화로, 데이터 집약적 시스템에서의 도입 가능성이 확장되었다.
- MySQL 호환 인터페이스를 유지하므로, 기존 Java/Spring 백엔드 스택과의 통합 비용이 낮아 실험적 도입 진입 장벽이 낮다.