[워드프레스] 36. WP-CLI : 명령줄로 워드프레스 다루는 법 (WP-CLI)

워드프레스 해부 36편 - 명령줄로 워드프레스 다루는 법 (WP-CLI)

작성자

카테고리:

* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

(워드프레스 해부 ㊱) WP-CLI

이 시리즈 내내 wp ... 명령이 계속 나왔다. 그게 WP-CLI다 — 관리자 화면 없이 명령줄로 워드프레스를 다루는 도구. 마지막 편은 이걸 제대로 정리하며 대장정을 마무리한다.

WP-CLI가 강력한 이유는, 지금까지 배운 걸 전부 명령 한 줄로 할 수 있어서다. 글 관리, DB 조회, 옵션 변경, 플러그인·테마 설치, 사용자 생성 — 화면을 안 열고도 된다. 대량 작업·자동화·이전에 특히 빛난다.

직접 해보기

$ wp --info                       # 설치·버전 확인
$ wp option get siteurl           # 옵션 조회
$ wp plugin install query-monitor --activate
$ wp user create bob [email protected] --role=editor

# 이전할 때 도메인 일괄 치환 (34편의 그 작업)
$ wp search-replace 'old.com' 'new.com' --dry-run   # 먼저 미리보기
$ wp search-replace 'old.com' 'new.com'

$ wp db export backup.sql         # 백업

특히 search-replace는 이전(34편)의 필수품이다. DB 안에는 직렬화된 데이터가 섞여 있어서 단순 SQL 치환은 위험한데, WP-CLI는 이걸 안전하게 처리한다. --dry-run으로 먼저 확인하는 습관을 들이자.

✅ 확인 — wp --info가 버전·경로를 출력하면 WP-CLI가 정상 동작하는 것이다. 이 시리즈에서 우리가 데이터베이스를 뜯고 옵션을 조회한 게 전부 이 도구 위에서였다.

설치와 첫 명령

WP-CLI는 wp라는 실행 파일 하나가 전부다. 서버에 내려받아 실행 권한을 주고 경로에 두면 끝난다. 워드프레스 폴더 안에서 실행하면 자동으로 그 사이트를 대상으로 동작한다.

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

wp --info          # 설치 확인
wp core version    # 이 사이트의 워드프레스 버전

자주 쓰는 명령 지도

지금까지 시리즈에서 스쳐 지나간 명령들을 한 표로 모으면 이렇다. 관리자 화면에서 클릭으로 하던 걸 거의 다 명령으로 할 수 있다.

하는 일명령
글 관리wp post list / create / delete
DB 백업·복원wp db export / import
옵션 변경wp option get / update
플러그인wp plugin install / activate / update –all
사용자wp user list / create
도메인 치환wp search-replace old new
캐시·크론wp cache flush / wp cron event run –all

진가는 반복·대량 작업에서 나온다

하나만 고치는 일이면 관리자 화면이 더 편하다. WP-CLI가 빛나는 건 수백 개를 한 번에, 또는 사람 손 없이 자동으로 처리할 때다. 모든 플러그인을 한 줄로 업데이트하고, 휴지통 글을 통째로 비우고, 이전할 때 도메인을 한 번에 바꾼다.

wp plugin update --all                         # 플러그인 전부 업데이트
wp post delete $(wp post list --post_status=trash --format=ids)   # 휴지통 비우기
wp search-replace 'old.com' 'new.com' --dry-run   # 이전 시 도메인 치환(미리보기)

원격과 자동화

--ssh 옵션을 주면 내 노트북에서 원격 서버의 워드프레스를 그대로 다룰 수 있다. 셸 스크립트나 크론에 넣어 백업·정리를 자동화하고, 배포 파이프라인에서 wp core update·wp plugin update를 돌리는 것도 흔하다. 반복되는 운영 작업일수록 WP-CLI로 옮기면 실수와 시간이 같이 줄어든다.

완성형 하나 — 주간 정비 스크립트

명령 나열을 넘어, 실제 크론에 걸어 쓸 만한 정비 스크립트 한 벌로 마무리하자. 이 정도면 ‘매주 손으로 하던 관리’가 통째로 사라진다.

