도입
최근 Redis를 대체하는 다양한 캐싱 솔루션들이 등장함에 따라, 본 문서에서는 Rails 애플리케이션 환경에서 Redis와 이러한 대안 솔루션들의 성능을 비교 벤치마킹한 결과를 제시합니다. 주요 비교 대상으로는 Valkey, DragonflyDB, DiceDB와 같은 Redis 드롭인 대체재와, 데이터베이스 기반 캐싱을 지향하는 Rails의 SolidCache(PostgreSQL 및 SQLite3), 그리고 litecache(SQLite3)가 포함되었습니다. 벤치마킹은 DigitalOcean Droplet에서 Rails 8 애플리케이션을 사용하여 10만 건의 읽기 및 쓰기 작업을 단일 스레드 및 멀티 스레드 환경에서 수행하여 순수한 성능에 중점을 두었습니다.
벤치마킹은 4GB RAM, 25GB SSD의 Ubuntu 24.10 x64 환경에서 Rails 8 애플리케이션을 구동하여 진행되었습니다. 단일 스레드 및 5개의 멀티 스레드 환경에서 각각 10만 건의 읽기/쓰기 작업을 수행했으며, 각 테스트는 5회 반복하여 평균값을 산출했습니다. Benchmark.bm
을 활용한 Ruby 스크립트가 사용되었습니다.
단일 스레드 성능:
* Redis는 여전히 강력한 기준점 역할을 했으며, Memcached는 Redis와 유사한 성능을 보였습니다.
* Valkey와 DiceDB는 Redis보다 약 1.5배 느렸습니다. DragonflyDB는 Rails 8에서 현저히 느린 성능을 보여 벤치마킹에서 제외되었습니다.
* SolidCache on PostgreSQL은 읽기 작업에서 Redis보다 약 2배 느렸고 쓰기에서는 모든 옵션 중 가장 느렸으나, 튜닝된 버전은 표준 PostgreSQL 설정보다 1.5배 빨라지는 등 성능 개선 효과가 컸습니다.
* SolidCache with SQLite3는 Redis와 유사한 읽기 속도를 보였고, 튜닝된 PostgreSQL 설정보다 빠른 쓰기 속도를 기록하며 상당한 개선을 보여주었습니다.
* LiteCache with SQLite3는 Redis보다 읽기에서 약 4배, 쓰기에서 약 2.5배 빨라 가장 빠른 옵션으로 나타났습니다.
멀티 스레드 성능:
* Redis, Memcache, Valkey, DiceDB는 단일 스레드와 유사한 성능을 유지하며 Redis가 선두를 지켰습니다.
* SolidCache with PostgreSQL은 여전히 가장 느렸으나, 튜닝 시 쓰기 성능이 크게 향상되어 데이터베이스 최적화의 중요성을 강조했습니다.
* SolidCache with SQLite3는 Redis 대안들과 동등한 성능을 보였고, 튜닝된 PostgreSQL 설정보다 두 배 빠른 인상적인 결과를 보여주었습니다.
* LiteCache with SQLite3는 단일 스레드보다 쓰기 성능이 향상되어 Redis보다 읽기/쓰기 모두에서 4배 빠른 성능을 기록했습니다.
결론
Valkey, Dragonfly, DiceDB와 같은 데이터 스토어들이 Redis보다 우수한 성능을 주장하지만, Rails API를 통해 사용할 경우 Redis와 유사한 수준의 성능을 보였습니다. 이는 Rails API 계층에서 발생하는 오버헤드 때문일 수 있습니다.
SolidCache with PostgreSQL은 종속성이 적고 유지보수가 용이하다는 장점이 있지만, 테스트에서는 가장 느린 성능과 높은 메모리 소비를 보였습니다. 하지만 튜닝을 통해 쓰기 성능을 크게 개선할 수 있음을 확인했습니다.
SolidCache with SQLite3는 특히 멀티 스레드 테스트에서 Redis와 동등한 성능을 보여주며 데이터베이스 기반 캐싱 솔루션으로서 놀라운 속도를 입증했습니다. 이는 특정 사용 사례에서 매력적인 대안이 될 수 있습니다.
LiteCache with SQLite3는 가장 빠른 성능(Redis 대비 4배)을 자랑하지만, Rails 8 미지원(테스트는 포크된 브랜치 사용), LiteJob, LiteCable 등 불필요한 번들 패키지 포함, 그리고 초기 개발 단계라는 점 때문에 프로덕션 환경에서의 사용은 권장되지 않습니다.
결론적으로, 각 캐싱 솔루션은 고유한 장단점을 가지며, 애플리케이션의 특정 요구사항과 환경에 따라 최적의 선택이 달라질 수 있습니다. 특히 데이터베이스 기반 캐싱 솔루션의 성능 향상 가능성과 최적화의 중요성이 강조됩니다.