자동화수동 검토 가이드확인일 2026-07-07

자동 실행이 겹쳐서 같은 일을 두 번 돌릴 때

Vercel Cron·GitHub Actions가 같은 작업을 겹쳐 돌리거나 API·DB 비용이 한순간에 커진 상황을 막는 순서입니다.

한 줄 결론

스케줄 작업은 한 번에 하나만 돌게 잠금을 걸고, 실패 재시도·타임아웃·알림을 코드와 인프라 양쪽에 둡니다.

아래 내용은 초보 바이브코더를 위한 일반 안내입니다. 서비스·지역·약관에 따라 달라질 수 있으며, 실제 사업화·운영 전에는 해당 분야 전문가 확인이 필요합니다.

먼저 용어부터 — 그다음 실행 프롬프트

cron
정해진 시간에 자동으로 돌아가는 예약 작업
CRON_SECRET
우리 API만 cron이 호출하게 막는 비밀 문자열
  • Webhook

    이건 webhook입니다

    결제사·외부 서비스가 ‘이벤트 생겼어’라고 우리 서버에 보내는 알림 URL입니다.

    • 테스트 모드와 라이브 키를 섞지 않습니다
    • 서명(signing secret)으로 위조 요청을 거릅니다
    • 같은 알림이 두 번 와도 한 번만 처리합니다

    이런 곳에 · Stripe/토스 결제 · 자동화 알림 · /ai/guides 결제 가이드

    지금 할 일 · 테스트 webhook URL 등록 → 테스트 결제 1회 → 로그에 이벤트 확인

    비용·주의 · 테스트는 무료. 라이브 키로 실결제·수수료 주의.

    AI 프롬프트 보기
    Stripe(또는 토스) webhook 테스트. test key, signing secret, idempotent 처리, 실패 시 재시도 주의.
  • Environment variables

    이건 env(환경변수)입니다

    비밀값·설정을 코드 밖에 두는 칸입니다. 로컬은 .env.local, 배포는 Vercel Environment Variables.

    • 비밀은 Git에 커밋하지 않습니다
    • 로컬과 배포 값이 다르면 ‘로컬만 됨’이 납니다
    • 이름만 같아도 값이 비면 500이 납니다

    이런 곳에 · OAuth secret · DATABASE_URL · API Key · CRON_SECRET

    지금 할 일 · .env.example에 이름만 적고, 실제 값은 .env.local에만

    비용·주의 · 잘못된 env로 무한 재시도하면 API 비용이 늘 수 있습니다.

    AI 프롬프트 보기
    Next.js + Vercel env 점검. 로컬은 되는데 배포만 실패. 필요한 키 목록(값 제외), Production 탭 확인 순서.

바로 실행 — AI 프롬프트

Vercel cron으로 /api/cron/job을 매일 호출합니다. vercel.json crons·CRON_SECRET·실패 재시도 1회·비용 나는 API 호출 제거 체크리스트.

막히면 다시 넣을 프롬프트

cron 401/timeout. path: [   ], duration: [   ]s, 로그: [   ]. maxDuration·배치 크기 조정.

럭키스팟 해석은 원출처를 바탕으로 한 실전 안내입니다. 요금·약관·라이선스는 제공자 페이지 최신 조건을 결제·배포 전에 대조하세요. 실제 사업화 전에는 해당 분야 전문가 확인이 필요할 수 있습니다.

초보자 한 줄 설명

크론은 '정각에 한 번'이 아닙니다. 배포 중·재시도·여러 스케줄러가 겹치면 같은 job이 동시에 여러 번 돌 수 있습니다.

먼저 AI 에이전트에게 붙여넣을 프롬프트

Next.js + Vercel Cron(또는 GHA) 배치 job에 중복 실행 방지를 붙인다.
1) 동일 job이 Vercel cron·GHA·외부에 중복 등록됐는지 찾는 체크리스트
2) PostgreSQL advisory lock 또는 Redis SET NX 예시(의사코드)
3) CRON_SECRET 헤더 검증 route 스켈레톤
4) maxDuration·batch size·재시도 상한 권장값
5) 비용 급증 시 볼 로그·대시보드 항목
파일별 최소, dry-run 모드 포함.

AI가 해줄 수 있는 일

  • 중복 실행 막는 락 코드·CRON_SECRET 검증 route
  • batch·timeout·재시도 상한·dry-run 모드
  • 등록된 스케줄 중복 찾는 체크리스트

사람이 직접 해야 하는 외부 설정

  • Vercel cron·GitHub Actions 중 한 곳만 스케줄 남기기
  • CRON_SECRET을 Vercel 비밀값 칸에 넣기
  • dry-run 5건 수동 실행 후 알림 확인

외부 설정 경로

  • Vercel → Project → Settings → Cron Jobs
  • GitHub → Repository → Actions → workflow 파일
  • Vercel → Project → Settings → Environment Variables (CRON_SECRET)

