37signals가 개발한 Solid Cache는 Rails 애플리케이션을 위한 혁신적인 디스크 기반 캐시 스토어로, 기존 메모리 기반 캐시의 높은 비용과 용량 제한을 극복하고자 합니다. 본 발표는 Solid Cache의 설계 목표, 핵심 기술, 그리고 37signals의 실제 적용 사례를 통해 그 성능과 이점을 상세히 설명하며, 전반적인 애플리케이션 성능 향상과 인프라 단순화를 목표로 합니다.
Solid Cache는 SQLite, MySQL, PostgreSQL 등 다양한 데이터베이스를 활용하여 캐시를 구현합니다. 데이터베이스의 내장 기능은 캐시 구현을 용이하게 하며, 실제 디스크 접근을 최소화합니다. 설치는 Gem 추가, 마이그레이션, 캐시 스토어 설정의 세 단계로 간편하며, 별도 Cron 작업 없이 캐시 만료가 자동 처리되는 ‘플러그 앤 플레이’ 방식을 지향합니다. 개별 캐시 작업 속도는 Redis보다 느릴 수 있으나, 훨씬 큰 캐시를 통해 전반적인 애플리케이션 속도 향상을 목표로 합니다.
캐시 만료는 데이터의 ‘수명’과 ‘캐시 크기’ 두 가지 기준을 사용하며, 캐시 크기는 테이블의 ID 범위를 활용하여 추정합니다. 만료 알고리즘으로는 LRU 대신 FIFO(First In, First Out)를 채택했습니다. FIFO는 읽기 시 쓰기 방지 및 파편화 최소화를 통해 효율적인 디스크 공간 활용과 빠른 삭제를 가능하게 합니다. 디스크의 저렴한 비용으로 캐시 크기를 크게 확장할 수 있어 FIFO의 낮은 적중률을 상쇄합니다. 만료 프로세스는 백그라운드에서 비동기적으로 실행되며, 샤딩도 지원하여 시스템 복원력을 높입니다.
37signals는 Basecamp와 Hey 서비스에 Solid Cache를 성공적으로 적용했습니다. 두 개의 데이터 센터에서 액티브-액티브 구성으로 총 12TB 규모의 캐시를 운용하며, 이는 60일 분량의 데이터를 저장할 수 있습니다. 캐시 특성을 고려, MySQL 설정에서 복제, 백업, ACID 보장을 완화하여 속도와 단순성을 극대화했습니다. 데이터는 저장 시 암호화됩니다. 성능 측정 결과, 스토리지 비용은 100만 개 항목당 Redis 대비 약 20배 저렴했으며, 캐시 미스율은 Redis 사용 시 약 10%에서 Solid Cache 적용 후 약 7.5%로 감소했습니다. Basecamp의 응답 시간은 크게 단축되었는데, 이는 프래그먼트 캐싱을 적극 활용하는 애플리케이션 특성상 대규모 캐시의 이점을 극대화한 결과입니다.
Solid Cache는 디스크의 저렴한 비용과 대용량 저장 능력을 활용하여 기존 캐시 솔루션의 한계를 뛰어넘는 효과적인 대안을 제시합니다. 개별 캐시 작업 속도는 다소 느릴 수 있으나, 훨씬 큰 캐시를 통해 캐시 적중률을 극대화함으로써 전반적인 애플리케이션 성능을 크게 향상시킬 수 있음을 입증했습니다. FIFO 알고리즘의 채택은 단순성과 효율성을 제공하며, Solid Cache는 비용 절감, 인프라 단순화, 그리고 사용자 경험 개선 측면에서 Rails 개발자들에게 매우 매력적인 선택지가 될 것입니다.