Technote

개발 워크플로우 심화

연재 로컬에서 프로덕션까지 8부 중 7부

워드프레스 프로젝트의 CI — 무엇을 자동으로 검사할 수 있나

전면적인 테스트 스위트가 없어도 CI 는 값을 합니다. 문법 · 코딩 표준 · 빌드 대조 · 부팅 스모크 넷이 현실적인 출발점입니다.

워드프레스 프로젝트에 CI 를 붙이려 하면 대개 “테스트가 없는데 무엇을 돌리나” 에서 멈춥니다. 그런데 테스트 스위트가 없어도 자동으로 잡을 수 있는 것이 꽤 있습니다. 그리고 그것들은 대체로 가장 창피한 종류의 사고 — 문법 오류가 프로덕션에 올라가거나, 빌드를 잊고 배포하거나, 플러그인 하나가 부팅을 막는 — 를 막아 줍니다.

현실적인 CI 파이프라인 넷 — 앞의 둘은 초 단위, 뒤의 둘은 분 단위로 끝난다

① 문법 — 가장 싸고 가장 확실하다

php -l 은 파싱만 하므로 매우 빠릅니다. 다만 파일을 하나씩만 받습니다 — 여러 개를 넘기면 첫 번째만 검사하고 끝납니다. xargs -n1 이 필수인 이유입니다.

find wp-content/themes wp-content/plugins -name '*.php' -not -path '*/vendor/*' -print0 | xargs -0 -n1 -P4 php -l

이 한 줄이 “치명적 오류로 흰 화면” 사고의 상당수를 막습니다. 파싱 오류는 파일이 로드되기만 하면 터지므로, 관리 화면 한 곳에서만 쓰이는 파일이라도 예외가 없습니다.

② 코딩 표준 — 리뷰에서 다투지 않기 위해

PHPCS 와 워드프레스 코딩 표준 규칙을 붙이면 들여쓰기 · 이스케이프 누락 · 접두사 규약을 사람이 아니라 도구가 지적합니다.

composer require --dev squizlabs/php_codesniffer wp-coding-standards/wpcs dealerdirect/phpcodesniffer-composer-installer
vendor/bin/phpcs --standard=phpcs.xml.dist

규칙 파일(phpcs.xml.dist)을 저장소에 두는 것이 중요합니다. 텍스트 도메인과 함수 접두사를 여기 적어 두면 번역 도메인 오타나 접두사 없는 전역 함수를 자동으로 잡습니다. 처음부터 모든 규칙을 켜면 경고 수천 건에 압도되므로, 바뀐 파일만 검사하도록 시작해 점차 넓히는 편이 실제로 굴러갑니다.

③ 빌드 산출물 대조 — “다시 빌드하는 걸 잊었다”

2회차에서 빌드 산출물을 커밋하기로 했다면, 그 산출물이 소스와 맞는지 확인하는 것은 사람이 아니라 CI 의 일입니다. 잊는 사고가 반드시 일어나고, 증상은 “왜 스타일이 안 바뀌지” 로 나타납니다.

npm ci
npm run build
git diff --exit-code assets/dist

--exit-code 는 차이가 있으면 실패로 끝냅니다. 다시 빌드한 결과가 커밋된 것과 다르면 그 자리에서 파이프라인이 멈춥니다.

④ 부팅 스모크 — 사이트가 실제로 뜨는가

가장 값어치 있는 검사입니다. 임시 DB 에 워드프레스를 설치하고, 우리 테마와 플러그인을 켜고, 홈이 200 으로 응답하는지 봅니다.

wp core install --url=http://127.0.0.1:8080 --title=CI --admin_user=ci --admin_password=ci --admin_email=ci@example.com --skip-email
wp theme activate our-theme
wp plugin activate --all
test "$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8080/)" = "200"

wp plugin activate --all 이 통과하는 것만으로도 활성화 시점의 치명적 오류가 걸러집니다. 함수 중복 선언이나 없는 클래스 참조가 여기서 드러납니다.

CI 가 말해 주지 않는 것

CI 가 잡는 것과 못 잡는 것 — 통과는 "깨지지 않았다" 이지 "잘 동작한다" 가 아니다

마지막으로 하나 — CI 로그에 비밀값이 남지 않게 합니다. 배포 키 · DB 비밀번호는 반드시 마스킹된 시크릿으로 주입하고, 디버그 출력에 환경변수를 통째로 찍는 스텝을 남겨 두지 않습니다. 3회차의 결론이 여기에도 그대로 적용됩니다.

자동화 전반은 개발 워크플로우 아카이브에 이어지고, 우리가 실제로 어떤 순서로 검증하고 배포하는지는 작업 과정에 공개돼 있습니다.

다음 회차

연재의 마지막 회차는 되돌리기입니다. 코드를 되돌린다고 DB 가 되돌아오지 않는다는 사실이 그 전부이고, 그래서 순서를 정해 두어야 합니다.

이 주제의 다른 글

노하우 목록으로

개발 워크플로우 심화

배포 전 디자인 QA 체크리스트

배포 후에 발견하는 디자인 문제의 대부분은 배포 전에 순서대로 확인하면 잡힙니다. 규칙 · 상태 · 실기기의 세 단계로 정리했습니다.

디자이너 3분 읽기

개발 워크플로우 심화

되돌릴 계획 없이 배포하지 않습니다

롤백은 버튼 하나가 아니라 코드와 데이터베이스 두 갈래이고, 되돌리는 순서가 있습니다. 그 순서를 배포 전에 적어 두는 것까지가 준비입니다.

디자이너 5분 읽기

₩270,000 · 신청하기