한국정보기술진흥원
한국정보기술신문
thumbnail

정보기술 ·

세계에서 가장 흥미로운 데이터베이스 TigerBeetle...3년 만에 Jepsen 테스트 통과한 금융거래 특화 DB

발행일
읽는 시간3분 21초

ㅅ> 기존 관행을 뒤집은 설계 철학으로 3년 반만에 10년짜리 데이터베이스 개발, 분산 시스템 기본 탑재

[한국정보기술신문] TigerBeetle이 세계에서 가장 흥미로운 데이터베이스로 평가받고 있다. 일반적인 데이터베이스 개발 방식과 정반대의 접근법을 취하면서도 놀라운 성과를 거둔 것이 주목받는 이유다.

TigerBeetle은 대부분의 개발팀이 빠르게 코드를 작성하는 것과 달리 의도적으로 느리게 코드를 작성한다. 테스트를 필요악으로 여기는 것이 아니라 결정론적 시뮬레이션 테스트에 전적으로 의존하며, 다른 소프트웨어 위에 구축하는 대신 외부 의존성이 전혀 없다. 정적 메모리 할당을 강제하고 프로덕션 환경에서도 어설션을 활성화하며, Raft 대신 Viewstamped Replication을 선택했고 Rust 대신 Zig를 채택했다.

차·대변 개념으로 설계된 금융거래 데이터베이스

TigerBeetle은 스스로를 금융거래 데이터베이스라고 부른다. SQL이 아닌 차변과 대변을 기본 요소로 사용하는데, 이는 회계 수업에서 배우는 개념이다. 은행이 아닌 기업들은 이 데이터베이스가 자신과 무관하다고 생각할 수 있지만, 창업자 Joran은 금융거래가 원래 트랜잭션 SQL이 설계된 본래 목적이라고 설명한다.

1985년 Jim Gray가 작성한 트랜잭션 처리에 관한 논문에서 TPS라는 지표를 정의했는데, 여기서 트랜잭션은 SQL 트랜잭션이 아니라 실제 비즈니스 거래를 의미했다. Gray는 20년 후에도 트랜잭션 처리의 표준 측정 방식으로 은행 계좌에서 차변 처리하고 복식부기를 수행한 뒤 터미널에 응답하는 것을 제시했다.

오늘날 SQL 데이터베이스로 차변과 대변을 구현하려면 계정 잔액을 조회하고 행을 잠그고 코드에서 결정을 기다린 후 다시 쓰고 차변과 대변을 기록해야 한다. 거래당 10~20개의 SQL 쿼리를 왔다갔다 해야 하며, 네트워크 왕복 시간 동안 행 잠금을 유지해야 한다.

TigerBeetle에서는 차변과 대변이 일급 요소이며, 단일 1MiB 쿼리로 8,190개의 거래를 한 번의 왕복으로 데이터베이스에 전송할 수 있다. 이를 1000배 성능 아이디어라고 부르지만 Joran은 특별한 것이 아니라고 말한다.

3년 반 만에 완성된 Jepsen 검증 데이터베이스

데이터베이스 구축에는 10년이 걸린다고 하지만 TigerBeetle은 3년 반 만에 완성되었고 Jepsen 테스트를 통과했다. 2025년 6월 Kyle Kingsbury는 모든 머신의 여러 위치에서 시스템 전체를 손상시키면서도 TigerBeetle의 기반을 깨뜨릴 수 없었다. 읽기 쿼리 엔진에서 내구성에 영향을 주지 않는 정확성 버그 1건만 발견했다.

TigerBeetle이 일반적으로 10년 이상 걸리는 프로덕션 준비 완료 합의 및 스토리지 엔진을 3년 반 만에 출시할 수 있었던 비결은 현대적인 설계 철학에 있다.

분산 시스템 기본 탑재와 Zig 언어 채택

TigerBeetle은 처음부터 분산 데이터베이스로 설계되었다. Postgres와 MySQL이 구축된 시대에는 단일 노드 패러다임이 지배적이었지만, 공유 클라우드 하드웨어 시대에는 분산 방식이 필요하다. TigerBeetle은 여러 머신에 걸쳐 엄격한 직렬화 가능성으로 트랜잭션을 복제한다.

