워드프레스 데이터베이스의 불필요한 데이터 정리 가이드
워드프레스 사이트를 오래 운영하면 데이터베이스에 수정 이력(리비전), 임시 데이터(트랜션트), 쓰레기 글/댓글, 사용하지 않는 메타 정보 등 불필요한 데이터가 쌓입니다. 이러한 데이터는 백업 크기 증가, 관리 불편, 일부 경우 성능 저하로 이어질 수 있습니다. 이 글에서는 안전하게 정리하는 순서와 실제로 사용할 수 있는 명령/쿼리 예시, 주의사항을 정리합니다.
왜 정리가 필요한가?
- 백업 파일 크기 감소: 불필요한 데이터가 많으면 백업 용량과 전송 시간이 늘어납니다.
- 관리 편의성: 데이터베이스가 깔끔하면 문제 원인 추적과 유지보수가 쉬워집니다.
- 잠재적 성능 개선: 모든 사이트에서 큰 성능 향상이 보장되진 않지만, 과도하게 쌓인 항목은 쿼리 비용을 증가시킬 수 있습니다.
정리 전 반드시 해야 할 준비
- 전체 백업(파일 + 데이터베이스)을 만듭니다. 복구 방법을 확인하세요.
- 스테이징 환경에서 먼저 테스트하세요. 라이브에서 바로 쿼리 실행은 위험합니다.
- 관리자 권한과 DB 접근 권한을 확인합니다 (phpMyAdmin, Adminer, SSH + wp-cli 등).
- 사용 중인 플러그인(특히 캐시·DB 관련)의 동작을 파악하세요. 일부 플러그인은 데이터를 자체적으로 관리합니다.
정리할 수 있는 주요 항목과 처리 방법
1) 게시물 리비전(Post Revisions)
작성 중인 글의 수정 이력이 쌓입니다. 유용하지만 너무 많으면 불필요합니다.
- 안전한 삭제(스테이징에서 먼저 실행):
DELETE FROM wp_posts WHERE post_type = 'revision';
또는 WP-CLI 사용:
wp post delete $(wp post list --post_type='revision' --format=ids)
사후 조치: wp-config.php에 리비전 수 제한 추가
define('WP_POST_REVISIONS', 5); // 또는 false 로 리비전 비활성화
주의: 리비전을 완전히 제거하면 이전 상태로 복원할 수 없으니 백업 후 진행하세요.
2) 임시저장(autosave)과 임시 데이터
자동 저장된 임시 글이나 자동 저장 간격으로 인해 데이터가 늘어납니다. AUTOSAVE_INTERVAL을 늘리거나 필요 시 정리합니다.
define('AUTOSAVE_INTERVAL', 300); // 예: 300초
3) 휴지통(trashed posts)과 자동 저장된 초안(auto-drafts)
DELETE FROM wp_posts WHERE post_status = 'trash';
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
특정 날짜 이전의 휴지통만 삭제하려면 WHERE 조건에 post_date 추가하세요.
4) 스팸/휴지 댓글
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';
WP-CLI로는:
wp comment delete $(wp comment list --status=spam --format=ids)
5) 트랜션트(Transients)
일시적 캐시 데이터로, 만료되지 않았지만 더 이상 필요 없는 항목이 남을 수 있습니다.
DELETE FROM wp_options WHERE option_name LIKE ('%\_transient\_%');
또는 WP-CLI:
wp transient delete --all
주의: 일부 플러그인은 트랜션트를 적극적으로 사용하므로 서비스 영향 여부를 확인하세요.
6) 오라팬(Orphan) postmeta/usermeta/termmeta
게시물이나 사용자 본문이 삭제되었는데 관련 메타가 남는 경우가 있습니다. 삭제 전 반드시 백업하세요.
-- 예시: 존재하지 않는 post_id에 대한 postmeta 삭제 (주의!)
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;
위 쿼리는 신중히, 스테이징에서 먼저 테스트하세요.
7) wp_options 테이블의 불필요한 항목
일부 플러그인이 옵션을 남기는 경우가 있습니다. 크기가 큰 옵션을 찾는 쿼리:
SELECT option_name, LENGTH(option_value) AS size
FROM wp_options
ORDER BY size DESC
LIMIT 30;
큰 항목을 삭제하거나 플러그인 설정을 통해 정리하세요. 삭제 전 항목의 역할을 반드시 확인하세요.
8) 데이터베이스 오버헤드와 테이블 최적화
삭제 후에는 테이블 최적화를 권장합니다.
OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;
-- 또는 전체 테이블:
OPTIMIZE TABLE wp_options, wp_comments, wp_commentmeta, ...
phpMyAdmin이나 MySQL 단일 명령에서 실행할 수 있습니다.
안전하게 진행하는 권장 순서
- 전체 백업(파일 + DB) 확인
- 스테이징에서 정리 절차 테스트
- 리비전 → 트랜션트 → 휴지통/스팸 댓글 → 오라팬 메타 순으로 정리
- 테이블 최적화(OPTIMIZE TABLE)
- 사이트 기능 점검(관리 페이지·포스트 편집·댓글 등)
자동화 및 유지 관리 팁
- 정기 백업 스케줄(주간 또는 사이트 변경 빈도에 따라 조정)
- 크론 작업으로 트랜션트와 임시 데이터 정리 스크립트 실행(테스트 후 적용)
- 리비전 수 제한 및 autosave 간격 설정
- 검증된 DB 정리 플러그인 사용(예: WP-Optimize, Advanced Database Cleaner 등)—플러그인 사용 시에도 백업은 필수
체크포인트
- 전체 백업을 완료했는가?
- 스테이징에서 먼저 테스트했는가?
- 삭제 대상이 실제로 불필요한 데이터인지 확인했는가?
- 대량 삭제 후 사이트 기능을 점검했는가?
- 정리 후 테이블 최적화를 수행했는가?
FAQ
1. 데이터 삭제가 사이트에 영향을 주지 않을까요?
가능성이 있습니다. 특히 사용 중인 플러그인이 특정 데이터를 필요로 하는 경우 문제가 생길 수 있으므로, 삭제 전 백업과 스테이징 테스트는 필수입니다. 안전한 순서와 소량 테스트 후 점진적으로 진행하세요.
2. 얼마나 자주 정리해야 하나요?
사이트 활동량에 따라 다릅니다. 게시물 작성/수정이 빈번한 블로그는 1~3개월에 한 번, 변경이 적은 사이트는 분기별로 점검하는 것이 일반적입니다. 트래픽·콘텐츠 변경이 많을수록 더 자주 확인하세요.
3. 플러그인을 사용해도 되나요? 어떤 걸 선택해야 하나요?
검증된 플러그인은 편리합니다. 다만 플러그인 자체가 많은 옵션을 남기는 경우도 있어, 플러그인 리뷰와 업데이트 빈도, 사용자 평가를 확인하세요. 플러그인 사용 전 항상 백업을 권장합니다.
마무리
워드프레스 데이터베이스 정리는 사이트 유지관리의 중요한 부분입니다. 그러나 무분별한 삭제는 서비스 장애로 이어질 수 있으므로, 항상 백업하고 스테이징에서 먼저 테스트하세요. 위의 절차와 쿼리·명령어는 출발점으로 활용하시고, 각 사이트의 구조와 플러그인 구성에 맞춰 신중히 적용하시기 바랍니다.
답글 남기기