WordPress를 더 빠르게 만드는 방법: PHP 메모리와 성능 최적화 기초
도입
어제는 WordPress를 설치한 뒤 가장 먼저 확인해야 할 기본 설정을 살펴봤습니다. 사이트 제목, 시간대, 고유주소, 관리자 이메일처럼 처음에는 작아 보이는 설정들이 실제 운영에서는 꽤 중요한 기준이 된다는 점을 확인했습니다.
이제 기본 설정까지 마쳤다면 다음으로 눈에 들어오는 것은 속도입니다. WordPress 관리자 화면이 조금 무겁게 느껴지거나, 이미지 업로드가 생각보다 느리거나, 플러그인을 설치한 뒤 반응이 둔해지는 경우가 생길 수 있습니다.
저도 처음에는 WordPress가 느리면 서버 성능이 부족한 줄만 알았습니다. Intel N100 홈서버라서 어쩔 수 없는 부분이라고 생각하기 쉬웠죠. 그런데 하나씩 살펴보니 서버 사양만의 문제가 아니었습니다. PHP 메모리, 업로드 제한, 실행 시간, 캐시 설정처럼 기본 환경에서 먼저 확인해야 할 항목들이 있었습니다.
이번 글에서는 복잡한 고급 튜닝보다, WordPress를 조금 더 빠르고 안정적으로 운영하기 위해 먼저 알아두면 좋은 성능 최적화 기초를 정리해보려고 합니다.

