Artisan이란
Artisan은 Laravel에 동봉된 커맨드 라인 인터페이스(CLI) 도구입니다. 프로젝트 루트의artisan 스크립트로 존재하며, 개발·운영을 효율화하는 다수의 명령을 제공합니다.
사용 가능한 명령 목록을 확인하려면 list 명령을 사용합니다.
help를 앞에 붙입니다.
Laravel Sail을 사용하는 경우,
php artisan 대신 sail artisan을 사용하세요.
명령은 Docker 컨테이너 내에서 실행됩니다.Tinker
Laravel Tinker는 Eloquent 모델이나 잡, 이벤트 등 애플리케이션 전체를 커맨드 라인상에서 대화형으로 조작할 수 있는 REPL 환경입니다.커스텀 명령 만들기
명령 생성하기
make:command로 명령 클래스의 스켈레톤을 생성합니다.
app/Console/Commands/ImportProducts.php가 생성됩니다.
명령의 기본 구조
생성된 명령 클래스에는$signature, $description, handle()이라는 3가지 주요 요소가 있습니다.
Laravel 13에서는 PHP 어트리뷰트를 사용한 작성 방식도 사용할 수 있습니다.
인수와 옵션 정의
$signature에 명령 이름·인수·옵션을 함께 정의합니다.
인수와 옵션 취득
handle() 메서드 내에서 argument()와 option()을 사용하여 값을 취득합니다.
input() — 타입 액세서
input() 메서드를 사용하면 HTTP 요청과 동일한 타입 액세서로 명령의 인수나 옵션을 취득할 수 있습니다.
사용자와의 상호작용
메시지 출력
콘솔에 색상이 있는 메시지를 출력하는 메서드가 준비되어 있습니다.사용자에게 질의
대화적으로 사용자로부터 입력을 받을 수 있습니다.진행률 바
대량 데이터 처리 중 진행 상황을 알기 쉽게 표시할 수 있습니다.실용적인 유즈케이스
데이터 임포트 명령
CSV 파일에서 상품 데이터를 임포트하는 실전적인 명령의 예입니다.1
명령 생성하기
2
명령 구현하기
3
명령 실행하기
정기 유지보수 명령
오래된 데이터 삭제 등, 정기적으로 실행하는 유지보수 명령의 예입니다.스케줄 실행과 조합
작성한 명령은routes/console.php에서 스케줄 실행할 수 있습니다.
자세한 내용은 작업 스케줄링을 참조하세요.
명령 테스트
Laravel의 테스트 기능을 사용하여 Artisan 명령의 동작을 검증할 수 있습니다.artisan() 메서드에서 사용 가능한 어서션 메서드의 예:dev 명령
dev Artisan 명령은, 로컬 개발에 필요한 여러 프로세스를 하나의 터미널 창에서 함께 시작합니다. 기본적으로 PHP 개발 서버·큐 워커·Pail에 의한 로그 모니터링·Vite의 에셋 컴파일이 병렬로 실행됩니다.
concurrently라는 npm 패키지를 사용하여 프로세스를 관리합니다. 각 프로세스는 라벨링되고 색상으로 구분되므로, 터미널 출력에서 어떤 프로세스인지 쉽게 구별할 수 있습니다. 어느 프로세스가 실패하면 다른 모든 프로세스도 자동으로 정지됩니다.
기본으로 실행되는 프로세스는 다음과 같습니다.
vite 프로세스는 사용 중인 Node 패키지 매니저(npm, pnpm, Yarn, Bun)를 자동 감지하여 적절한 실행 명령을 사용합니다.dev 프로세스 커스터마이징
dev 명령이 실행하는 프로세스는 DevCommands 클래스를 사용하여 커스터마이즈할 수 있습니다. 보통 애플리케이션의 AppServiceProvider의 boot 메서드 내에서 등록합니다. register 메서드는 명령 문자열과 임의의 프로세스명을 받습니다.
php artisan을 앞에 붙여주는 artisan 메서드를 사용할 수 있습니다.
node 메서드는 감지된 패키지 매니저의 실행 명령(예: npm run)을, nodeExec 메서드는 패키지 매니저의 exec 명령(예: npx)을 앞에 붙입니다.
blue, purple, pink, orange, green, yellow입니다. color 메서드에 커스텀 hex 컬러를 전달할 수도 있습니다.
dev 프로세스를 실제로 시작하지 않고 목록만 표시하고 싶다면 dev:list 명령을 사용합니다.
dev 프로세스 필터링
only 메서드를 사용하면 dev 명령 실행 시 특정 프로세스만 시작하도록 지정할 수 있습니다. 마찬가지로 except 메서드로 특정 프로세스를 제외할 수도 있습니다.