보안 네트워킹 솔루션 기업 테일스케일(Tailscale)이 작년 말부터 올해 초까지 겪었던 잦은 서비스 불안정의 원인이 16년이나 된 SQLite 데이터베이스의 고질적인 버그 때문이었다고 최근 발표했습니다. 수개월에 걸친 집요한 추적 끝에 문제의 근원을 밝혀내고 해결했으며, 이는 데이터베이스의 WAL(Write-Ahead Logging) 파일 재설정 과정에서 발생하는 매우 드문 데이터 손상(corruption) 버그로 드러났습니다.
테일스케일은 2022년부터 SQLite를 주 데이터베이스로 사용해왔으며, 각 샤드(shard)별로 독립적인 SQLite 데이터베이스를 운영하는 아키텍처를 가지고 있습니다. 이들은 매일 수많은 백업을 S3에 저장했는데, 작년 8월 데이터 파이프라인에서 백업 데이터 손상이 처음 감지되었습니다. 이후 6개월 동안 총 19차례의 데이터 손상 사고가 발생했고, 이로 인해 해당 샤드의 제어 평면(control plane)이 중단되어 사용자들은 새로운 장치 연결이나 설정 변경에 어려움을 겪었습니다. 초기에는 복구에 한 시간 이상이 소요되기도 했으나, 점차 시간을 단축했습니다. 테일스케일은 이 버그가 특정 샤드, 고객, 기능, 시간대, 또는 부하 수준과 무관하게 발생하여 재현이 매우 어려웠다고 설명했습니다.
이번 사건은 널리 사용되는 '지루하지만 안정적인 기술(boring technology)'로 여겨지던 SQLite에서도 예상치 못한 심각한 문제가 발생할 수 있음을 보여줍니다. 특히, 테일스케일처럼 대규모 분산 시스템에서 SQLite를 사용할 때, 극히 드문 에지 케이스(edge case) 버그가 반복적인 서비스 중단으로 이어질 수 있다는 교훈을 줍니다. 테일스케일은 이번 경험을 통해 얻은 지식을 공유함으로써 오픈소스 커뮤니티에 기여하고, 서비스의 신뢰성을 회복하는 데 주력하고 있습니다. 이는 모든 소프트웨어 시스템에서 예상치 못한 깊은 곳의 버그를 찾아내고 해결하는 과정의 중요성을 다시 한번 상기시켜 줍니다.