제대로 됐는지 확인하는 방법

  • 같은 job이 동시에 두 번 돌지 않는지(로그에 skip)
  • 수동 trigger에 secret 없으면 401인지
  • dry-run이 실제 API·DB를 건드리지 않는지

실행 순서

  1. 1등록된 스케줄 전부 나열·하나만 남기기
  2. 2job 시작 시 락 획득·실패 시 skip
  3. 3CRON_SECRET·수동 trigger 인증
  4. 4batch·timeout·재시도 상한 코드
  5. 5dry-run 5건 → 알림 → 프로덕션 크론

막히면 다시 AI에게 줄 프롬프트

크론 job이 [두 번 실행 / API 비용 급증 / 타임아웃].
등록 위치: [Vercel/GHA/...], job 이름: [   ], 로그: [붙여넣기].
중복 스케줄·락 없음·웹훅+크론 이중 트리거 점검.

막히는 지점

  • Vercel Cron·GHA·외부 서비스에 동일 job 이중 등록
  • 락 없이 배포·재시도·다중 인스턴스 겹침
  • job 타임아웃 없이 다음 스케줄과 충돌
  • CRON_SECRET 없이 공개 /api/cron URL
  • 실패 시 every-minute 재시도로 비용 폭주

비용·보안·저작권·약관 주의

  • 크론 URL 유출 시 대량 트리거 가능 — secret·IP 제한
  • 스크래핑·자동 수집은 대상 약관·robots 확인(사업화 시 법무)
  • 중복 크론·무한 재시도·대량 API 호출이 DB·LLM 비용을 한 번에 키웁니다. dry-run 먼저.

대안 도구

Inngest · Trigger.dev · 수동 cron+script

럭키스팟 판단

스케줄은 한 곳·한 락·한 알림부터. 수동 트리거 10번 성공 후에만 크론 주기를 켜세요.

이런 사람이 보면 좋음

  • 매일·매시간 자동 수집·알림·정산을 붙이려는 사람
  • 크론을 여러 곳에 동시에 등록한 적이 있는 사람
  • 한 번 실패 후 수동 재실행하다 데이터가 두 배가 된 사람

초보자가 보통 착각하는 지점

  • 크론은 정확히 한 번만 실행된다고 믿습니다. 배포 중·재시도·다중 인스턴스에서 겹칠 수 있습니다.
  • GitHub Actions와 Vercel Cron에 같은 작업을 넣어 두고 둘 중 하나만 끄면 된다고 생각합니다.
  • job이 오래 걸려도 다음 스케줄이 알아서 기다려 준다고 봅니다.
  • 실패 시 every minute 재시도를 넣으면 빨리 복구된다고만 생각하고 비용을 계산하지 않습니다.

실제 점검 체크리스트

  • Vercel → Settings → Cron Jobs와 GitHub → Actions에 같은 작업이 중복 등록되지 않았는지 확인합니다.
  • 실행 시작 시 DB·Redis 잠금(락)으로 동시 실행을 막습니다.
  • job 최대 실행 시간·타임아웃·재시도 상한을 설정합니다.
  • 한 번에 처리하는 건수·API 호출에 상한을 둡니다.
  • dry-run 모드로 먼저 몇 건만 처리해 로그를 확인합니다.
  • Vercel → Environment Variables에 CRON_SECRET을 넣고, 수동 실행 URL을 비밀 없이 공개하지 않습니다.

실패했을 때 보는 순서

  1. 1최근 배포·크론 스케줄 변경 시각과 비용·에러 급증 시각을 맞춰 봅니다.
  2. 2로그에서 같은 jobId가 겹쳐 실행됐는지 확인합니다.
  3. 3중복 등록된 cron yaml·vercel.json·GHA workflow를 찾아 하나만 남깁니다.
  4. 4무한 루프·페이지네이션 누락으로 같은 데이터를 반복 호출하지 않는지 코드를 봅니다.
  5. 5락이 없으면 즉시 추가하고, 이미 중복 반영된 데이터는 별도 정리 스크립트로 대조합니다.
  6. 6API·DB 사용량 대시보드에서 어떤 엔드포인트가 튀었는지 확인합니다.

배포 전 확인 항목

  • 스테이징에서 스케줄 한 주기를 실제로 기다리거나 trigger로 겹침 테스트를 했습니다.
  • 수동 실행 엔드포인트에 CRON_SECRET 또는 동등한 인증이 있습니다.
  • job이 실패해도 다음 주기 전에 알림이 옵니다.
  • 비용이 큰 외부 API 호출은 야간·저빈도로 조정했습니다.
  • 크론 엔드포인트 URL이 유출되면 누구나 대량 작업을 트리거할 수 있습니다. secret·IP 제한을 검토하세요.
  • 자동 수집·스크래핑은 대상 사이트 이용약관·robots·저작권을 확인해야 합니다. 상업 서비스는 법무 전문가 확인이 필요할 수 있습니다.
  • 개인정보 대량 처리 자동화는 보관 기간·삭제 정책을 함께 설계하세요.
크론자동화GitHub Actions중복실행