빠른 웹사이트는 사용자 경험을 향상시키고, 서버 부하도 줄여줍니다.
Rails는 이를 위해 강력한 캐싱 기능을 기본 제공하고 있어요.
이번 글에서는 Rails의 세 가지 주요 캐싱 전략인 페이지 캐시, 프래그먼트 캐시, 러시아 인형 캐시(Russian Doll Caching)를 하나씩 예제와 함께 설명해볼게요.
📄 1. 페이지 캐시 (Page Caching)
전체 HTML 페이지를 캐싱해서, 컨트롤러를 거치지 않고 직접 파일을 서빙합니다.
하지만 이는 Rails 4 이후 core에서 제거되었고, 현재는 nginx 등 웹서버에서 직접 구현하는 것이 일반적이에요.
# 사용 권장 ❌ (대신 nginx로 정적 파일 처리 권장)
예전에는 다음과 같이 썼습니다:
caches_page :index
이 글에서는 더 실용적인 프래그먼트 캐싱부터 다뤄볼게요.
🧩 2. 프래그먼트 캐시 (Fragment Caching)
페이지 전체가 아니라, 일부 뷰 블록 단위로 캐싱하는 전략입니다.
✅ 예제
<% cache(@post) do %>
<div class="post">
<h2><%= @post.title %></h2>
<p><%= @post.body %></p>
</div>
<% end %>
@post
객체의 cache_key
를 기준으로 캐싱됩니다.
🔁 자동 무효화
Post 객체가 업데이트되면 cache_key가 바뀌므로 자동으로 캐시가 무효화됩니다.
@post.update(title: "새 제목") # => 새로운 캐시가 생성됨
🪆 3. 러시아 인형 캐시 (Russian Doll Caching)
프래그먼트 캐시를 중첩 구조로 사용하는 전략입니다.
예를 들어, Post 내부에 Comment 목록이 있고, 그 각각도 캐싱한다면?
✅ 예제
<% cache(@post) do %>
<div class="post">
<h2><%= @post.title %></h2>
<% cache([@post, @post.comments]) do %>
<ul>
<% @post.comments.each do |comment| %>
<li><%= comment.body %></li>
<% end %>
</ul>
<% end %>
</div>
<% end %>
cache([@post, @post.comments])
는 댓글 목록이 바뀌면 해당 블록만 무효화되도록 도와줍니다.
💾 캐시 저장소 설정
Rails는 다양한 캐시 저장소를 지원합니다. 기본은 메모리지만, Redis나 Memcached를 추천합니다.
✅ Redis 설정
# Gemfile
gem 'redis-rails'
# config/environments/production.rb
config.cache_store = :redis_cache_store, { url: ENV['REDIS_URL'] }
✅ 캐시 활성화
# config/environments/development.rb
config.action_controller.perform_caching = true
🧪 캐시 키 직접 지정
<% cache(["post", post.id, post.updated_at]) do %>
...
<% end %>
updated_at
을 포함하면 수정 시 자동으로 캐시가 무효화돼요.
🧹 캐시 무효화 & 삭제
Rails.cache.delete("some_cache_key")
혹은 전체 삭제도 가능합니다:
Rails.cache.clear
🎯 마치며
Rails의 캐시 전략은 매우 강력하면서도 간단하게 사용할 수 있습니다.
특히 러시아 인형 캐시는 부분 캐싱과 자동 무효화가 조화를 이루어, 실제 서비스에서 매우 유용하죠.
성능을 높이고 싶다면 꼭 한 번 적용해보세요!
'Ruby On Rails' 카테고리의 다른 글
API 서버로서의 Rails — Rails + React/Vue 조합 만들기 (2) | 2025.08.14 |
---|---|
Rails에서 환경변수 관리 — dotenv와 secrets.yml (3) | 2025.08.07 |
Capistrano로 자동 배포 파이프라인 만들기 (2) | 2025.08.05 |
Heroku로 Rails 앱 배포하기 — 빠르고 간단한 클라우드 배포 (2) | 2025.07.31 |
Rails 앱 보안 점검 — CSRF, SQL Injection 막기 (2) | 2025.07.29 |