Technote

Performance optimization Practical

워드프레스 Redis 오브젝트 캐시 — 적용 전에 알아야 할 것과 실측 결과

워드프레스가 느린 원인의 상당수는 페이지를 만들 때마다 같은 데이터베이스 쿼리를 반복하는 데 있습니다. Redis 오브젝트 캐시는 이 반복 쿼리를 메모리에서 꺼내 쓰게 만들어, 특히 관리자 화면과 로그인 사용자 요청을 눈에 띄게 빠르게 합니다.

오브젝트 캐시가 해결하는 문제

워드프레스는 요청 한 번에 옵션 테이블 · 메뉴 · 위젯 · 택소노미를 반복 조회합니다. 오브젝트 캐시가 없으면 이 조회가 매번 DB 를 왕복합니다. DB 가 원격에 있다면 왕복 지연이 그대로 응답 시간에 더해집니다.

페이지 캐시와의 역할 분리

혼동하기 쉬운 지점입니다. 페이지 캐시(nginx FastCGI)는 비로그인 방문자의 완성된 HTML 을 저장하고, 오브젝트 캐시(Redis)는 로그인 사용자·관리자·동적 요청의 반복 쿼리를 저장합니다. 하나가 다른 하나를 대체하지 않으며, 같은 응답을 두 계층이 캐시하면 무효화 타이밍이 어긋나 “관리자에게는 새 페이지, 방문자에게는 옛 페이지” 문제가 생깁니다. 계층마다 책임을 하나씩만 주세요.

설치와 wp-config 설정

플러그인은 Till Krüss 의 Redis Object Cache 를 사용합니다. wp-config.php 에 접속 정보를 상수로 선언합니다.

define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', '********' );
define( 'WP_REDIS_DATABASE', 3 );
define( 'WP_REDIS_PREFIX', 'wper_' );

WP-CLI 로 켜고 확인하기

wp plugin activate redis-cache
wp redis enable
wp redis status   # Status: Connected / Drop-in: Valid 확인

실측: 이 사이트를 구축하며 만난 것들

이 사이트를 구축하면서 실제로 만난 문제와 해결을 그대로 적습니다.

  • NOAUTH Authentication required — Redis 에 비밀번호가 걸려 있으면 wp redis enable 이 이 오류로 실패합니다. WP_REDIS_PASSWORD 를 선언하면 해결됩니다.
  • 키 충돌 — 한 서버의 Redis 를 여러 서비스가 공유한다면 WP_REDIS_DATABASE 로 DB 인덱스를 분리하고 WP_REDIS_PREFIX 를 반드시 지정하세요. 프리픽스 없이 flush 하면 다른 서비스의 캐시까지 날아갑니다.
  • 확인 습관 — 적용 후에는 반드시 wp redis statusConnectedDrop-in: Valid 를 확인합니다. 드롭인이 설치되지 않으면 플러그인이 켜져 있어도 캐시는 동작하지 않습니다.

더 큰 그림

오브젝트 캐시는 3계층 최적화(OPcache → Redis → 페이지 캐시)의 가운데 조각입니다. 전체 구성을 직접 하기 어렵다면 최적화 캠페인에서 전/후 실측 리포트와 함께 대신 구성해 드립니다. 다른 성능 주제는 성능 최적화 카테고리에서 볼 수 있습니다.

More on this topic

All technotes

Performance optimization Practical

Who pays for the milliseconds a tag adds?

A tracking script does not stop at downloading. While it is parsed and executed the main thread is busy, and a busy page ignores fingers. That cost is…

Marketers 5 min read

Performance optimization Practical

The object cache: what Redis actually removes

Repeated identical lookups disappear. One slow query does not. Miss that distinction and you will wire up Redis and then ask why nothing got faster.

Developers 7 min read

Performance optimization Practical

This is how a landing page gets heavy

Nobody decides to make a landing page heavy. It accumulates: one addition per campaign, and nothing ever removed when the campaign ends.

Marketers 6 min read

₩270,000 · Join the program