워드프레스 관리 화면은 훌륭합니다. 다만 관리 화면에서 한 일에는 기록이 남지 않습니다. 어떤 순서로 무엇을 눌렀는지 설명하려면 글로 다시 써야 하고, 같은 일을 스테이징에서 한 번 더 하려면 사람이 그 글을 보고 다시 눌러야 합니다.
WP-CLI 는 워드프레스의 공식 명령줄 도구입니다. 같은 일을 명령으로 하면 그 명령이 곧 문서이고, 스크립트이고, 나중에는 CI 가 실행하는 검사가 됩니다. 이 연재는 그 이동을 여덟 회차에 걸쳐 다룹니다.
명령이 클릭보다 나은 지점
속도가 이유의 전부는 아닙니다. 실제로 갈리는 것은 같은 작업을 두 번째로 할 때입니다.
설치 — 파일 하나를 내려받는 일
WP-CLI 는 단일 .phar 파일로 배포됩니다. 내려받아서 실행 권한을 주고 경로에 두면 끝입니다.
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
중간의 --info 를 건너뛰지 마세요. 어떤 PHP 바이너리로 실행되는지, 그 PHP 의 버전과 설정 파일이 무엇인지가 여기서 나옵니다. 나중에 생기는 문제의 상당수가 웹서버가 쓰는 PHP 와 CLI 가 쓰는 PHP 가 다르다는 사실에서 출발합니다.
서버와 로컬에서 달라지는 것
같은 도구지만 실행 환경이 다르면 신경 쓸 지점이 달라집니다. 세 가지를 처음에 정해 두면 이후가 조용합니다.
실행 사용자가 가장 중요합니다. root 로 실행하면 WP-CLI 가 경고를 냅니다. --allow-root 로 넘길 수는 있지만, 그때 만들어진 캐시 · 업로드 · 로그 파일의 소유자가 root 가 되어 이후 웹서버가 그 파일을 쓰지 못합니다. 서버에서는 sudo -u www-data wp … 형태로 웹서버 사용자를 지정해 실행합니다.
PHP 바이너리는 로컬에서 문제가 됩니다. 시스템 PHP 와 로컬 개발 도구가 제공하는 PHP 가 다른 경우가 흔하고, 그러면 CLI 에서만 확장 모듈이 없거나 버전이 낮아 이상한 오류가 납니다. 해결은 간단합니다 — PHP 경로를 고정한 짧은 래퍼 스크립트를 저장소에 두고 팀 전체가 그것만 씁니다.
위치는 --path= 로 넘깁니다. 저장소 루트와 워드프레스 문서 루트가 다른 구조(예: 저장소 안의 wordpress/ 폴더)에서는 이 플래그가 없으면 명령이 어디서도 동작하지 않습니다.
첫 다섯 명령
설치가 끝나면 이 다섯 개를 순서대로 돌려 보세요. 사이트의 상태를 한 화면에서 파악할 수 있습니다.
wp --info
wp core version --extra
wp option get home
wp plugin list --status=active --field=name
wp db check
네 번째가 특히 유용합니다. 활성 플러그인 목록을 문서에 적어 둔 목록과 대조하면, 누가 언제 무엇을 더 설치했는지가 즉시 드러납니다. 이 한 줄이 나중에 CI 검사의 첫 항목이 됩니다(8회차).
첫날 만나는 두 가지 오류
“This does not seem to be a WordPress installation” — 현재 디렉터리에 워드프레스가 없다는 뜻입니다. --path 를 주거나 문서 루트로 이동합니다.
데이터베이스 연결 실패 — 웹에서는 사이트가 멀쩡한데 CLI 만 실패한다면, 대개 DB 호스트 이름이 CLI 환경에서 다르게 해석되는 경우입니다. 소켓 경로나 hosts 별칭이 웹서버 컨텍스트에서만 유효하게 설정돼 있는지 확인합니다.
플러그인 하나가 치명적 오류를 내서 명령 자체가 뜨지 않을 때는 --skip-plugins --skip-themes 로 최소 부팅해 들어갈 수 있습니다. 원인을 찾는 첫걸음이 이 플래그입니다.
관련 글은 개발 워크플로우 아카이브에 모여 있고, 이 사이트에서 배포하는 무료 진단 도구들은 무료 도구에서 명령줄 사용법과 함께 안내합니다.
다음 회차
도구가 준비됐으니 실제 데이터를 다룰 차례입니다. 다음 회차는 글과 텀을 명령으로 다루는 방법인데, 첫 규칙이 하나 있습니다 — 수정보다 목록이 먼저입니다.