배움/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

이 명령은 지속적으로 돌아가면서 작업을 실시간으로 체크합니다. 

반응형