예약 작업
Doggy는 커스텀 TaskScheduler + Symfony Messenger 기반의 예약 작업 시스템을 내장하며 분산 실행과 다양한 작업 유형을 지원합니다.
개요
예약 작업 시스템은 src/Service/Task/에 있습니다:
src/Service/Task/
├── TaskHandlerInterface.php # 작업 핸들러 인터페이스
├── TaskHandlerLocator.php # 핸들러 로케이터
└── TaskScheduler.php # 스케줄러관련 엔티티는 src/Entity/System/에 있습니다:
| 엔티티 | 설명 |
|---|---|
Task.php | 작업 정의(Cron, 핸들러, 파라미터) |
TaskLog.php | 작업 실행 로그 |
예약 작업 생성
1. 작업 핸들러 구현
php
namespace App\Task;
use App\Service\Task\TaskHandlerInterface;
class ActivateAccountByHireDateTask implements TaskHandlerInterface
{
public function handle(array $params = []): void
{
// 비즈니스 로직 실행
}
}기존 작업 예시: src/Task/ActivateAccountByHireDateTask.php
2. 작업 등록
데이터베이스 또는 명령을 통해 등록:
bash
php bin/console app:run-scheduler스케줄 실행
TaskScheduler 구현 메커니즘:
- 데이터베이스에서 Task 설정 읽기
- Cron 표현식 파싱
TaskHandlerLocator로 핸들러 탐색- Symfony Messenger로 비동기 실행(
RunTaskMessage+RunTaskMessageHandler) - 실행 결과를
TaskLog에 기록
메시지 아키텍처
TaskScheduler → RunTaskMessage 전송
↓
Messenger (Doctrine Transport)
↓
RunTaskMessageHandler → TaskHandlerInterface::handle()
↓
TaskLog에 실행 결과 기록관리 인터페이스
진입점: App\Controller\Admin\TaskController
템플릿: templates/admin/task/index.html.twig
- 작업 목록 조회
- 실행 로그 조회
- 수동 실행 트리거
특징
- Cron 표현식 스케줄링
- 비동기 실행(Messenger 메시지 큐)
- 실행 상태 추적(TaskLog)
- 실패 재시도 메커니즘
- 확장 가능한 핸들러 인터페이스