Skip to content

예약 작업

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)
  • 실패 재시도 메커니즘
  • 확장 가능한 핸들러 인터페이스

MIT 라이선스 오픈소스 | Copyright © 2026 Doggy