워드프레스를 운영하다 보면 어느 시점에서 이상한 순간이 온다. 처음에는 하루에 몇 개씩 들어오던 댓글이 어느 날부터 급격히 늘어나기 시작하고, 며칠 바쁘게 지내고 돌아와 관리자 페이지를 열어보면 숫자가 비정상적으로 커져 있다. “승인 대기 3,000”, “스팸 12,000” 같은 숫자가 아니라, 이미 눈으로 처리할 수 없는 단위가 되어 있다. 그리고 그때부터 사이트의 상태가 서서히 바뀐다. 글 페이지는 아직 열리는데 관리자 화면이 무겁고, 댓글 페이지는 로딩이 끝나지 않으며, 가끔은 로그인 후 대시보드로 넘어가는 데만도 몇 초 이상이 걸린다. 특별히 서버를 건드린 적도 없는데 체감 속도가 갑자기 나빠지는, 워드프레스 운영자라면 한 번쯤 겪게 되는 단계다.
이 상태에서 가장 먼저 시도하는 것은 관리자 화면에서의 대량 삭제이다. 페이지를 열고, 20개씩 체크하고, 휴지통으로 보내고, 다시 다음 페이지로 넘어간다. 그런데 이 과정 자체가 이미 서버에게는 상당한 부담이 된다. 워드프레스는 댓글 목록을 표시하기 위해 DB에서 데이터를 읽고, 정렬하고, 화면에 렌더링한다. 댓글이 수만 개가 되면 목록 한 번 불러오는 것만으로도 데이터베이스 쿼리가 크게 늘어나고, 작은 사양의 서버에서는 이 과정이 반복되면서 결국 연결 에러나 타임아웃으로 이어진다. 흔히 보게 되는 Error establishing a database connection은 단순히 DB가 고장 난 것이 아니라, 처리해야 할 데이터 양이 갑자기 늘어나면서 서버가 버티지 못하는 상황에서 발생하기도 한다.
이럴 때 필요한 것은 “관리자 기능”이 아니라 “데이터 정리”이다. 즉, 워드프레스 화면을 통해 삭제하는 것이 아니라 데이터베이스에서 직접 댓글을 제거하는 방식이다. 댓글은 워드프레스 내부적으로 wp_comments 테이블에 저장되고, 댓글의 추가 정보는 wp_commentmeta 테이블에 쌓인다. 따라서 이 두 테이블을 정리하면 화면을 거치지 않고 댓글 자체를 한 번에 제거할 수 있다. 관리자 페이지에서 며칠 동안 반복해야 할 작업이 DB에서는 몇 초 안에 끝난다.

1. 백업부터 진행하기
DB를 직접 수정하기 전에 먼저 해야 할 것은 백업이다. 특히 댓글만 정리하는 경우라면 전체 DB가 아니라 댓글 테이블만 백업해도 충분하다. SSH로 서버에 접속한 뒤 아래 명령을 실행한다.
mysqldump -u root -p bitnami_wordpress wp_comments wp_commentmeta > comments_backup.sql
비밀번호 입력을 요구하면 DB 비밀번호를 입력하면 되고, 완료되면 현재 디렉토리에 comments_backup.sql 파일이 생성된다. 이 파일이 있으면 삭제 후 문제가 생겨도 원상 복구가 가능하다.
2. 데이터베이스 접속
이제 MariaDB(MySQL)에 접속한다.
mysql -u root -p bitnami_wordpress
접속이 완료되면 아래와 같은 프롬프트가 나타난다.
MariaDB [bitnami_wordpress]>
여기서부터는 DB 내부 명령어(SQL)를 입력하게 된다.
3. 테이블 이름(prefix) 확인
워드프레스는 기본적으로 wp_라는 접두사를 사용하지만, 설치 환경에 따라 wp7_, wp9_처럼 바뀌어 있을 수 있다. 따라서 먼저 테이블 목록을 확인한다.
SHOW TABLES;
목록에서 comments와 commentmeta가 포함된 테이블 이름을 확인한다. 만약 wp_comments가 아니라 wp7_comments라면 이후 명령어의 wp_를 동일하게 바꿔야 한다.
4. 삭제 전 댓글 개수 확인
현재 얼마나 쌓였는지 확인하면 이후 변화가 명확해진다.
승인 대기 댓글:
SELECT COUNT(*) FROM wp_comments WHERE comment_approved = '0';
스팸 댓글:
SELECT COUNT(*) FROM wp_comments WHERE comment_approved = 'spam';
여기서 수만 단위의 숫자가 나오면 정상적인 상황이 아니다. 이 숫자가 바로 사이트 속도를 떨어뜨리는 원인이 된다.
5. 스팸 및 대기 댓글 삭제
이제 실제 삭제 작업을 진행한다.
승인 대기 댓글 삭제:
DELETE FROM wp_comments WHERE comment_approved = '0';
스팸 댓글 삭제:
DELETE FROM wp_comments WHERE comment_approved = 'spam';
명령 실행 후 다음과 같은 메시지가 출력된다.
Query OK, XXXXX rows affected
표시되는 숫자가 삭제된 댓글 수이며, 관리자 화면에서 며칠 걸릴 작업이 이 한 줄로 끝난다.
6. 댓글 메타데이터 정리
댓글 본문만 삭제하면 메타데이터가 남는다. 이는 DB에 불필요한 데이터로 남아 성능 저하의 원인이 된다. 따라서 주인이 없는 메타데이터를 제거한다.
DELETE FROM wp_commentmeta
WHERE comment_id NOT IN (SELECT comment_ID FROM wp_comments);
이 과정에서도 상당한 수의 데이터가 추가로 삭제되는 경우가 많다.
7. 테이블 최적화
대량 삭제 후 DB는 공간이 비어 있어도 파일 크기가 줄어들지 않는 경우가 많다. 테이블을 최적화해 실제 용량과 성능을 회복시킨다.
OPTIMIZE TABLE wp_comments, wp_commentmeta;
이 작업이 완료되면 데이터베이스가 다시 정리된 상태가 된다.
8. 종료
exit
정리
워드프레스의 댓글 스팸 문제는 플러그인으로 막는 영역이 아니라, 일정 수준을 넘어서면 데이터 관리의 영역으로 넘어간다. 댓글 수가 수만 개가 된 시점부터는 관리자 화면 삭제가 오히려 서버에 부담을 주고, 사이트 전체의 안정성을 떨어뜨린다. 반대로 DB에서 직접 삭제하면 화면 렌더링 과정 없이 데이터를 바로 제거하기 때문에 서버 자원을 거의 사용하지 않는다.
대량 스팸 댓글은 사이트가 느려진 “결과”가 아니라, 사이트가 느려지는 “원인”이다. 한 번 정리하고 나면 관리자 페이지 로딩 속도와 DB 응답 속도가 동시에 정상화되는 경우가 많다. 워드프레스 운영에서 가장 중요한 것은 기능 추가가 아니라 불필요한 데이터를 쌓아두지 않는 것이다. 스팸 댓글 정리는 관리 작업이 아니라 유지보수 작업이며, SSH를 통한 DB 청소는 그 유지보수를 가장 빠르고 확실하게 끝내는 방법이다.












Leave a Reply