도입
최근 Redis의 대안들이 성능 향상을 주장하며 등장함에 따라, 본 벤치마킹은 Redis 대체재들이 실제 Rails 환경에서 어느 정도의 성능 이점을 제공하는지 확인하고자 수행되었습니다. 테스트에는 Valkey, DragonflyDB, DiceDB와 같은 Redis 대체재는 물론, 데이터베이스 기반 캐싱을 선호하는 Rails의 SolidCache(PostgreSQL 및 SQLite3 튜닝 버전 포함), 그리고 litecache with sqlite3가 포함되었습니다. 이 벤치마킹은 SolidCache의 다양한 이점 중 순수한 성능에만 초점을 맞추었습니다. 테스트는 DigitalOcean 드롭렛(4GB RAM, 25GB SSD Ubuntu 24.10 x64)에서 Rails 8 애플리케이션을 사용하여 10만 회의 읽기 및 쓰기 작업을 수행하는 스크립트를 통해 진행되었으며, 단일 스레드 및 다중 스레드(5개 스레드) 환경에서 각각 5회 반복하여 평균값을 산출했습니다.
단일 스레드 성능
벤치마크 기준으로 사용된 Redis는 Memcached와 유사한 성능을 보였습니다. Valkey와 DiceDB는 Redis보다 1.5배 느린 성능을 기록했으며, DragonflyDB는 Rails 8에서 현저히 느려 테스트에서 제외되었지만, Rails 7에서는 Valkey와 유사한 성능을 보였습니다.
SolidCache on PostgreSQL은 읽기에서 Redis보다 약 2배 느렸고, 쓰기에서는 모든 옵션 중 가장 느렸습니다. 그러나 튜닝된 버전은 표준 PostgreSQL 설정보다 1.5배 빨라졌습니다. SolidCache with SQLite3는 읽기 속도가 Redis와 비슷하고 쓰기 속도는 튜닝된 PostgreSQL 설정을 능가하는 상당한 개선을 보였습니다.
Litecache with SQLite3는 읽기에서 Redis보다 약 4배, 쓰기에서 2.5배 빨라 Rails 및 Ruby 애플리케이션에서 가장 빠른 옵션으로 나타났습니다.
다중 스레드 성능
다중 스레드 테스트에서 Redis, Memcache, Valkey, DiceDB는 단일 스레드와 유사한 성능을 유지했으며, Redis가 선두를 지켰습니다. SolidCache with PostgreSQL은 가장 느렸지만, 튜닝 시 쓰기 성능이 크게 향상되었습니다. SolidCache with SQLite3는 놀랍게도 Redis 대체재와 동등한 성능을 보였고, 튜닝된 PostgreSQL 설정보다 2배 빨랐습니다.
LiteCache with SQLite3는 단일 스레드 성능을 능가하며 읽기 및 쓰기 모두에서 Redis보다 4배 빠른 압도적인 성능을 보였습니다.
결론
Valkey, Dragonfly 등 Redis 대체재들이 주장하는 성능 이점은 Rails API를 통해 사용할 경우 Redis와 유사한 수준에 머무르는 경향이 있음을 확인했습니다.
SolidCache with PostgreSQL은 의존성 감소 및 유지보수 용이성이라는 장점이 있지만, 테스트에서는 가장 느렸고 메모리 소비가 높았습니다. 그럼에도 불구하고, Andrew Atkinson이 권장하는 튜닝을 적용하면 쓰기 성능이 크게 향상될 수 있습니다.
SolidCache with SQLite3는 특히 다중 스레드 테스트에서 Redis와 동등한 성능을 보이며 데이터베이스 기반 캐싱 솔루션으로서 인상적인 속도를 보여주었습니다.
LiteCache with SQLite3는 압도적인 성능(Redis보다 4배 빠름)을 자랑하지만, Rails 8 미지원, LiteJob, LiteCable 등 불필요한 번들 포함, 그리고 초기 개발 단계라는 점 때문에 프로덕션 환경에서의 사용은 아직 권장되지 않습니다.
결론적으로, Rails 캐싱 솔루션 선택 시 성능, 유지보수 용이성, 안정성 등 다양한 요소를 종합적으로 고려해야 하며, 특히 SolidCache with SQLite3는 주목할 만한 대안이 될 수 있습니다.