Technote

성능 최적화 실무

워드프레스 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 status 로 Connected 와 Drop-in: Valid 를 확인합니다. 드롭인이 설치되지 않으면 플러그인이 켜져 있어도 캐시는 동작하지 않습니다.

더 큰 그림

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

이 주제의 다른 글

노하우 목록으로

성능 최적화 심화

프론트엔드 예산 — 상한을 정하고 지키는 법

페이지는 한 번에 무거워지지 않습니다. 각각 합리적인 작은 추가가 쌓여 무거워집니다. 상한을 정하고 재는 절차가 그 누적을 끊습니다.

개발자 4분 읽기

성능 최적화 심화

전환 감사 — 유입부터 완료까지 새는 곳 찾기

아무도 도달하지 않는 페이지를 다듬는 일이 가장 흔한 낭비입니다. 경로 전체를 처음부터 끝까지 걸어 보면 어디서 새는지 먼저 보입니다.

마케터 4분 읽기

성능 최적화 실무

팝업의 대가 — 검색과 전환에 동시에 걸립니다

모바일에서 본문을 가리는 팝업은 검색 평가에서 불리하게 작용하고, 같은 팝업이 전환에서도 비용을 만듭니다. 조절할 수 있는 것은 타이밍 · 트리거 · 닫기 세 가지입니다.

마케터 4분 읽기

₩270,000 · 신청하기