#!/bin/bash
# weekly-maintenance.sh — 매주 일요일 새벽 크론
set -e
W="wp --path=/var/www/site"

$W db export /backup/db-$(date +%F).sql.gz   # 1) 백업 먼저 (철칙)
$W plugin update --all                        # 2) 플러그인 업데이트
$W theme update --all
$W post delete $($W post list --post_status=trash --format=ids) \
    2>/dev/null || true                       # 3) 휴지통 비우기
$W transient delete --expired                 # 4) 만료 트랜지언트 정리
$W cache flush                                # 5) 캐시 플러시
echo "OK $(date)" >> /var/log/wp-maint.log

순서가 곧 안전장치다 — 백업이 항상 1번이라, 이후 어느 단계가 사고를 내도 되돌릴 수 있다. set -e는 중간 실패 시 나머지를 진행하지 않게 한다.

그리고 search-replace의 --dry-run이 실제로 어떤 모양인지 — 실행 전 이 표를 보고 ‘어느 테이블이 몇 건 바뀔지’를 확인하는 것이다.

$ wp search-replace 'http://old.com' 'https://new.com' --dry-run
+------------------+-----------------------+--------------+------+
| Table            | Column                | Replacements | Type |
+------------------+-----------------------+--------------+------+
| wp_options       | option_value          | 6            | PHP  |  ← 직렬화 데이터
| wp_posts         | post_content          | 143          | SQL  |
| wp_postmeta      | meta_value            | 12           | PHP  |
+------------------+-----------------------+--------------+------+
Success: 161 replacements to be made.   ← 아직 아무것도 안 바뀜

Type이 PHP인 행이 단순 SQL 치환이 위험한 이유다 — 직렬화된 문자열은 길이 정보까지 함께 고쳐야 하는데, WP-CLI가 그걸 처리해 준다. 숫자가 납득되면 --dry-run만 떼고 재실행한다.

위험 — 되돌리기 버튼이 없다

강력한 만큼 조심해야 한다. wp db import·wp post delete·wp search-replace는 확인 창 없이 즉시 실행되고 되돌리기가 없다. 운영 서버에서 돌리기 전엔 반드시 wp db export로 백업부터 받고, 치환은 --dry-run으로 미리 확인하는 습관을 들이자. 이 한 가지만 지키면 WP-CLI는 위험한 도구가 아니라 가장 든든한 도구가 된다.

서버에서 자주 막히는 지점

WP-CLI를 서버에서 처음 돌릴 때 걸리는 것들이 몇 가지 정해져 있다. Error establishing a database connection이 뜨면 wp-config.php의 DB 정보가 틀렸거나, 워드프레스 폴더 밖에서 실행한 것이다(--path=/경로로 지정하면 된다). 메모리 부족으로 죽으면 php -d memory_limit=512M $(which wp) ...처럼 한도를 올려 실행한다.

하나 더, 권한 문제다. 웹서버와 다른 계정으로 wp를 돌려 파일을 만들면 소유권이 꼬여 나중에 웹에서 접근이 안 될 수 있다. 그래서 보통 웹서버 계정으로 실행한다(예: sudo -u www-data wp ...). 이 세 가지 — 경로, 메모리, 권한 — 만 기억하면 서버에서의 WP-CLI는 거의 막히지 않는다.

이걸로 「워드프레스 해부」 36편 대장정을 마친다. 폴더 하나의 역할부터 요청 생명주기, 데이터베이스 스키마, 훅과 쿼리, 확장과 테마, 그리고 운영까지 — 워드프레스의 뚜껑을 열고 안을 다 들여다봤다. 이제 워드프레스가 “돌아가는 블랙박스”가 아니라, 구조가 보이는 시스템일 것이다. 여기까지 따라와 줘서 고맙다.

자주 묻는 질문 (FAQ)

WP-CLI는 뭔가요?

명령줄로 워드프레스를 다루는 도구입니다. 플러그인 설치, DB 검색·치환, 사용자 관리 등을 화면 없이 빠르게 합니다.

WP-CLI가 왜 편한가요?

반복·대량 작업과 자동화에 강합니다. 예를 들어 wp search-replace로 도메인을 한 번에 바꿀 수 있습니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다