배움/PHP
Laravel 11 라라벨 스케줄링(Scheduling)
spaces25
2025. 4. 16. 13:27
반응형
Laravel 11에서도 **스케줄링(Scheduling)**은 이전 버전과 마찬가지로 강력하고 직관적인 방식으로 제공됩니다. 다만, Laravel 11은 디렉터리 구조와 일부 설정 방식이 모듈화되고 간소화된 점이 있어서 이전 버전과 약간의 차이가 있을 수 있다..
🛠 Laravel 11에서의 Scheduling 기본 설정
1. 서버 Crontab에 등록 (변함 없음)
서버에 아래 cron을 한 줄만 등록하세요:
* * * * * cd /your-project-path && php artisan schedule:run >> /dev/null 2>&1
이 한 줄로 Laravel은 매 분마다 스케줄러를 실행하고, 내부에서 조건에 맞는 작업만 처리합니다.
2. 스케줄 정의 파일 위치
Laravel 11에서는 Console\Kernel.php가 최소화되었고, Artisan 명령어도 모듈화되었습니다.
하지만 여전히 스케줄은 app/Console/Kernel.php 파일에 정의합니다.
// app/Console/Kernel.php
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule): void
{
$schedule->command('emails:send')->dailyAt('09:00');
}
}
3. Artisan 커맨드 만들기
php artisan make:command SendEmailReport
생성된 커맨드는 app/Console/Commands/SendEmailReport.php에 위치하고, 내부는 이렇게 구성합니다:
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SendEmailReport extends Command
{
protected $signature = 'emails:send';
protected $description = '이메일 리포트를 전송합니다.';
public function handle(): void
{
// 이메일 전송 로직
logger('이메일 전송 완료');
}
}
✅ 자주 쓰는 스케줄링 메서드
메서드 | 설명 |
->everyMinute() | 매 분마다 |
->everyFiveMinutes() | 5분마다 |
->hourly() | 매 시간마다 |
->daily() | 매일 자정 |
->dailyAt('13:00') | 매일 오후 1시 |
->weeklyOn(1, '8:00') | 매주 월요일 오전 8시 |
->cron('*/10 * * * *') | cron 표현식 사용 가능 |
⚙️ 추가 옵션들
- 중복 방지
$schedule->command('emails:send')->withoutOverlapping();
- 출력 로그 저장
$schedule->command('emails:send')->appendOutputTo(storage_path('logs/emails.log'));
- 조건부 실행
$schedule->command('emails:send')->when(fn () => now()->isWeekday());
🧪 Laravel 11 스케줄러 테스트
로컬에서 테스트하려면 schedule:work를 사용할 수도 있어요:
php artisan schedule:work
이 명령은 지속적으로 돌아가면서 작업을 실시간으로 체크합니다.
반응형