핵심 요약
- 몽고DB는 각 언어 특성에 맞춘 순수 네이티브 드라이버를 12개 이상 개발하면서 일관된 동작 검증이라는 큰 난제에 직면했습니다.
- 초기 도입하려던 큐커버(Cucumber) 문법이 엔지니어들의 강력한 거부감으로 무산된 뒤, YAML 기반 자체 테스트 포맷을 설계했습니다.
- 현재 약 1,500개의 YAML 파일로 구성된 통합 테스트 체계를 통해 10년 넘게 언어 간 스펙 일관성을 완벽히 유지하고 있습니다.
요약 몽고DB(MongoDB)의 전직 엔지니어가 12개 이상의 서로 다른 프로그래밍 언어로 작성된 데이터베이스 드라이버들의 스펙과 동작 일관성을 유지하기 위해 수년간 겪었던 엔지니어링 분투기를 공유했습니다.
많은 데이터베이스 기업들은 C 언어로 핵심 클라이언트를 만든 뒤 각 언어로 얇은 래퍼(wrapper)를 씌우는 방식을 택하지만, 몽고DB는 각 언어의 런타임 특성(스레딩 모델, 비동기 루프, 가비지 컬렉션 등)과 고유 관례를 완벽히 살리기 위해 순수 자바스크립트, 순수 러스트 등 네이티브 드라이버를 직접 재작성하는 험난한 방식을 고수했습니다. 하지만 이로 인해 언어별로 일관된 동작과 표준 API를 보장하는 일이 거대한 난제로 떠올랐습니다.
작성자가 2011년 입사했을 당시, 팀에서는 BDD(행위 주도 개발) 도구인 큐커버(Cucumber) 문법을 도입해 테스트를 표준화하려 시도했으나 엔지니어들의 극심한 반발과 거부감에 부딪혔습니다. 한 엔지니어는 기존 테스트를 큐커버로 대체한다면 재앙이 될 것이라며 참여를 거부했고, 창업자 엘리엇 호로위츠 역시 이를 우스꽝스럽게 여겨 결국 포기하게 되었습니다. 이후 자연어 스펙의 모호함으로 인해 언어마다 기능이 제각각 구현되는 문제가 재발하자, 팀은 큐커버 대신 YAML을 기반으로 한 자체 테스트 언어를 구축하기 시작했습니다.
그 결과 탄생한 것이 '통합 테스트 포맷(Unified Test Format)'입니다. 각 언어 드라이버마다 이 YAML 포맷을 해석해 드라이버 API를 실행하는 테스트 러너를 구현했고, 네트워크 에러 시 자동 재시도, 트랜잭션, 문서 입출력, 클라이언트 암호화 등 복잡한 동작을 약 1,500개의 YAML 파일로 철저하게 검증할 수 있게 되었습니다. 작성자는 이 YAML 기반 적합성 테스트가 10년 넘게 성공적으로 이어지며 방대한 폴리글랏 환경을 하나로 묶어준 최고의 프로젝트였다고 회고했습니다.
Sponsored · 광고