워드프레스 속도 개선 방법 (캐시, WebP 이미지, PHP-FPM)
작은 클라우드 서버에서 워드프레스를 운영하면 방문자가 조금만 몰려도 페이지가 느려진다. 비싼 서버로 바꾸기 전에 할 수 있는 일이 많다. 이 글은 워드프레스 속도 개선 방법을 측정, 페이지 캐시, 이미지, PHP 설정, 데이터베이스 순서로 정리한다. 서버 상태를 보는 방법은 리눅스 서버 모니터링에 있다.

워드프레스 속도 개선 첫 단계: 측정
바꾸기 전에 지금 상태를 숫자로 남겨야 효과를 알 수 있다. PageSpeed Insights에 주소를 넣으면 모바일과 데스크톱 점수, 가장 큰 콘텐츠가 보이기까지 걸린 시간(LCP) 등을 보여 준다. 서버 응답 시간만 따로 보고 싶다면 curl을 쓴다.
curl -s -o /dev/null -w "첫 바이트까지 %{time_starttransfer}초\n" https://itinfo.it.kr/
curl 옵션은 curl 사용법에 정리했다.
워드프레스 속도 개선 1: 페이지 캐시
워드프레스는 요청마다 PHP가 DB를 조회해 페이지를 새로 만든다. 페이지 캐시는 만들어 둔 HTML을 저장해 두었다가 바로 내보내므로 체감 효과가 가장 크다.
- 플러그인 방식: WP Super Cache, W3 Total Cache 같은 캐시 플러그인. 설정이 쉽다.
- 서버 방식: Nginx FastCGI 캐시. 플러그인보다 빠르지만 설정이 조금 복잡하다.
로그인한 사용자, 장바구니, 댓글 작성 직후처럼 개인화된 페이지는 캐시에서 빼야 한다. 대부분의 캐시 플러그인은 기본으로 처리해 준다.
워드프레스 속도 개선 2: 이미지
- 큰 원본 사진을 그대로 올리지 말고 화면에 맞는 크기로 줄인다.
- WebP 형식은 같은 화질에서 JPEG보다 용량이 작다. 워드프레스 5.8부터 WebP 업로드를 지원한다.
- 워드프레스 5.5부터 이미지 지연 로딩(loading=”lazy”)이 기본으로 들어가 있다.
이 블로그의 대표 카드 이미지도 모두 WebP로 만들어 쓰고 있다.
워드프레스 속도 개선 3: PHP-FPM과 OPcache
Nginx와 함께 쓰는 PHP-FPM은 미리 띄워 둔 PHP 프로세스로 요청을 처리한다. 프로세스 수가 너무 적으면 요청이 줄을 서고, 너무 많으면 메모리가 부족해 서버 전체가 느려진다.
# /etc/php/8.x/fpm/pool.d/www.conf (버전에 맞게)
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
# PHP 프로세스 하나가 쓰는 메모리 확인
ps -C php-fpm8.3 -o rss= | awk '{s+=$1} END {print s/NR/1024 " MB"}'
pm.max_children은 “PHP에 줄 수 있는 메모리 ÷ 프로세스 하나의 메모리”로 잡는다. 예를 들어 PHP에 1GB를 줄 수 있고 프로세스가 60MB씩 쓴다면 15 안팎이다. 메모리가 빠듯하다면 스왑 설정도 함께 해 두자. 바꾼 뒤에는 PHP-FPM을 재시작한다.
PHP 코드를 미리 컴파일해 두는 OPcache는 대부분 기본으로 켜져 있다. php -i | grep opcache.enable로 확인할 수 있다.
데이터베이스 정리
- 글 수정 기록(리비전)이 많이 쌓였다면 wp-config.php에 define(‘WP_POST_REVISIONS’, 10);처럼 개수를 제한한다.
- 오래된 자동 임시 저장본과 스팸 댓글을 정리한다.
- 느린 쿼리가 의심되면 MySQL 느린 쿼리 로그를 켜서 확인한다.
정리 작업 전에는 DB 백업을 먼저 해 두자. 성능 관련 공식 안내는 워드프레스 성능 최적화 문서에 있다.
마무리
워드프레스 속도는 대부분 캐시, 이미지, PHP 설정 세 가지에서 결정된다. 측정하고, 하나씩 바꾸고, 다시 측정하는 순서를 지키면 서버를 바꾸지 않고도 체감 속도를 크게 올릴 수 있다. 컨테이너 이미지를 만드는 방법은 전날 글인 Dockerfile 작성법에 있다.
첫 댓글을 남겨보세요