Vercel Schedules가 퍼블릭 베타로 공개되었습니다. 런타임에서 일회성 스케줄과 반복 스케줄을 만들고 관리할 수 있으며, 예약 작업은 Preview 환경에서 테스트할 수 있습니다.
크론 잡(Cron job)은 정기적으로 실행해야 하는 작업에 유용합니다. 일정에 맞춰 데이터베이스를 백업하거나 두 시스템 간 데이터를 동기화하는 일이 대표적입니다.
크론 잡은 코드에 한 번 정의해 두고, 설정을 수정한 뒤 다시 배포해야 변경할 수 있습니다. 하지만 요즘은 에이전트가 사용자와 상호작용하면서 작업이 계속 달라지기 때문에, 스케줄도 실시간으로 바꿀 수 있어야 합니다.
이에 Vercel은 에이전트와 애플리케이션이 재배포 없이 코드만으로 일회성 스케줄과 반복 스케줄을 만들고, 변경하고, 취소할 수 있도록 Vercel Schedules를 만들었습니다.
Schedules는 Vercel Cron Jobs의 정적인 방식을 바탕으로 하되, 애플리케이션이 실행 중인 상태에서 사용자와 에이전트가 작업 시점을 직접 정할 수 있도록 설계되었습니다. 스케줄은 Vercel에 작업을 언제 실행하고 어디로 보낼지 알려 주며, 실제 작업을 수행하는 코드는 애플리케이션에서 제공합니다.
스케줄은 정적 작업과 동적 작업 모두에 사용할 수 있습니다.
정적 스케줄은 실행 시점을 vercel.json 또는 Build Output API 설정에 두고, 배포할 때 동기화됩니다. 비공개 함수나 HTTP 경로를 호출하거나 Queue 토픽으로 메시지를 보낼 때 사용할 수 있습니다.
동적 스케줄은 앱이 실행되는 동안 JS SDK, CLI, API로 스케줄을 만들고 관리할 수 있습니다. Queue 토픽을 통해 일회성 작업과 반복 작업을 모두 지원합니다.
또한 Production에서 실행하기 전에 Preview 배포와 커스텀 환경에서 예약 작업을 테스트할 수 있습니다.
예를 들어 웹에 접근할 수 있는 에이전트에게 사용자가 "내일 아침에 Hacker News 상위 기사 다섯 개를 요약해 줘"라고 요청했다고 해 보겠습니다. 기존 방식에서는 요청 내용과 실행 시각을 데이터베이스에 저장해 두고, 크론 잡으로 실행할 때가 된 작업이 있는지 주기적으로 확인했습니다.
Schedules를 쓰면 별도의 데이터베이스나 폴링 잡 없이, 에이전트가 요청 내용과 실행 시점을 기록하는 스케줄을 직접 만들 수 있습니다. 아래 예시는 에이전트에 이 기능을 부여하는 AI SDK 도구를 정의한 코드입니다.
import { randomUUID } from 'node:crypto';
import { tool } from 'ai';
import { z } from 'zod';
import { Schedules } from '@vercel/schedules';
export function scheduleTaskTool(tenantId: string, userId: string) {
return tool({
description: 'Schedule a task to run at a future time.',
inputSchema: z.object({
task: z.string().min(1).max(1000),
at: z.string().describe('Future local time: YYYY-MM-DDTHH:mm'),
timezone: z.string().describe('IANA time zone, e.g. America/New_York'),
}),
execute: ({ task, at, timezone }) =>
Schedules.create({
name: `agent-task-${randomUUID()}`,
namespace: tenantId,
expression: { type: 'single', at },
timezone,
target: { topic: 'agent-work' },
payload: { userId, task },
}),
});
}에이전트 작업의 일회성 스케줄을 만드는 AI SDK 도구입니다.
실행할 시각이 되면 Vercel이 Queues를 통해 저장된 요청을 앱으로 전달합니다. 앱에서는 이 요청을 읽는 코드를 작성해 사용자의 현재 권한을 확인하고 에이전트를 시작합니다. 그러면 에이전트가 웹 도구로 Hacker News 상위 게시물 다섯 개를 가져와 요약하고, 앱은 이 결과를 사용자를 위해 저장합니다.
fx의 JavaScript 라이브러리인 libfx나 Pi의 에이전트 라이브러리로 에이전트를 만들고 있다면, 비슷한 스케줄링 도구를 추가할 수 있습니다. eve 에이전트 프레임워크는 Vercel Schedules를 활용해, Vercel에 호스팅된 프로덕션 에이전트용 동적 스케줄링 도구를 제공합니다.
Vercel Schedules로 반복 작업도 예약할 수 있습니다. JS SDK, API, CLI로 스케줄을 동적으로 만들 수도 있고, 프로젝트 설정에 정의할 수도 있습니다.
예를 들어 만료된 레코드를 매일 정리하는 작업을 만들려면, 원하는 시간대를 지정해 비공개 함수를 호출하는 스케줄을 정의하면 됩니다.
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"schedules": {
"cleanup": {
"schedule": "0 2 * * *",
"function": "api/cleanup",
"timezone": "America/New_York"
}
},
"functions": {
"api/cleanup.ts": {
"experimentalTriggers": [
{ "type": "schedule/v1beta" }
]
}
}
}매일 뉴욕 시간 새벽 2시에 비공개 정리 함수를 실행하도록 예약합니다.
Vercel은 이 정리 코드를 공개 URL로 노출하지 않고 직접 호출합니다. 또한 모든 호출이 스케줄링 서비스에서 온 것인지 확인하므로, 이 검증 로직을 직접 추가할 필요가 없습니다.
앱에서 이미 Nitro 3 서버 프레임워크를 쓰고 있다면, 실험적 통합 기능을 이용해 기존 scheduledTasks 설정에 있는 반복 작업을 비공개 함수로 실행할 수 있습니다.
에이전트 작업과 정리 작업은 vercel dev로 로컬에서 먼저 실행해 볼 수 있고, 프로덕션에 배포하기 전에 Preview 브랜치나 커스텀 환경에서 테스트할 수도 있습니다. 프로젝트의 Schedules 탭에서 Run Schedule을 누르면 기다리지 않고 바로 작업을 실행해 볼 수 있으며, 과거 실행 시점도 확인할 수 있습니다.
Vercel Schedules가 퍼블릭 베타로 공개되었습니다. 애플리케이션에서 이미 실행 중인 반복 작업에 바로 적용할 수 있습니다. 사용자나 에이전트가 작업 시점을 정하는 경우에는, 코드에서 해당 작업의 스케줄을 만들고 관리하면 됩니다.
시작하려면 Vercel Schedules 스킬을 확인하고 문서를 읽어 보세요.