💨

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)

핵심 포인트

1

<% cache @model do %> — Fragment Cache로 뷰 조각 캐시

2

Model의 updated_at 기반 자동 캐시키 생성 + 무효화

3

Russian Doll: 중첩 캐시로 세밀한 무효화

4

belongs_to :post, touch: true — 자식 변경 시 부모 캐시도 무효화

5

Rails.cache.fetch("key", expires_in: 1.hour) { 비용 높은 연산 }

6

config.cache_store = :redis_cache_store — 캐시 저장소 설정

장점

  • 응답 속도 수십 배 향상
  • DB 부하 대폭 감소
  • updated_at 기반 자동 무효화
  • Russian Doll로 세밀한 캐시 관리

단점

  • 캐시 무효화 전략 설계 필요
  • 오래된 데이터 표시 위험
  • 캐시 저장소 관리 (Redis, 메모리)
  • 디버깅 시 캐시 때문에 변경이 안 보일 수 있음

사용 사례

게시글 목록/상세 페이지 캐싱 사이드바/네비게이션 캐싱 비용 높은 집계 결과 캐싱 API 응답 캐싱