Caching (캐싱)
반복 연산을 줄여 응답 속도를 극적으로 향상
Rails의 캐싱은 여러 레벨에서 작동합니다.
1. Fragment Caching (가장 많이 사용): cache @post do ... end 블록으로 뷰 조각을 캐시합니다. @post의 updated_at이 변경되면 캐시가 자동 무효화됩니다.
2. Russian Doll Caching (중첩 캐싱): 캐시 블록을 중첩하여 사용합니다. 자식(comment) 변경 시 해당 캐시만 갱신되고, 부모(post) 변경 시 전체가 갱신됩니다. belongs_to :post, touch: true로 연쇄 무효화를 설정합니다.
3. Low-Level Caching: Rails.cache.fetch("key", expires_in: 1.hour) { 비용 높은 연산 } 형태로 임의의 값을 캐시합니다.
저장소: Memory Store, Redis, Memcached, Solid Cache (Rails 8)
핵심 포인트
<% cache @model do %> — Fragment Cache로 뷰 조각 캐시
Model의 updated_at 기반 자동 캐시키 생성 + 무효화
Russian Doll: 중첩 캐시로 세밀한 무효화
belongs_to :post, touch: true — 자식 변경 시 부모 캐시도 무효화
Rails.cache.fetch("key", expires_in: 1.hour) { 비용 높은 연산 }
config.cache_store = :redis_cache_store — 캐시 저장소 설정
장점
- ✓ 응답 속도 수십 배 향상
- ✓ DB 부하 대폭 감소
- ✓ updated_at 기반 자동 무효화
- ✓ Russian Doll로 세밀한 캐시 관리
단점
- ✗ 캐시 무효화 전략 설계 필요
- ✗ 오래된 데이터 표시 위험
- ✗ 캐시 저장소 관리 (Redis, 메모리)
- ✗ 디버깅 시 캐시 때문에 변경이 안 보일 수 있음