※ 다이어그램은 운영 환경 설계를 바탕으로 AI 도구를 활용해 제작했으며, 최종 구성과 내용은 운영자가 직접 검수했습니다.
출처: 디지털 장난감
본문
① WordPress는 왜 느려질까?
WordPress가 느려지는 이유는 하나로 딱 잘라 말하기 어렵습니다. WordPress는 혼자 동작하는 프로그램이 아니라 PHP, MariaDB, 웹서버, 테마, 플러그인, 이미지 파일이 함께 움직이는 구조이기 때문입니다.
예를 들어 방문자가 글 하나를 열면 WordPress는 데이터베이스에서 글 정보를 읽고, 테마 파일을 불러오고, 플러그인 기능을 적용한 뒤, 최종 화면을 만들어 보여줍니다. 이 과정 중 어디 하나가 무거워지면 전체 속도도 함께 느려질 수 있습니다.
| 요소 | 역할 | 느려질 수 있는 이유 |
|---|---|---|
| PHP | WordPress 실행 | 메모리 부족, 실행 시간 제한 |
| MariaDB | 글과 설정 저장 | 쿼리 지연, 인덱스 부족 |
| 이미지 | 본문과 썸네일 표시 | 용량이 크면 로딩 지연 |
| 플러그인 | 기능 추가 | 과도한 기능과 충돌 |
| 테마 | 화면 구성 | 무거운 스크립트와 스타일 |
그래서 WordPress를 빠르게 만들려면 무조건 서버 사양부터 올리기보다, 어떤 부분이 병목이 되는지 먼저 나눠서 보는 것이 좋았습니다. 이번 글에서는 그중에서도 PHP 설정과 기본 캐시를 먼저 살펴보겠습니다.
② PHP 메모리는 어떤 역할을 할까?
WordPress는 PHP로 동작합니다. 그래서 PHP가 사용할 수 있는 메모리와 실행 시간은 WordPress 운영에 직접 영향을 줄 수 있습니다.
memory_limit은 PHP가 한 번에 사용할 수 있는 최대 메모리입니다. 이 값이 너무 낮으면 플러그인을 설치하거나 이미지를 처리하거나 관리자 화면에서 무거운 작업을 할 때 오류가 발생할 수 있습니다.
| 설정 | 역할 | 운영 관점 |
|---|---|---|
memory_limit |
PHP가 사용할 수 있는 최대 메모리 | 관리자 화면, 플러그인, 이미지 처리에 영향 |
upload_max_filesize |
업로드 가능한 파일 하나의 최대 크기 | 이미지와 파일 업로드에 영향 |
post_max_size |
전송 가능한 전체 데이터 크기 | 파일 업로드와 폼 전송에 영향 |
max_execution_time |
PHP 스크립트 최대 실행 시간 | 업데이트, 가져오기, 백업 작업에 영향 |
이 값들은 무조건 크게 잡는 것이 정답은 아닙니다. 하지만 기본값이 너무 낮으면 실제 운영 중에 불편함을 겪을 수 있습니다. 특히 이미지가 많은 블로그나 플러그인을 여러 개 사용하는 WordPress라면 한 번쯤 확인해볼 만한 항목입니다.
③ 이미지 업로드가 안 되는 이유
WordPress를 운영하다 보면 이미지가 올라가지 않거나, 업로드 제한에 걸리는 경우가 있습니다. 이때 가장 먼저 확인할 값은 upload_max_filesize와 post_max_size입니다.
예를 들어 upload_max_filesize가 2M으로 설정되어 있다면 5MB 이미지를 올릴 수 없습니다. 그런데 upload_max_filesize만 늘렸다고 항상 해결되는 것도 아닙니다. post_max_size가 더 작게 잡혀 있으면 전체 전송 크기 제한에 걸릴 수 있기 때문입니다.
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 60
이런 설정은 예시일 뿐입니다. 실제 값은 서버 메모리, 이미지 크기, 운영 목적에 맞춰 조정해야 합니다. 중요한 것은 이미지 업로드 문제가 생겼을 때 어디부터 확인해야 하는지 아는 것이었습니다.
④ OPcache는 왜 WordPress를 빠르게 만들까?
OPcache는 PHP 성능을 이야기할 때 자주 나오는 기능입니다. 처음에는 이름부터 조금 어렵게 느껴졌습니다. 하지만 아주 단순하게 생각하면, 자주 쓰는 PHP 코드를 매번 새로 해석하지 않도록 도와주는 캐시 기능에 가깝습니다.
비유하자면 자주 보는 책을 매번 책장 깊숙한 곳에서 꺼내는 대신, 책상 위에 올려두는 것과 비슷합니다. WordPress는 PHP 파일을 계속 실행해야 하기 때문에, OPcache가 활성화되어 있으면 반복 작업을 줄이는 데 도움이 될 수 있습니다.
- OPcache: PHP 코드를 캐시해 반복 처리 부담을 줄이는 기능
- Object Cache: 데이터베이스 조회 결과 등을 캐시하는 방식
- Redis: Object Cache를 구성할 때 자주 언급되는 별도 캐시 저장소
이번 글에서는 Redis까지 깊게 들어가지는 않겠습니다. 지금 단계에서는 OPcache가 PHP 실행 부담을 줄이는 기본 캐시라는 점만 이해해도 충분하다고 생각했습니다.
⑤ Docker에서는 어디에서 설정할까?
Docker로 WordPress를 운영할 때는 PHP 설정을 어디에서 바꿔야 하는지도 헷갈릴 수 있습니다. 서버에 직접 설치한 WordPress라면 php.ini를 찾아 수정하면 되지만, Docker 환경에서는 컨테이너 구조를 함께 생각해야 합니다.
대표적인 방법은 사용자 정의 php.ini 파일을 만들어 컨테이너에 연결하거나, Dockerfile로 이미지를 커스터마이징하는 방식입니다. 처음에는 간단히 설정 파일을 마운트하는 방식부터 이해하는 편이 좋았습니다.
services:
wordpress:
image: wordpress:latest
volumes:
- ./wordpress_data:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
그리고 uploads.ini에는 이런 값을 넣을 수 있습니다.
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 60
설정을 바꾼 뒤에는 컨테이너를 다시 시작해야 적용되는 경우가 많습니다. 그래서 변경 전에는 현재 설정을 기록해두고, 변경 후에는 실제로 적용됐는지 확인하는 습관이 필요했습니다.
⑥ 무조건 메모리를 크게 주면 될까?
성능 최적화를 생각하다 보면 메모리를 크게 주면 무조건 빨라질 것 같다는 생각이 듭니다. 예를 들어 128M보다 512M가 좋아 보이고, 512M보다 1024M가 더 좋아 보일 수 있습니다.
하지만 실제 운영에서는 무조건 크게 주는 것이 답은 아니었습니다. 서버 전체 메모리는 한정되어 있고, WordPress 외에도 MariaDB나 다른 컨테이너가 함께 동작할 수 있기 때문입니다. 특히 Intel N100 홈서버처럼 여러 서비스를 함께 운영하는 환경에서는 균형이 더 중요했습니다.
- 먼저 현재 증상을 확인합니다.
- 이미지 업로드 문제인지, 관리자 화면 문제인지 구분합니다.
- PHP 로그와 WordPress 상태를 확인합니다.
- 필요한 값만 단계적으로 조정합니다.
- 변경 후 실제 체감과 로그를 다시 확인합니다.
성능 최적화는 숫자를 크게 만드는 작업이 아니라, 현재 환경에 맞게 필요한 값을 찾는 과정에 가까웠습니다.
운영노트
아래 표는 WordPress 성능 최적화를 위해 먼저 확인할 수 있는 PHP 기본 설정입니다. 실제 권장값은 서버 사양, 플러그인 수, 이미지 사용량, 운영 목적에 따라 달라질 수 있습니다.
| 확인 항목 | 예시 값 | 운영 판단 |
|---|---|---|
memory_limit |
256M | 플러그인과 관리자 작업량에 따라 조정 |
upload_max_filesize |
64M | 이미지 업로드 크기에 맞게 조정 |
post_max_size |
64M | 업로드 제한과 함께 확인 |
max_execution_time |
60 | 업데이트와 가져오기 작업에 영향 |
| OPcache | 활성 권장 | PHP 반복 실행 부담 감소 |
| 이미지 용량 | WEBP 압축 | 페이지 로딩 속도에 직접 영향 |
에디터의 해석노트
WordPress 성능은 서버 사양만으로 결정되는 줄 알았습니다. 그런데 하나씩 살펴보니 PHP 설정만 조금 바꿔도 체감이 달라질 수 있는 부분들이 있었습니다.
특히 이미지 업로드 제한이나 PHP 메모리처럼 평소에는 잘 보이지 않는 값들이 실제 운영에서는 꽤 자주 영향을 줄 수 있었습니다. 사이트가 느릴 때 무조건 플러그인부터 의심하기보다, 기본 실행 환경을 먼저 확인해야겠다는 생각이 들었습니다.
앞으로는 성능이 아쉬울 때 서버를 바꾸거나 설정을 크게 올리기보다, 현재 상태를 먼저 확인하고 필요한 값만 조금씩 조정하는 방식으로 운영해보려고 합니다.
참고 링크 (References)
트러블슈팅
문제: WordPress가 느리거나 이미지 업로드, 플러그인 설치 과정에서 오류가 발생함
WordPress를 운영하다 보면 관리자 화면이 느려지거나, 이미지 업로드가 실패하거나, 플러그인 설치 중 메모리 관련 오류가 나타날 수 있습니다. 이때는 WordPress 화면만 보지 말고 PHP 설정과 컨테이너 로그를 함께 확인하는 것이 좋습니다.
확인: PHP 메모리, 업로드 제한, 실행 시간, OPcache, 컨테이너 로그를 순서대로 점검
# WordPress 컨테이너 상태 확인
docker compose ps
# WordPress 로그 확인
docker compose logs wordpress --tail=100
# 설정 파일 마운트 후 컨테이너 재시작
docker compose restart wordpress
원인: PHP 메모리 부족, 업로드 제한값 부족, 실행 시간 제한, 이미지 용량 과다, 플러그인 충돌, 설정 파일 미적용
해결: memory_limit, upload_max_filesize, post_max_size, max_execution_time 값을 확인하고, Docker 환경에서는 설정 파일이 컨테이너에 제대로 마운트되었는지 점검합니다.
- 이미지 업로드 실패:
upload_max_filesize와post_max_size를 함께 확인합니다. - 메모리 부족 오류:
memory_limit값을 확인합니다. - 설정 미적용: 컨테이너를 재시작하고 설정 파일 경로를 확인합니다.
- 관리자 화면 느림: 플러그인 수, 이미지 용량, PHP 설정을 함께 확인합니다.
- 타임아웃:
max_execution_time과 서버 리소스를 점검합니다.
이번 단계에서는 값을 한 번에 크게 바꾸기보다, 작은 설정을 하나씩 바꿔보고 실제로 어떤 차이가 있는지 확인하는 편이 더 안전하다고 느꼈습니다.
마무리
WordPress를 더 빠르게 만드는 방법을 살펴보면서, 성능 최적화가 특별한 기술 하나로 끝나는 일이 아니라는 걸 알게 됐습니다. PHP 메모리, 업로드 제한, 실행 시간, OPcache, 이미지 용량처럼 기본 환경을 차례대로 확인하는 과정에 더 가까웠습니다.
서버 사양을 높이면 어느 정도 도움이 될 수는 있습니다. 하지만 현재 설정을 모른 채 무작정 값을 크게 주는 방식은 좋은 운영이라고 보기 어려웠습니다. 특히 홈서버처럼 여러 서비스를 함께 운영하는 환경에서는 필요한 만큼만 조정하는 균형이 중요했습니다.
다음 글에서는 실제 홈서버 운영 관점에서 WordPress와 MariaDB의 로그를 어떻게 확인하고 관리할 수 있는지 살펴보겠습니다.
'코어-테크 : 트러블 슈팅 노트' 카테고리의 다른 글
| WordPress 설치 후 가장 먼저 해야 할 설정 : 안정적인 운영을 위한 기본 점검 (0) | 2026.06.18 |
|---|---|
| Docker에서 WordPress를 설치해보자 : MariaDB와 연결되는 첫 번째 웹서비스 (0) | 2026.06.17 |
| WordPress는 왜 데이터베이스가 필요할까? 블로그 뒤에서 일어나는 일들 (0) | 2026.06.16 |
| 데이터베이스는 어디에 사용할까? 홈서버 서비스와 MariaDB 연결하기 (0) | 2026.06.15 |
| MariaDB 운영 1주일 회고 : 구축부터 백업까지 배운 것들 (0) | 2026.06.14 |