개발자 경험도 단순하다. 클러스터의 원하는 수의 머신에 바이너리를 설치하기만 하면 된다. 비동기 복제나 Zookeeper 등이 필요 없다. 이를 위해 TigerBeetle은 MIT의 선구적인 Viewstamped Replication을 채택하여 합의 프로토콜 구현에 많은 투자를 했다.

TigerBeetle은 시계 오류 모델도 고려했다. 합의에는 물리적 시계가 아닌 논리적 시계를 사용하지만, 금융 거래의 물리적 타임스탬프는 감사 및 규정 준수를 위해 여러 금융 시스템에서 정확하고 비교 가능해야 한다. TigerBeetle은 클러스터의 대다수 시계를 결합하여 클러스터 시간이라는 내결함성 시계를 구성한다.

프로그래밍 언어로는 Zig를 100퍼센트 사용한다. C 생태계 전체를 사용할 수 있고 뛰어난 툴체인과 컴파일러가 제공되며, TypeScript만큼 읽기 쉬우면서 훨씬 빠르다. Zig는 TigerBeetle의 핵심 원칙인 정적 메모리 할당이 가능하고, 개발자 경험이 뛰어나 빠르게 배울 수 있다.

스토리지 오류 처리와 결정론적 시뮬레이션 테스트

TigerBeetle은 스토리지 오류에 내성을 갖도록 구축되었다. 기존 데이터베이스는 디스크가 오류 메시지와 함께 예측 가능하게 실패한다고 가정하지만, 실제로는 디스크가 조용히 손상된 데이터를 반환하거나 입출력을 잘못 전달하거나 갑자기 느려질 수 있다.

TigerBeetle은 프로토콜 인식 복구를 사용하여 모든 복제본에서 데이터 조각이 손상되지 않는 한 사용 가능한 상태를 유지한다. 모든 데이터는 불변이고 체크섬이 있으며 해시 체인으로 연결되어 손상이나 변조가 발생하지 않았음을 강력하게 보장한다.

결정론적 시뮬레이션 테스트는 TigerBeetle의 핵심 기술이다. FoundationDB 팀이 대중화한 이 혁신적인 테스트 기법을 통해 TigerBeetle은 VOPR이라는 자체 테스트 클러스터를 개발했다. VOPR는 1,000개의 CPU 코어에서 연중무휴 24시간 실행되며, 시뮬레이터에서 약 700배 가속된 시간으로 하루에 거의 2천 년의 시뮬레이션 런타임을 축적한다.

TigerStyle 코딩 철학과 어설션 활용

TigerBeetle의 엔지니어링 방법론인 TigerStyle은 GitHub에 공개되어 있다. 엔지니어링과 예술의 교차점에서 집단적 주고받기를 하며 진화하고 있다고 설명한다.

TigerStyle은 NASA의 완벽한 코드 작성 원칙인 Power of Ten에서 파생된 많은 원칙을 담고 있다. 모든 함수 인수, 반환 값, 사전 조건 및 불변성을 어설션해야 하며, 평균적으로 함수당 최소 2개의 어설션이 있어야 한다. 어설션이 중요하고 놀라운 경우 주석 대신 어설션을 사용하고, 컴파일 타임 상수 간의 관계를 어설션하여 실행 전에 프로그램의 설계 무결성을 확인한다.

TigerStyle은 코드 작성보다 코드에 대한 추론과 설계가 더 중요하다고 강조한다. 성능과 관련해서는 1000배의 큰 성과를 얻을 수 있는 최적의 시기가 설계 단계라고 말한다. 네트워크, 스토리지, 메모리, CPU라는 네 가지 기본 요소와 대역폭 및 지연 시간이라는 두 가지 텍스처에 대해 기본적인 계산을 해야 한다고 권고한다.

한국정보기술신문 정보기술분과 유상헌 기자 news@kitpa.org