| name | laravel-verification |
| description | Laravel 프로젝트를 위한 검증 루프입니다. 환경 점검, 린트, 정적 분석, 커버리지 포함 테스트, 보안 점검, 배포 준비 상태를 확인합니다. |
| origin | ECC |
Laravel 검증 루프
PR 생성 전, 큰 변경 후, 배포 전에 실행합니다.
사용 시점
- Laravel 프로젝트에서 pull request를 열기 전
- 대규모 리팩터링이나 의존성 업그레이드 이후
- 스테이징 또는 운영 배포 전 검증
- 전체 lint -> test -> security -> deploy readiness 파이프라인을 돌릴 때
동작 방식
- 환경 점검부터 배포 준비 상태까지 단계를 순차적으로 실행하며, 각 단계는 이전 단계의 성공을 전제로 합니다.
- 환경과 Composer 점검은 다른 모든 단계의 선행 조건이므로 실패 시 즉시 중단합니다.
- 전체 테스트와 커버리지를 실행하기 전에 린트와 정적 분석이 깨끗해야 합니다.
- 보안 및 마이그레이션 검토는 테스트 이후에 수행해, 데이터 변경이나 릴리스 단계 전에 동작을 검증합니다.
- 빌드/배포 준비 상태와 큐/스케줄러 점검은 마지막 게이트이며, 여기서 실패하면 릴리스를 막아야 합니다.
1단계: 환경 점검
php -v
composer --version
php artisan --version
.env가 존재하고 필수 키가 있는지 확인합니다.
- 운영 환경에서는
APP_DEBUG=false인지 확인합니다.
APP_ENV가 대상 배포 환경(production, staging)과 일치하는지 확인합니다.
로컬에서 Laravel Sail을 사용 중이라면:
./vendor/bin/sail php -v
./vendor/bin/sail artisan --version
1.5단계: Composer 및 오토로드
composer validate
composer dump-autoload -o
2단계: 린트 및 정적 분석
vendor/bin/pint --test
vendor/bin/phpstan analyse
프로젝트가 PHPStan 대신 Psalm을 사용한다면:
vendor/bin/psalm
3단계: 테스트 및 커버리지
php artisan test
커버리지(CI):
XDEBUG_MODE=coverage php artisan test --coverage
CI 예시(포맷 -> 정적 분석 -> 테스트):
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
4단계: 보안 및 의존성 점검
composer audit
5단계: 데이터베이스 및 마이그레이션
php artisan migrate --pretend
php artisan migrate:status
- 파괴적 마이그레이션은 특히 신중히 검토합니다.
- 마이그레이션 파일명이
Y_m_d_His_* 형식을 따르는지 확인합니다. 예: 2025_03_14_154210_create_orders_table.php
- 롤백이 가능한지 확인합니다.
down() 메서드를 검증하고, 명시적 백업 없이 되돌릴 수 없는 데이터 손실을 피합니다.
6단계: 빌드 및 배포 준비 상태
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
- 운영 설정에서 캐시 예열이 성공하는지 확인합니다.
- 큐 워커와 스케줄러가 설정되어 있는지 검증합니다.
- 대상 환경에서
storage/, bootstrap/cache/가 쓰기 가능한지 확인합니다.
7단계: 큐 및 스케줄러 점검
php artisan schedule:list
php artisan queue:failed
Horizon을 사용한다면:
php artisan horizon:status
queue:monitor를 사용할 수 있다면, 작업을 처리하지 않고 백로그를 점검하는 데 사용합니다.
php artisan queue:monitor default --max=100
능동 검증(스테이징 전용): 전용 큐에 no-op 작업을 발행하고 단일 워커로 처리해 봅니다. sync가 아닌 큐 연결이 설정돼 있어야 합니다.
php artisan tinker --execute="dispatch((new App\\Jobs\\QueueHealthcheck())->onQueue('healthcheck'))"
php artisan queue:work --once --queue=healthcheck
작업이 예상된 부수 효과(로그 항목, 헬스체크 테이블 row, 메트릭)를 남겼는지 확인합니다.
테스트 작업을 처리해도 안전한 비운영 환경에서만 실행합니다.
예시
최소 흐름:
php -v
composer --version
php artisan --version
composer validate
vendor/bin/pint --test
vendor/bin/phpstan analyse
php artisan test
composer audit
php artisan migrate --pretend
php artisan config:cache
php artisan queue:failed
CI 스타일 파이프라인:
composer validate
composer dump-autoload -o
vendor/bin/pint --test
vendor/bin/phpstan analyse
XDEBUG_MODE=coverage php artisan test --coverage
composer audit
php artisan migrate --pretend
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan schedule:list