새 Rails 앱을 생성할 때 캐싱이 이미 설정되어 있습니다. 이렇게 하면 cache
를 사용하여 일부 보기 조각을 래핑하는 것처럼 빠르게 시작할 수 있습니다. 도우미 또는 Rails.cache.fetch
사용 외부 API 결과를 저장합니다. 캐시된 데이터는 데이터를 메모리, Memcached, Redis에 보관하거나 디스크에 바로 쓸 수 있는 Rails의 캐시 저장소 중 하나에 저장됩니다.
그러나 서로 다른 캐시 저장소 중 어떤 것이 어떤 상황에 가장 적합합니까? 이 개요에서는 각 옵션을 살펴보겠습니다.
<블록 인용>👋 그리고 이 기사가 마음에 드시면 Ruby(on Rails) 성능에 대해 더 많이 썼습니다. Ruby 성능 모니터링 체크리스트를 확인하세요.
파일 저장소
:file_store
캐시 저장소가 특별히 구성되지 않은 경우 기본적으로 사용됩니다. 이름에서 알 수 있듯이 캐시 항목을 파일 시스템에 씁니다. 이것들은 tmp/cache
에서 끝납니다. cache_store
를 명시적으로 설정하여 다른 위치를 선택하지 않는 한 애플리케이션 루트의 디렉토리 :file_store
구성 사용하려는 디렉토리의 경로를 전달합니다.
config.cache_store = :file_store , "/path/to/cache/directory"
캐시 파일은 디스크에 저장되며 자동으로 제거되지 않습니다. 즉, 디스크를 채우지 않도록 직접 제거해야 합니다. 예를 들어 Rails.cache.cleanup
실행 주기적으로 캐시에 만료된 항목이 없도록 합니다.
파일 저장소는 각 항목이 캐시 디렉토리에 저장되어 파일을 제거하여 캐시에서 항목을 삭제할 수 있기 때문에 개발에 유용합니다. 이것은 예를 들어 캐시 무효화를 테스트하는 데 유용합니다.
프로덕션에서 파일 저장소는 각 서버 프로세스가 동일한 파일 시스템에서 실행될 때 유용합니다. 메모리 기반 캐시 저장소보다 느리지만 캐시가 잠재적으로 매우 커질 수 있는 경우 파일 저장소가 유용할 수 있습니다.
메모리 저장소
버전 5.0부터 Rails는 자동으로 :memory_store
를 설정합니다. 새 애플리케이션을 생성할 때 개발 구성에서. 메모리 저장소를 사용할 때 캐시된 데이터는 Ruby 웹 서버의 프로세스에서 메모리에 보관됩니다.
데이터는 웹 서버와 동일한 프로세스에서 메모리에 보관되기 때문에 메모리 저장소는 개발 웹 서버를 다시 시작할 때마다 자동으로 지워지므로 개발에 사용하기에 좋습니다.
기본적으로 메모리 내 저장소는 32MB를 사용하지만 :size
캐시 저장소를 구성할 때 옵션입니다.
config.cache_store = :memory_store, { size: 16.megabytes }
캐시가 가득 차면 가장 최근에 사용한 항목이 캐시에서 자동으로 삭제되어 새 항목을 위한 공간이 생깁니다.
프로덕션 환경에서 메모리 저장소를 사용하는 것이 가능하지만(찾을 수 있는 가장 빠른 솔루션) 여러 서버 프로세스를 실행하는 시스템에는 권장되지 않습니다. 프로세스는 서로의 캐시에 액세스할 수 없으므로 각 프로세스는 자체 캐시 복사본을 유지 관리해야 합니다.
Memcache 저장소
:mem_cache_store
Dalli gem과 Memcached를 사용하여 중앙 집중식 인메모리 캐시에 항목을 저장합니다.
데이터는 Ruby 서버 프로세스가 아닌 별도의 프로세스에 보관됩니다. 따라서 앱이 다시 시작될 때 캐시가 삭제되지 않지만 Memcached 서버가 계속 실행되는 한 메모리에 유지됩니다. 다시 시작하면 새 캐시로 시작됩니다.
Memcache 저장소는 캐시 서버가 기본적으로 localhost에서 실행되고 있다고 가정하지만 원격 서버를 사용하기 위해 하나 이상의 주소를 전달할 수 있습니다.
config.cache_store = :mem_cache_store, "cache-1.example.com", "cache-2.example.com"
Memcached는 기본적으로 최대 캐시 크기 64MB를 사용하도록 구성되어 있지만 명령줄 옵션을 사용하거나 memcached.conf
에서 구성할 수 있습니다. 파일. 메모리 저장소와 마찬가지로 캐시가 최대 크기에 도달하면 가장 최근에 사용된 항목을 제거하기 시작합니다.
:mem_cache_store
프로덕션 환경을 위한 캐시 저장소입니다. 중앙 memcached 서버를 사용하면 여러 웹 서버 간에 캐시를 공유할 수 있으며 원격 memcached 서버를 사용할 경우에도 여러 호스트에서 캐시를 공유할 수 있습니다.
Redis 캐시 저장소
Rails 5.2는 :redis_cache_store
를 도입했습니다. Memcache 저장소를 사용하는 것처럼 Redis에 캐시 항목을 저장할 수 있는 저장소입니다.
Redis를 Rails 캐시 저장소로 사용하려면 LRU로 설정된 전용 Redis 캐시를 사용하세요. 저장소가 최대 크기에 도달할 때 저장소에서 삭제되도록 하기 위해 기존 Redis 서버에서 저장소를 가리키는 대신 (최근 사용) 캐시를 사용합니다.
Redis 스토어는 Redis gem(Redis::Distributed 포함) 및 Hiredis와 함께 작동하며 하나 이상의 원격 서버 설정과 같은 다양한 구성 옵션을 지원합니다.
cache_servers = %w[redis://cache-01:6379/0 redis://cache-02:6379/0]
config.cache_store = :redis_cache_store, { url: cache_servers }
Redis는 주기적으로 데이터 세트를 디스크에 기록하므로 캐시 서버가 다시 시작될 때 대부분의 캐시된 데이터가 유지됩니다. 개발 중 캐시된 항목은 Rails.cache.delete
를 사용하여 콘솔에서 제거할 수 있습니다. .
프로덕션에서 Redis는 중앙 집중식 캐시 저장소를 제공한다는 점에서 Memcached와 경쟁합니다. Rails 앱에서의 사용은 아직 Memcached만큼 널리 사용되지는 않지만 Redis 스토어는 미래에 인기 있는 Rails 캐시 스토어가 될 가능성이 높습니다.
어떤 캐시 저장소를 사용할 것인가?
일반적으로 Rails의 파일 및 메모리 저장소는 개발에 적합하지만 주의 사항을 알고 이해하면 소규모 애플리케이션의 프로덕션에서 사용할 수 있습니다. 프로덕션 등급의 Memcached 및 Redis 스토어는 일반적으로 더 큰 프로덕션 앱, 특히 여러 호스트에서 여러 웹 서버를 실행할 때 더 나은 선택입니다.
이것으로 Rails의 캐시 저장소에 대한 개요를 마칩니다. 각 저장소에 대한 자세한 정보와 구성 옵션은 Rails 가이드의 캐시 저장소 섹션을 확인하세요.
이 기사와 AppSignal Academy 시리즈의 이전 기사가 마음에 드셨습니까? Rails의 캐싱에 대한 더 많은 기사가 준비되어 있습니다. 그러나 다음에 (캐싱 관련 또는 기타) 무엇에 대해 작성하고 싶은지 주저하지 말고 알려주세요!