워드프레스는 방문자 요청마다 PHP와 DB를 거치는 구조라, 트래픽이 늘면 서버 부하가 빠르게 올라갑니다. WP Super Cache는 완성된 HTML을 정적 파일로 저장해 두었다가 다음 방문자에게 그대로 내보내는 캐시 플러그인입니다. 제대로 설정하면 페이지 응답 시간이 1초 → 0.1초 수준까지 줄어들고, 같은 서버로 10배의 동시접속을 버틸 수 있습니다.
이 글에서는 Ubuntu + Nginx 환경에서 실제로 쓰는 WP Super Cache 설정, mod_rewrite vs PHP 모드 선택, 캐시 제외 규칙, 실제 트래픽 검증까지 한 번에 정리합니다.
캐싱 = “요청마다 다시 만들지 않기”
워드프레스가 한 페이지를 응답하는 일반적인 흐름:
- 방문자 요청을 PHP-FPM이 받음
- 워드프레스 코어가 부팅 (플러그인·테마 로드)
- DB에서 수십 개의 쿼리 실행 → 글·메뉴·위젯 데이터 수집
- 테마 템플릿 + 데이터를 조합해 HTML 생성
- HTML을 브라우저에 전송
같은 페이지를 100명이 보면 이 과정을 100번 반복합니다. 캐싱은 1단계부터 4단계까지 건너뛰고 5단계에서 저장된 HTML만 보내는 전략이에요.
WP Super Cache의 3가지 모드
| 모드 | 속도 | 서버 요구 | 특징 |
|---|---|---|---|
| Expert (mod_rewrite) | 🚀 가장 빠름 | Apache + mod_rewrite | PHP 전혀 거치지 않음 |
| Simple | ⚡ 빠름 | PHP 필요 | 권장·기본값. Nginx 호환 |
| WP-Cache | 🐢 느림 | PHP | 레거시, 권장하지 않음 |
Nginx 환경에서는 “Simple” 모드가 정답. Expert 모드는 Apache의 .htaccess가 필요해서 Nginx에선 쓸 수 없습니다. 대신 Nginx 자체 fastcgi_cache가 Expert 모드와 비슷한 수준의 속도를 제공합니다.
설치 + 기본 설정 (5분)
1. 플러그인 설치
관리자 → 플러그인 → 새로 추가 → “WP Super Cache” 검색 → 설치 및 활성화. WP-CLI라면:
wp plugin install wp-super-cache --activate
2. 캐시 활성화
설정 → WP Super Cache → “Easy” 탭 → “Caching On (Recommended)” 체크 → Update Status. 이것만으로도 기본 캐싱이 작동합니다.
3. 고급(Advanced) 탭 권장 설정
- ☑ Cache hits to this website for quick access (필수)
- ☑ Use PHP to serve cache files (Simple) (Nginx 환경 권장)
- ☑ Compress pages — gzip 압축
- ☑ 304 Not Modified browser caching
- ☑ Don’t cache pages for known users — 로그인 사용자는 캐시 미적용
- ☑ Don’t cache pages with GET parameters — ?s=검색 등 제외
- ☑ Late init. Display cached files after WordPress has loaded
4. 캐시 유효기간 (Expiry Time & Garbage Collection)
- Cache Timeout: 3600초(1시간) — 업데이트 빈도 높은 뉴스는 600~1800
- Scheduler: 600초마다 오래된 파일 정리
캐시 제외 규칙 — 놓치면 큰일 나는 것들
모든 페이지를 캐시하면 로그인·결제·댓글·장바구니 같은 동적 기능이 모두 깨집니다. 반드시 아래 경로를 제외 목록에 추가하세요.
URL 패턴으로 제외
# 설정 → WP Super Cache → Advanced → "Rejected URL Strings"
/wp-admin/
/wp-login.php
/cart/
/checkout/
/my-account/
/login/
/?s=
User-Agent 기반 제외 (봇·어드민)
# "Rejected User Agents"
bot
ia_archive
slurp
crawl
spider
Yandex
쿠키 기반 자동 제외
기본적으로 wordpress_logged_in_* 쿠키를 가진 방문자(즉 로그인 상태)는 자동으로 캐시를 건너뜁니다. 별도 설정 불필요.
캐시가 작동하는지 확인하기
방법 1 — HTML 주석 확인
시크릿 창에서 내 블로그 글을 열고 페이지 소스 보기(Ctrl+U). 맨 아래에 아래 주석이 있으면 캐시된 버전입니다.
<!-- Dynamic page generated in 0.XXX seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2026-04-20 10:23:15 -->
<!-- super cache -->
방법 2 — 응답 속도 실측
# 첫 요청 (아마도 캐시 생성)
curl -o /dev/null -w "Time: %{time_total}s\n" https://example.com/글-주소/
# 두 번째 요청 (캐시 HIT)
curl -o /dev/null -w "Time: %{time_total}s\n" https://example.com/글-주소/
# 보통 100ms 이하로 내려와야 정상
방법 3 — Preload 기능 활용
“Preload” 탭에서 “Preload cache”를 켜 두면 봇이 방문하기 전에 미리 모든 글의 캐시를 생성합니다. 트래픽이 적은 사이트일수록 효과가 큽니다.
Nginx + fastcgi_cache — 더 빠른 대안
WP Super Cache(Simple 모드)는 결국 PHP가 한번은 실행되어 캐시 파일을 읽어옵니다. Nginx의 fastcgi_cache는 PHP를 아예 거치지 않고 Nginx에서 바로 응답을 내보내서 더 빠릅니다. 가능하면 둘을 같이 쓰는 게 최고.
# /etc/nginx/nginx.conf
http {
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:50m inactive=30m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
}
# /etc/nginx/sites-available/mysite
server {
set $skip_cache 0;
if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }
if ($request_uri ~* "/wp-admin/|/wp-login\.php|admin-ajax\.php") { set $skip_cache 1; }
if ($http_cookie ~* "wordpress_logged_in") { set $skip_cache 1; }
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 30m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status;
}
}
설정 후 응답 헤더 X-FastCGI-Cache: HIT이 보이면 성공. MISS → HIT로 바뀌며 속도가 드라마틱하게 개선됩니다.
자주 만나는 문제와 해결
| 증상 | 원인 / 해결 |
|---|---|
| 글을 수정했는데 반영이 안 됨 | WP Super Cache → “삭제 캐시” 버튼으로 수동 퍼지. 글 저장 훅이 자동 퍼지해야 정상 |
| 로그인했는데 로그아웃 상태처럼 보임 | 제외 규칙에 로그인 쿠키가 빠진 경우. 기본 설정 재확인 |
| 모바일에서 PC 화면이 보임 | “Mobile device support” 체크 필요 (별도 캐시 폴더 사용) |
| /wp-json/이 느리다 | REST API는 기본으로 캐시 제외됨. 그래도 느리면 PHP-FPM 워커 수 증설 |
| 디스크가 꽉 참 | 캐시 폴더 wp-content/cache가 수 GB로 커지는 경우. GC 주기 단축 |
FAQ
Q. W3 Total Cache, LiteSpeed Cache와 비교하면?
설치·운영 편의성은 WP Super Cache가 가장 단순. 고급 기능(미니파이·CDN·DB 캐시까지)이 많은 건 W3 Total Cache. LiteSpeed 웹서버를 쓴다면 LiteSpeed Cache가 압도적. Nginx + 일반 가정용 블로그는 WP Super Cache + Nginx fastcgi_cache 조합이면 충분합니다.
Q. Cloudflare를 쓰면 캐시 플러그인 필요 없나요?
Cloudflare는 엣지 레벨 캐시라 전 세계 사용자에게 가까운 노드에서 응답합니다. 그래도 오리진 서버 캐시(WP Super Cache·fastcgi)는 Cloudflare 캐시가 만료되는 순간 원본 서버에 요청이 몰리는 걸 방어합니다. 둘 다 함께 써야 안정적입니다.
Q. CDN 설정 탭은 뭐 하는 건가요?
정적 리소스(이미지·CSS·JS)의 URL을 CDN 도메인으로 바꿔주는 기능입니다. Cloudflare 프록시를 쓰면 불필요. BunnyCDN·KeyCDN처럼 별도 CDN을 쓰는 경우에만 설정하세요.
Q. 캐시 적용 후 방문자 수 집계가 이상해요.
워드프레스 내장 방문자 카운터는 PHP 실행을 전제로 하는데 캐시된 응답은 PHP를 건너뜁니다. Google Analytics(JS 기반)는 영향 없습니다. 방문자 통계는 GA4 기준으로 보는 것이 정확합니다. GA4 설정은 GA4 블로그 연동 가이드 참고.
마무리 — 캐싱은 “설정 한 번 + 모니터링”
WP Super Cache는 설치 후 기본 설정만으로도 체감 속도가 2~3배 개선됩니다. 본격적으로 최적화하려면 Nginx fastcgi_cache를 병행하고, CDN으로 정적 리소스를 분리하세요. 캐시 동작은 한 번 설정했다고 끝이 아니라, 월 1회 디스크 사용량·히트율 점검을 루틴화하는 것이 안정 운영의 비결입니다.