Skip to content

crontab 생성기 & cron 표현식 빌더

브라우저에서 cron 표현식을 만들고 검증·해석합니다. 로컬 또는 UTC로 다음 실행을 미리 보고, POSIX 5필드 문법과 프리셋을 온라인에서 무료로 사용합니다.

트래킹 없음 브라우저 실행 무료
모든 파싱과 다음 실행 시각 계산은 브라우저 안에서 이루어집니다. 어떤 서버로도 데이터가 전송되지 않습니다.

필드
프리셋

자연어 설명

다음 5회 예정 실행

다음 실행 미리보기 시간대
    POSIX 5필드 준수, OR 의미 규칙의 정확성, 단계 연산자 고정, 이름 토큰 확장, 유용한 오류와 함께한 Quartz 연산자 거부에 대해 검토 완료 — Go Tools 엔지니어링 팀 · May 20, 2026

    cron 표현식이란 무엇인가요?

    cron 표현식은 반복 스케줄을 정의하는 다섯 필드 문자열입니다. 왼쪽에서 오른쪽으로 필드는 분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-6, 0과 7 모두 일요일)입니다. 각 필드는 값, 목록(`1,3,5`), 범위(`1-5`), 와일드카드(`*` = 임의의 값), 단계(`*/15` = 15마다)를 받습니다. 다섯 필드의 조합이 예약된 명령이 실행될 시점을 정확히 정의합니다. 예를 들어 `0 9 * * 1-5`는 "분 0, 시 9, 임의의 일, 임의의 월, 요일은 월요일부터 금요일까지"로 읽히는데, 자연어로는 "평일 오전 9시"가 됩니다.

    cron은 1979년 Unix 버전 7에서 시작되었고, 다섯 필드 문법은 40년이 넘는 시간 동안 사실상 변하지 않았습니다. 원래 문법이 얼마나 잘 설계되었는지를 보여 주는 증거입니다. 오늘날 cron 표현식은 Unix crontab 파일을 훌쩍 넘어 쓰입니다. Kubernetes CronJobs, GitHub Actions 워크플로, AWS EventBridge 규칙, GitLab CI 예약 파이프라인, Cloudflare Workers Cron Triggers, 그리고 모든 클라우드의 서버리스 플랫폼이 같은 다섯 필드 문법을 받아들입니다. cron을 한 번 익히면 현대 인프라 어디에서도 작업을 예약할 수 있다는 뜻입니다.

    POSIX 표준은 다섯 개의 연산자를 정의합니다. `*`(임의의 값), `,`(값 목록), `-`(범위), `/`(단계), 그리고 월(JAN-DEC)과 요일(SUN-SAT)의 이름 토큰입니다. 대부분의 구현은 자주 쓰이는 다섯 가지 단축 표기도 확장합니다. `@yearly`(`0 0 1 1 *`), `@monthly`(`0 0 1 * *`), `@weekly`(`0 0 * * 0`), `@daily`(`0 0 * * *`), `@hourly`(`0 * * * *`)입니다. Quartz 스케줄러(Java 라이브러리)는 선택적 초 필드와 추가 연산자(`?`, `L`, `W`, `#`)로 이를 확장합니다. Java/Spring 환경에서는 유용하지만 표준 cron으로 이식되지는 않습니다. 본 도구는 POSIX 다섯 필드 표준을 따릅니다. 가장 지배적인 변종이며 Linux 서버, GitHub Actions 러너, Kubernetes 클러스터가 실제로 이해하는 형식이기 때문입니다.

    POSIX cron의 한 가지 특이점은 특별히 주의할 만합니다. 일과 요일이 모두 제한되면(둘 다 `*`가 아니면) 스케줄은 둘 중 어느 한쪽이라도 일치할 때 실행됩니다. AND가 아니라 OR 의미입니다. 그래서 `0 0 1 * 5`는 매월 1일 그리고 매주 금요일에 실행되는 것이지 1일에 해당하는 금요일에만 실행되는 것이 아닙니다. 가장 흔한 cron 함정이며, 본 도구의 다음 실행 미리보기가 실제로 작업이 실행될 날짜·시간을 보여 주어 한눈에 드러나게 합니다. 배포 전에 반드시 확인하십시오.

    모든 파싱과 다음 실행 시각 계산은 JavaScript로 완전히 브라우저 안에서 이루어집니다. 표현식, 스케줄, 그 밖의 어떤 데이터도 서버로 전송되지 않습니다. 본 도구는 표준 POSIX cron 표현식을 즉시 파싱해 자연어 설명과 다섯 번의 실행 미리보기를 제공하며, 프라이버시는 완전히 보장됩니다.

    cron 표현식은 다른 개발자 도구와 밀접하게 연관됩니다. cron 작업은 예상 실행 시각과 Unix 타임스탬프를 대조해 디버깅하는 경우가 많고, 복잡한 스케줄은 JSON 구성으로 문서화되어 JSON 포맷터로 검증할 수 있습니다. OR 의미 규칙, 시간대 함정, Linux/Kubernetes/GitHub Actions 예제로 본 흔한 cron 변종을 다루는 심층 가이드는 cron 스케줄 레퍼런스를 참고하십시오.

    # Linux crontab entry — runs every 15 minutes
    */15 * * * *  /usr/local/bin/poll-api.sh
    
    # Kubernetes CronJob — weekdays at 9:00 AM UTC
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: daily-report
    spec:
      schedule: "0 9 * * 1-5"
      timeZone: "UTC"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
                - name: report
                  image: report-runner:1.0
              restartPolicy: OnFailure
    
    # GitHub Actions workflow — hourly
    on:
      schedule:
        - cron: '0 * * * *'
    
    # AWS EventBridge — first of each month
    ScheduleExpression: cron(0 0 1 * ? *)
    # (Note: AWS uses the Quartz 6-field form with '?' for day-of-week)

    주요 기능

    실시간 POSIX 5필드 파서

    POSIX cron을 엄격히 따르는 파서: 분(0-59), 시(0-23), 일(1-31), 월(1-12 또는 JAN-DEC), 요일(0-6 또는 SUN-SAT, 7도 일요일로 허용). 모든 표준 연산자(`*` `,` `-` `/`)와 매크로(`@yearly` `@monthly` `@weekly` `@daily` `@hourly`)를 지원합니다.

    다음 5회 실행 미리보기

    현재 로컬 시각으로부터 다음 다섯 번의 예정 실행 시각을 계산합니다. 클릭 한 번으로 로컬과 UTC를 전환할 수 있어, 다른 지역의 서버에 crontab을 배포하기 전에 시간대 함정을 잡는 가장 확실한 방법입니다.

    자연어 설명

    유효한 모든 표현식에 사람이 읽을 수 있는 설명이 따라옵니다. "15분마다", "평일 오전 9시", "1월과 7월 매월 1일 02:30" 같은 식입니다. 코드 리뷰와 팀 인수인계가 한결 수월해집니다. `*/5 9-17 * * 1-5`가 실제로 무엇을 하는지 더 이상 추측할 필요가 없습니다.

    필드 단위 오류 메시지

    유효하지 않은 표현식은 문제가 있는 필드가 강조된 즉각적인 적색 피드백과 구체적인 오류를 받습니다. "Error in minute: value out of range [0, 59]: "60"" 같은 식입니다. 사흘 뒤 리포트가 실행되지 않은 것을 발견하는 침묵의 crontab 실패는 더 이상 없습니다.

    자주 쓰는 스케줄 프리셋 칩

    원클릭 프리셋 열한 개가 실제로 자주 쓰는 스케줄을 모두 담았습니다. 매분, 5분/15분마다, 매시간, 매일 자정 또는 오전 9시, 평일 오전 9시, 매주 일요일/월요일, 매월 1일, 매년 1회. 누르고, 다듬고, 배포하십시오.

    필드별 빌더 입력

    다섯 필드의 순서를 외울 필요가 없습니다. 분, 시, 일, 월, 요일이라고 라벨이 붙은 다섯 개의 작은 입력으로 값을 빠뜨리거나 순서를 잘못 두는 일 없이 한 번에 한 위치만 편집할 수 있습니다. 상단의 전체 표현식이 자동으로 다시 생성됩니다.

    POSIX OR 의미 규칙을 제대로 처리

    일과 요일이 모두 제한되면 OR 규칙이 발동합니다. `0 0 1 * 5`는 매월 1일 그리고 매주 금요일에 실행됩니다. 다음 실행 미리보기가 배포 전에 이를 가시화해 주말 페이지 호출이 갑자기 발생하는 일을 막아 줍니다.

    100% 브라우저 기반 프라이버시

    인프라 타이밍과 내부 스케줄링 패턴을 드러내는 경우가 많은 cron 표현식이 브라우저를 벗어나지 않습니다. 데이터가 어떤 서버로도 전송되지 않고, 로그도, 분석도 없습니다. 브라우저의 네트워크 탭에서 직접 확인할 수 있습니다. 운영 스케줄과 내부 시스템에도 안전합니다.

    Quartz 인지형 오류 메시지

    `?` `L` `W` `#`가 포함된 Quartz 표현식을 붙여넣으면 파서가 "Quartz operators not supported — use POSIX syntax"라고 설명해 줍니다. 침묵의 실패를 디버깅하는 대신 cron 용으로 다시 작성해야 함을 알 수 있습니다. Quartz 스케줄은 Linux cron에서 동작하지 않습니다.

    cron 변종과 스케줄러

    Vixie cron (Linux 기본)

    5필드 POSIX

    대부분의 Linux 배포판 기본값. 명시적 시간대를 위한 `CRON_TZ=` 확장이 있는 엄격한 POSIX. 일·요일 OR 의미가 적용됩니다. 본 도구의 주된 대상입니다.

    BSD cron

    5필드 POSIX

    macOS와 BSD 계열의 기본값. vixie cron과 사소한 구현 차이가 있는 POSIX 호환이며, 대부분의 표현식이 동일하게 동작합니다.

    systemd 타이머 (OnCalendar)

    calendar 명세, cron 아님

    systemd 기반 Linux에서 cron의 대안. `OnCalendar: 2026-*-* 09:00:00` 문법을 사용해 반복하지 않는 스케줄에 가독성이 좋지만 cron 표현식과 상호 운용되지는 않습니다.

    Quartz Scheduler (Java/Spring)

    6 또는 7 필드

    초(필수)와 연도(선택) 필드, 그리고 `?`, `L`, `W`, `#` 연산자를 추가합니다. Java 앱에 유용하지만 Linux cron으로 이식되지는 않습니다.

    AWS EventBridge

    `?`가 있는 6필드 Quartz 스타일

    둘 중 하나만 제한될 때 요일 또는 일에 `*`가 아닌 `?`(Quartz 관례)를 요구합니다. 표현식이 Linux cron으로 그대로 이식되지 않습니다.

    Kubernetes CronJob

    5필드 POSIX + timeZone 필드

    POSIX 5필드 스케줄에 `spec.timeZone` 필드(1.27+)가 더해집니다. kubelet 호스트의 시간대에 의존하는 것보다 깔끔합니다. 표현식은 Linux cron에서 그대로 이식됩니다.

    GitHub Actions

    5필드 POSIX

    언제나 UTC로 실행됩니다. 베스트 에포트 타이밍이라 부하 상황에서 건너뛸 수 있습니다. 15분보다 짧은 간격은 피하십시오. 표현식은 Linux cron에서 그대로 이식됩니다.

    cron 표현식 예시

    15분마다

    */15 * * * *

    단계 연산자 `*/15`는 분 필드에서 "분 0부터 시작해 15분마다"를 의미합니다. 즉 매시간 :00, :15, :30, :45에 실행됩니다. API 폴링, 캐시 갱신, 헬스 체크에서 가장 흔히 쓰이는 간격입니다.

    평일 오전 9시

    0 9 * * 1-5

    요일 필드의 범위 `1-5`는 월요일부터 금요일까지를 의미합니다(1=월, 5=금). 정확히 09:00에 실행됩니다. 업무 시간 리포트, 야간 데이터에 의존하는 배치 작업, 데일리 스탠드업 알림에 유용합니다.

    매월 1일 자정

    0 0 1 * *

    일은 `1`, 더 낮은 필드는 모두 0입니다. 월간 청구, 로그 로테이션, 기간 마감 정산에 자주 쓰입니다. 일과 요일은 둘 다 `*`가 아닐 때만 동시에 제한되는데, 여기서는 요일이 `*`이므로 일 필드만 작동합니다.

    평일 오전 9시-오후 5시, 5분마다

    */5 9-17 * * 1-5

    서로 다른 필드에서 단계(`*/5`)와 범위(`9-17`)를 조합합니다. 업무 시간 한정 모니터링이나 큐 비우기 작업에 유용합니다. 합계: 시간당 12회 × 9시간 × 5일 = 주당 540회 실행입니다.

    분기별: 1, 4, 7, 10월 1일 자정

    0 0 1 JAN,APR,JUL,OCT *

    쉼표로 구분된 목록에 월 이름을 넣었습니다. 재무 결산, 코드 프리즈 리뷰, 컴플라이언스 감사 같은 분기 스케줄에 적합합니다. 이름과 숫자를 섞을 수 있지만(`1,APR,7,10`도 동일하게 파싱됨) 가독성을 위해 하나의 스타일로 통일하는 편이 좋습니다.

    POSIX OR 함정: 매월 1일 OR 매주 금요일

    0 0 1 * 5

    일(`1`)과 요일(`5`)이 모두 제한되면 POSIX cron은 둘 중 어느 한쪽이 일치할 때 작업을 실행합니다. 따라서 이 표현식은 매월 1일 그리고 매주 금요일에 실행되는 것이지 1일에 해당하는 금요일에만 실행되는 것이 아닙니다. 가장 흔한 cron 함정이며, 다음 실행 미리보기로 즉시 확인할 수 있습니다.

    매일 02:30 (트래픽이 적은 시간대)

    30 2 * * *

    시와 분에 구체적인 값을 지정하고 나머지는 와일드카드입니다. 02:00-04:00 UTC 구간은 야간 배치 작업의 사실상 표준 시간대인데, 어떤 주요 비즈니스 권역의 업무 시간과도 겹치지 않기 때문입니다. UTC 시간대 토글과 함께 사용해 실제 실행 시각이 의도한 곳에 떨어지는지 확인하십시오.

    매크로 등가: @daily

    @daily

    `@daily` 단축 표기(그리고 `@midnight`)는 `0 0 * * *`로 확장됩니다. 매일 자정에 실행됩니다. 다른 매크로: `@yearly` = `0 0 1 1 *`, `@monthly` = `0 0 1 * *`, `@weekly` = `0 0 * * 0`, `@hourly` = `0 * * * *`. 매크로는 간결하지만 다섯 필드 형식이 스케줄러 간 이식성이 더 좋습니다(매크로를 지원하지 않는 스케줄러도 있습니다).

    cron 표현식 만드는 방법

    1. 1

      cron 표현식을 입력하거나 붙여넣기

      상단 입력란에 다섯 필드 cron 표현식(예: `*/15 * * * *`)을 입력하십시오. 본 도구는 입력하는 동안 파싱과 검증을 수행합니다. 유효하면 녹색 체크, 유효하지 않으면 필드 이름이 표시된 적색 오류가 나타납니다. `@daily`, `@hourly` 등의 매크로도 받아들입니다.

    2. 2

      또는 다섯 필드 입력을 조정

      필드 순서를 외울 필요가 없습니다. 라벨이 붙은 입력으로 분, 시, 일, 월, 요일을 개별적으로 편집할 수 있습니다. 상단의 전체 표현식이 자동으로 갱신됩니다. 와일드카드에는 `*`, 단계에는 `*/N`, 범위에는 `a-b`, 목록에는 `1,3,5`를 사용하십시오.

    3. 3

      프리셋으로 출발점 잡기

      프리셋 칩(15분마다, 평일 오전 9시 등)을 눌러 자주 쓰는 스케줄을 불러온 뒤 필요에 맞게 필드를 다듬으십시오. 열한 개의 프리셋이 실제 운영에서 쓰는 패턴을 모두 다룹니다.

    4. 4

      다음 실행 미리보기 확인

      예정된 다섯 개의 실행 날짜·시간을 보십시오. 로컬과 UTC를 전환해 의도한 시각에 스케줄이 실행되는지 확인하십시오. POSIX의 일·요일 OR 함정이 운영에서 문제를 일으키기 전에 잡아내는 가장 확실한 방법입니다.

    5. 5

      복사해 스케줄러에 붙여넣기

      복사를 눌러 표현식을 클립보드에 담으십시오. crontab, systemd 타이머, GitHub Actions `cron:`, AWS EventBridge, Kubernetes CronJob `schedule` 또는 cron 호환 스케줄러에 붙여넣을 수 있습니다. 대상 스케줄러의 시간대도 잊지 말고 확인하십시오. 아래 모범 사례 섹션을 참고하십시오.

    흔한 cron 실수

    POSIX OR 함정: 두 일 필드 모두 제한

    일과 요일이 모두 제한되면 POSIX cron은 둘 중 어느 한쪽이 일치할 때 작업을 실행합니다(둘 다 일치할 때가 아닙니다). 따라서 `0 0 1 * 5`는 매월 1일 그리고 매주 금요일에 실행되는 것이지 1일에 해당하는 금요일에만 실행되는 것이 아닙니다. 단일 조건을 원한다면 두 일 필드 중 하나에 `*`를 사용하거나 AND 검사를 수행하는 래퍼 스크립트를 작성하십시오.

    ✗ 오류
    # 의도: "매월 첫째 금요일"
    0 0 1-7 * 5
    # 실제: 매월 1-7일 OR 매주 금요일 — 두 조건 모두
    ✓ 정상
    # 진짜 AND 의미를 위해 래퍼 사용
    0 0 * * 5  [ $(date +\%d) -le 7 ] && /your-script
    # 또는 한 조건을 떨어내고 더 느슨한 스케줄을 수용

    개발과 운영 사이의 시간대 드리프트

    Linux 서버의 cron 스케줄은 작성자의 로컬 시간대가 아닌 시스템 시간대를 사용합니다. UTC로 설정된 서버에서 오전 9시 cron은 미국 동부 시간 오전 4시에 실행됩니다. 언제나 대상 서버의 시간대 — 가능하면 UTC — 를 기준으로 스케줄을 설계하고, crontab 상단에 `CRON_TZ=...`로 시간대를 명시적으로 고정하십시오.

    ✗ 오류
    # 미국 동부 개발자가 작성, UTC 서버에 배포
    0 9 * * *  /your-report.sh
    # 오전 9시 UTC = 미국 동부 오전 4시에 실행 — 개발자의 의도와 다름
    ✓ 정상
    # 시간대 고정, 또는 명시적으로 UTC로 작성
    CRON_TZ=America/New_York
    0 9 * * *  /your-report.sh

    단계 연산자 혼동: '*/15' vs '15'

    분에서 `*/15`는 "0부터 시작해 15분마다"(즉 0, 15, 30, 45)를 의미합니다. 단순한 `15`는 "분 15에만"으로 시간당 한 번 실행입니다. 초보자는 15분마다라고 생각하고 `15`를 쓰는 경우가 잦은데, 배포 전에 본 도구의 자연어 설명이 이를 드러내 줍니다.

    ✗ 오류
    # 의도: 15분마다
    15 * * * *
    # 실제: 매시간 분 15에 한 번 (의도보다 시간당 4회 적음)
    ✓ 정상
    # 올바른 표현
    */15 * * * *
    # 15분마다: 매시간 분 0, 15, 30, 45

    POSIX 스케줄러에 6필드 표현식

    Quartz/Spring/node-cron은 첫 위치에 선택적 초 필드를 지원합니다. Linux crontab, GitHub Actions, AWS EventBridge(대체로), Kubernetes CronJob은 그렇지 않으며 다섯 필드를 기대합니다. 6필드 표현식을 붙여넣으면 스케줄이 조용히 깨집니다. 초가 분이 되고, 분이 시가 되는 식으로 밀려납니다.

    ✗ 오류
    # Linux crontab에 복사된 Quartz 6필드
    0 0 9 * * 1-5
    # Linux 해석: 분=0, 시=0, 일=9, 월=*, 요일=1-5
    # = 평일과 일치하는 월의 9일 자정 — 혼돈
    ✓ 정상
    # POSIX 5필드, 초 떨어내기
    0 9 * * 1-5
    # = 평일 오전 9시

    월의 범위를 벗어난 일

    cron은 일을 실제 월에 대해 검증하지 않습니다. `0 0 31 2 *`(2월 31일)은 정상적으로 파싱되지만 절대 일치하지 않습니다. 2월은 길어야 29일입니다. 초보자는 파서가 이를 잡아 줄 것이라고 가정하지만 그렇지 않습니다. 본 도구의 다음 실행 미리보기는 표현식이 구조적으로 유효하지만 논리적으로 불가능할 때 "예정된 실행 없음"을 표시합니다.

    ✗ 오류
    # 2월 30일 또는 31일 — 절대 실행되지 않음
    0 0 30 2 *
    0 0 31 2 *
    # 파싱되지만 어떤 스케줄도 실행되지 않음
    ✓ 정상
    # 스크립트로 '2월 마지막 평일' 패턴 구현
    0 0 28-29 2 *  [ $(date -d tomorrow +\%m) = 03 ] && /your-script

    Quartz 문법을 POSIX로 착각

    AWS 문서, Spring 튜토리얼, 많은 Stack Overflow 답변은 `?`, `L`, `W`, `#`이 포함된 Quartz cron 표현식을 보여 줍니다. 이들은 Linux crontab에서 동작하지 않습니다. 요일 슬롯에 `?`가 있는 6필드 표현식을 복사하면 Linux 파서는 거부하거나, 더 나쁘게는 조용히 잘못 파싱합니다. 본 도구는 Quartz 연산자를 잡아내 그 차이를 설명해 줍니다.

    ✗ 오류
    # Quartz: '월의 마지막 금요일' — POSIX에서 유효하지 않음
    0 0 ? * 6L *
    ✓ 정상
    # 마지막 금요일에 대한 POSIX 래퍼 스크립트 방식
    0 0 25-31 * 5  /your-script
    # 어느 월이든 25-31일 사이의 금요일에 실행

    일반 활용 사례

    Linux crontab 작업
    `/etc/crontab`, `/etc/cron.d/*`, 또는 사용자별 `crontab -e` 파일의 항목을 만들고 검증합니다. 저장 전에 다음 실행 미리보기로 스케줄이 서버의 구성된 시간대 기준으로 올바른 시각에 떨어지는지 확인하십시오.
    Kubernetes CronJob 스케줄
    Kubernetes CronJob의 `spec.schedule` 필드를 생성합니다. Kubernetes 1.27+는 `spec.timeZone`도 지원합니다. UTC 토글로 UTC 기준으로 스케줄을 설계한 뒤 `timeZone`을 명시적으로 설정해 워커 노드의 로컬 시간을 피하십시오.
    GitHub Actions 예약 워크플로
    `on.schedule` 아래 `cron:` 항목을 만듭니다. GitHub Actions는 언제나 UTC로 실행됩니다. 미리보기를 UTC로 토글해 스케줄을 확인하십시오. 15분보다 짧은 간격은 피하십시오. GitHub 스케줄러는 부하 상황에서 짧은 간격 작업을 자주 건너뜁니다.
    AWS EventBridge 규칙
    EventBridge 예약 규칙용 cron 표현식을 구성합니다. 참고: AWS는 요일에 `?`를 쓰는 Quartz 스타일 6필드 문법을 사용합니다. 본 도구는 POSIX 5필드를 생성하므로 초(`0`)를 앞에 붙이고 두 일 필드 중 하나의 `*`를 `?`로 바꿔야 합니다.
    GitLab CI 예약 파이프라인
    GitLab의 예약 CI 파이프라인용 cron 표현식을 확인합니다. GitLab은 본 도구가 생성하는 POSIX 5필드 문법과 UI 날짜 선택기를 사용하지만, 비표준 간격에 더 세밀한 제어가 필요할 때는 cron 형식이 유리합니다.
    Cloudflare Workers Cron Triggers
    `wrangler.toml`의 `[triggers.crons]` 항목을 만듭니다. Cloudflare는 POSIX 5필드 문법을 사용합니다. 최소 간격은 1분이며 워커는 UTC로 실행됩니다. 트리거가 예상한 시간 창 안에 실행되는지 미리보기로 확인하십시오.
    Node.js node-cron 스케줄
    다섯 필드 POSIX와 선택적 선두 초 필드를 모두 지원하는 `node-cron` 라이브러리용 표현식을 만듭니다. 1분 미만 정밀도가 꼭 필요한 경우가 아니라면 다섯 필드를 사용하십시오. 6필드 표현식은 Linux crontab으로 이식되지 않습니다.
    코드 리뷰와 문서화
    PR이나 런북의 cron 표현식을 붙여넣어 무엇을 하는지 즉시 확인하십시오. 더 이상 `30 7 * * 1-5`를 추측하거나 참조 카드를 꺼낼 필요가 없습니다. 자연어 설명은 인라인 주석이나 README 파일에도 적합합니다.

    cron 문법 참조

    필드 순서: M H D M W
    분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-6, 7도 일요일). 요일 필드는 숫자(0-6)와 이름(SUN-SAT, 대소문자 무시) 토큰을 모두 받습니다.
    연산자
    `*` = 임의의 값; `,` = 목록 구분자(`1,3,5`); `-` = 범위(`1-5`); `/` = 단계(`*/15`, `5/10`); 이름: 월은 JAN-DEC, 요일은 SUN-SAT(대소문자 무시).
    매크로(별칭)
    `@yearly` = `0 0 1 1 *`; `@annually` = `0 0 1 1 *`; `@monthly` = `0 0 1 * *`; `@weekly` = `0 0 * * 0`; `@daily` = `0 0 * * *`; `@midnight` = `0 0 * * *`; `@hourly` = `0 * * * *`. `@reboot`는 특수한 비스케줄(부팅 시에만 실행)이며 설명과 함께 거부됩니다.
    POSIX 일 의미 규칙 (OR 규칙)
    일과 요일이 모두 제한되면(둘 다 `*`가 아니면) 스케줄은 둘 중 어느 한쪽이 일치할 때 실행됩니다 — OR 의미입니다. 하나만 제한되면 그 하나가 결정합니다. 둘 다 `*`면 매일 일치합니다. 이 OR 규칙은 vixie cron, BSD cron, 대부분의 POSIX 구현에 적용됩니다. Quartz는 AND와 OR를 구분하기 위해 `?`를 사용합니다.
    6필드 모드(Quartz-Lite)
    입력에 여섯 개의 공백 구분 토큰이 있으면 본 도구는 첫 번째를 초 필드(0-59)로 처리합니다. Quartz, Spring `@Scheduled(cron=...)`, node-cron에 유용합니다. Linux crontab이나 POSIX 스케줄러로는 이식되지 않습니다. 이들은 사용자의 초를 분으로 취급해 모든 위치를 한 칸씩 밀어 버립니다.
    단계 연산자 고정
    `*/N`은 필드의 가장 낮은 값에 고정됩니다. 분에서 `*/15` = `0,15,30,45`이지 "지금부터 15마다"가 아닙니다. 와일드카드가 아닌 기준을 쓰면: 분에서 `5/15` = `5,20,35,50`. 필드 범위를 정수로 나누지 못하는 단계 값은 끝에서 다시 시작하는 지점 근처에서 건너뜁니다. 정상 동작이며 버그가 아닙니다.
    검증 경계
    분 ∈ [0,59], 시 ∈ [0,23], 일 ∈ [1,31], 월 ∈ [1,12], 요일 ∈ [0,7]. 범위를 벗어난 값은 필드 단위 오류를 일으킵니다. 일은 월에 대해 검증되지 않습니다(`0 0 31 2 *`는 정상적으로 파싱되지만 2월에는 31일이 없으므로 절대 일치하지 않으며, 다음 실행 미리보기는 "예정된 실행 없음"을 표시합니다).
    Quartz 연산자 거부
    POSIX cron은 Quartz의 `?`(특정 값 없음), `L`(last), `W`(가장 가까운 평일), `#`(n번째 요일)을 지원하지 않습니다. 본 도구는 이들을 "Quartz operators not supported"라는 명확한 메시지와 함께 거부합니다. 잘못된 POSIX로 침묵 파싱하지 않습니다. Quartz 스케줄에는 Quartz 인지형 도구나 Spring 스케줄러를 대신 쓰십시오.
    다음 실행 탐색의 연도 상한
    다음 실행 계산은 앞으로 최대 4년까지 탐색합니다. 그보다 드물게 일치하는 표현식(예: "2월 29일" 패턴)은 "향후 4년 이내에 예정된 실행 없음"으로 표시됩니다. 불가능한 패턴에서 무한 반복을 피하기 위한 의도된 설계입니다.

    cron 스케줄 모범 사례

    서버는 UTC로, 표시할 때 변환하라
    서버를 UTC로 설정하고(`/etc/timezone` 또는 `TZ=UTC`) 모든 cron 표현식을 UTC로 작성하십시오. 로컬 시간으로의 변환은 대시보드와 리포트에서 표시 시점에만 수행합니다. 이렇게 하면 시간대 버그의 한 부류를 통째로 제거할 수 있는데, 특히 일광 절약 시간 전환에서 로컬 시간 스케줄이 조용히 두 번 실행되거나 한 번을 건너뛰는 상황을 막아 줍니다. 본 도구의 UTC 토글로 처음부터 UTC 기준으로 스케줄을 설계하십시오.
    POSIX 일/요일 OR 함정을 피하라
    OR 의미를 원하지 않는다면 일과 요일을 둘 다 제한하지 마십시오. "1월의 매주 월요일"을 원한다면 `0 0 * 1 1`(일은 `*`)로 작성하고, "매월 1일"을 원한다면 `0 0 1 * *`(요일은 `*`)로 작성하십시오. POSIX OR 규칙 때문에 `0 0 1 * 1`은 매월 1일 그리고 매주 월요일에 실행되는데, 의도와 거의 다를 것입니다. 배포 전에 다음 실행 미리보기를 확인하면 이 문제를 잡아낼 수 있습니다.
    스케줄 시간대를 명시적으로 고정하라
    최근의 스케줄러는 스케줄 정의에서 시간대 고정을 지원합니다. vixie cron 3.0+에서는 crontab 상단에 `CRON_TZ=America/New_York`을, Kubernetes CronJobs 1.27+에서는 `spec.timeZone: "America/New_York"`을, AWS EventBridge Scheduler에서는 스케줄 표현식에 `ScheduleExpressionTimezone`을 사용합니다. 서버의 기본값에 의존하지 말고 시간대를 명시적으로 고정하십시오. 서버 시간대는 인프라 마이그레이션 중에 예고 없이 바뀔 수 있습니다.
    :00이 아니라 여러 분에 부하를 분산하라
    중요하지 않은 작업에 `0 * * * *`(매시간 분 0)는 피하십시오. 규모가 커지면 많은 작업을 정확히 :00에 예약하는 것이 부하 스파이크를 일으킵니다. 각 작업마다 임의의 분 오프셋(`23 * * * *`, `41 * * * *`)을 골라 부하를 분산하십시오. 일간 작업도 마찬가지입니다. `30 3 * * *`는 많은 작업이 3:00에 몰릴 때 `0 3 * * *`보다 데이터베이스에 친화적입니다.
    작업을 멱등하게 설계하라
    cron에는 내장된 재시도, 중복 실행 방지, 놓친 실행 복구 기능이 없습니다. 작업은 여러 번 실행되어도 안전하도록(멱등하도록) 그리고 스스로 상태를 점검하도록 설계해야 합니다. "오전 9시에 리포트를 보냄" 대신 "오늘 리포트가 아직 발송되지 않았다면 발송"으로 설계하십시오. 이렇게 하면 다운타임, 우발적 중복 스케줄, 동시 실행 이후에도 스스로 복구됩니다. 멱등성은 스케줄러가 아니라 작업의 속성이며, 가장 중요한 신뢰성 관행입니다.
    중요한 스케줄에는 하트비트를 추가하라
    cron의 침묵 실패 모드가 가장 큰 약점입니다. 스케줄이 실행되지 않아도 아무도 알려 주지 않습니다. 중요한 작업이라면 실행이 끝날 때마다 하트비트 서비스(Healthchecks.io, Cronitor, Dead Man's Snitch)에 핑을 보내고, 예상한 핑이 도착하지 않으면 서비스가 알림을 발송하도록 하십시오. 작업 실패와 스케줄 자체의 오작동을 모두 잡을 수 있습니다. 무료 플랜으로도 개인과 소규모 팀의 요구 대부분을 충당할 수 있습니다.
    배포 전에 다음 실행 미리보기로 확인하라
    새 cron 스케줄을 배포하기 전에 본 도구의 미리보기에 표시된 다섯 개의 예정 실행 날짜·시간을 살펴보십시오. 로컬과 UTC를 토글하십시오. 의도한 시각에 스케줄이 떨어지는지 확인하십시오. 5분 일찍 실행되거나 잘못된 요일에 실행되거나 신경 쓰던 주말을 건너뛰지 않는지 점검하십시오. 미리보기는 가장 저렴한 운영 테스트입니다.

    자주 묻는 질문

    이 도구는 무엇을 하나요?
    브라우저에서 cron 표현식을 파싱·검증·해석하며, 사용자의 시간대 또는 UTC로 다음 다섯 번의 실행 시각을 실시간 미리보기로 보여 줍니다. 표준 POSIX 5필드 cron 표현식을 입력하거나, 문법을 외우지 않고도 프리셋 칩과 필드별 입력으로 표현식을 만들 수 있으며, 본 도구는 자연어 설명("15분마다", "평일 오전 9시" 등)과 실제로 작업이 실행될 날짜·시간을 산출합니다. 잘못된 표현식은 필드 단위 오류 메시지로 즉시 잡아내므로 깨진 스케줄로 배포를 낭비할 일이 없습니다. 전체 도구는 100% 클라이언트 측에서 동작합니다. 아무것도 업로드·로그·저장되지 않아 운영 crontab과 민감한 타이밍 패턴을 가진 내부 스케줄에도 안전합니다.
    cron 표현식은 무엇인가요?
    cron 표현식은 반복 스케줄을 정의하는 다섯 필드 문자열입니다. 필드는 분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-6, 0과 7 모두 일요일)입니다. 각 필드는 값, 목록(`1,3,5`), 범위(`1-5`), 와일드카드(`*` = 임의), 단계(`*/15` = 15마다)를 받습니다. 다섯 필드의 조합이 예약된 명령이 정확히 언제 실행될지를 정의합니다. cron은 Unix V7(1979)에서 시작되어 Linux/Unix의 시간 기반 작업 스케줄링, 컨테이너 오케스트레이션(Kubernetes CronJobs), CI/CD(GitHub Actions, GitLab CI), 서버리스 플랫폼(AWS EventBridge, Cloudflare Workers Cron Triggers)에 이르기까지 사실상 표준 언어로 남아 있습니다. 수십 년에 걸쳐 여러 대안이 제안되었지만, cron의 간결하고 표현력 있는 다섯 필드 문법을 대체한 것은 없습니다.
    내 데이터가 어딘가로 업로드되나요?
    아닙니다. 모든 파싱·검증·다음 실행 시각 계산은 JavaScript로 100% 브라우저 안에서 이루어집니다. 표현식은 전송되지 않고, 서버에 저장되지도, 로그에 남지도, 분석되지도 않습니다. 그래서 운영 crontab, 인프라 타이밍이 드러나는 내부 스케줄링 패턴, 민감한 스케줄에도 안전하게 사용할 수 있습니다. 브라우저의 네트워크 탭에서 직접 확인할 수 있는데, cron 표현식을 입력해도 네트워크 요청은 발생하지 않습니다. 본 도구는 입력 데이터에 쿠키를 사용하지 않으며, 사용자의 입력을 캡처하는 서드파티 분석 도구도 쓰지 않습니다.
    POSIX cron과 Quartz의 차이는 무엇인가요?
    POSIX cron은 Unix/Linux crontab, systemd 타이머, GitHub Actions, GitLab CI, AWS EventBridge, Kubernetes CronJobs를 비롯한 대부분의 스케줄러에서 쓰는 다섯 필드 표준입니다. Quartz는 초 필드(총 6 또는 7 필드)와 추가 연산자를 더한 Java 스케줄링 라이브러리입니다. 추가 연산자에는 `?`(특정 값 없음, 일과 요일이 충돌할 때 사용), `L`(last — 월의 마지막 날, 마지막 금요일 등), `W`(가장 가까운 평일), `#`(월의 n번째 요일, 예: `2#1` = 첫째 화요일)이 있습니다. 본 도구는 사용 범위가 훨씬 넓은 POSIX cron을 구현합니다. Quartz 연산자는 명확한 "Quartz operators not supported" 메시지와 함께 문법 오류로 보고됩니다. Quartz가 필요하다면 Quartz Scheduler나 Spring의 `@Scheduled` 같은 인기 Java 스케줄러가 대상이 되지만, 스케줄 정의가 Linux cron으로 그대로 이식되지는 않습니다.
    왜 '0 0 1 * 5'가 매주 금요일 그리고 매월 1일에 실행되나요?
    POSIX cron의 일·요일 OR 의미 규칙 때문이며, 가장 흔한 cron 함정입니다. 규칙: 두 필드가 모두 제한되어 있을 때(둘 다 `*`가 아닐 때) cron은 두 조건 중 어느 하나라도 일치하면 작업을 실행합니다(둘 다 일치할 때가 아닙니다). 그래서 `0 0 1 * 5`(일=1, 요일=5)는 매월 1일 그리고 매주 금요일에 실행되는 것이지 1일에 해당하는 금요일에만 실행되는 것이 아닙니다. 후자(AND 의미 — 1일인 금요일)만 원한다면 표준 cron으로는 표현할 수 없으므로, 매주 금요일 또는 매월 1일에 실행되는 스크립트를 작성한 뒤 실제 날짜를 보고 일찍 종료하도록 해야 합니다. Vixie cron(GNU/Linux 기본), BSD cron, AWS EventBridge 모두 이 OR 규칙을 따릅니다. 본 도구의 다음 실행 미리보기로 실제 스케줄이 한눈에 드러납니다. 의심스러운 표현식은 배포 전에 붙여넣어 확인하십시오.
    30초마다 작업을 실행하려면 어떻게 하나요?
    표준 POSIX cron으로는 불가능합니다. cron의 최소 단위는 1분이며, 가장 작은 필드가 분(0-59)입니다. 1분 미만 스케줄을 위한 선택지는 다음과 같습니다. (1) `* * * * *`에 두 작업을 등록하고 그중 하나 앞에 `sleep 30 &&`를 붙입니다 — 거칠지만 vixie cron에서는 동작합니다. (2) 초를 지원하는 스케줄러를 사용합니다. Quartz, 커스텀 컨트롤러를 둔 Kubernetes CronJob, `OnCalendar: *-*-* *:*:00/30` 형태의 systemd 타이머 등이 있습니다. (3) 반복 사이에 30초씩 sleep하는 장기 실행 데몬을 띄웁니다. 대부분의 모니터링 용도에 가장 적합한 답입니다. (4) 실제로 실시간 응답이 필요하다면 이벤트 기반 트리거(웹훅, 메시지 큐)로 전환하십시오. 30초 cron 패턴은 거의 언제나 cron이 잘못된 추상화라는 신호입니다.
    cron은 어떤 시간대를 사용하나요?
    Linux 서버에서 vixie cron은 시스템 시간대를 사용하며, 보통 `/etc/timezone`이나 `TZ` 환경 변수로 설정됩니다. 이는 잦은 버그의 원인입니다. 미국 동부 서버의 오전 9시 cron은 14:00 UTC에 실행되지만, UTC로 설정된 서버에서는 09:00 UTC(즉 동부 시간 오전 4시)에 실행됩니다. 해법은 서버를 항상 UTC로 설정하고 모든 cron 표현식을 UTC로 쓰는 것입니다. 아니면 crontab 상단에 `CRON_TZ=America/New_York` 변수를 두어 시간대를 명시적으로 고정합니다(vixie cron 3.0+에서 지원). 매니지드 스케줄러는 제각각입니다. GitHub Actions는 언제나 UTC로 실행되고, AWS EventBridge는 스케줄 정의에서 시간대를 지원하며, Kubernetes CronJob은 1.27+에서 `spec.timeZone` 필드를 추가했습니다. 본 도구의 UTC/로컬 토글로 두 시간대에서 스케줄을 미리 볼 수 있습니다. 의도한 시각에 실제로 실행이 떨어지는지 토글로 확인하십시오.
    '*/15'는 실제로 무엇으로 확장되나요?
    단계 연산자 `*/N`은 "해당 필드의 가장 낮은 유효 값에서 시작해 N마다"를 의미합니다. 분(범위 0-59)에서 `*/15`는 `0,15,30,45`로 확장됩니다. 매시간 15분 단위로 네 번 실행입니다. 단계는 "현재 시각부터 15분마다"가 아닙니다. 필드의 시작 값에 고정됩니다. 다른 필드도 같은 논리입니다. 시에서 `*/2`는 `0,2,4,...,22`(12회), 일에서 `*/3`은 `1,4,7,...,31`(11회)입니다. 와일드카드가 아닌 기준 값을 쓰면(예: `5/15`) 기준에서 확장됩니다. 분에서 `5/15` = `5,20,35,50`입니다. 범위를 정수로 나누지 못하는 단계 값은 끝에서 다시 시작하는 지점 근처에서 건너뛰는데, 이는 버그가 아니라 정상적인 cron 동작입니다. 다음 실행 미리보기로 실제 스케줄이 한눈에 드러납니다.
    초가 포함된 6필드 표현식을 쓸 수 있나요?
    선두에 초 필드(범위 0-59)가 붙는 6필드 표현식은 Quartz/Spring/Cron4j 확장이며 POSIX가 아닙니다. 본 도구는 입력에 정확히 여섯 개의 공백 구분 토큰이 있을 때 6필드 표현식을 받아들입니다. Quartz, Spring `@Scheduled(cron=...)`, 또는 초를 지원하는 `node-cron` 같은 Node.js 라이브러리를 대상으로 할 때 유용합니다. 표준 POSIX 스케줄러(Linux crontab, GitHub Actions, AWS EventBridge, Kubernetes CronJob)에서는 다섯 필드를 고수하십시오. 선두에 초 필드를 추가하면 스케줄이 조용히 깨집니다(스케줄러가 분을 초로, 시를 분으로 해석해 모든 것이 한 칸씩 밀립니다). 확신이 서지 않으면 대상 스케줄러 문서를 확인하십시오. "6필드 + 초 지원"이라고 명시되어 있지 않다면 다섯 필드를 사용하십시오.
    cron이 표현할 수 있는 최대 간격은 얼마인가요?
    외부 상태 없이 cron은 `0 0 D M *` 형식으로 연 1회까지 안정적으로 표현할 수 있습니다(예: `0 0 1 1 *` = 매년 1월 1일 자정). "2년마다" 이상의 간격은 cron만으로는 부족합니다. 스크립트 상단에서 외부적으로 날짜를 확인해야 합니다(예: `[ $(($(date +%Y) % 2)) -eq 0 ] && /your-command`으로 짝수 해에만 실행). "90일마다" 같은 여러 날에 걸친 비정렬 간격에서도 cron은 실패합니다. 네이티브 모듈로 일 연산자가 없으므로 기준 날짜와 비교해 연중 일(day-of-year)을 확인하는 래퍼를 작성해야 합니다. 스케줄링 요구가 이 정도로 복잡하다면 실제 워크플로 스케줄러(Airflow, Temporal, AWS Step Functions)를 고려하십시오. cron의 문법은 의도적으로 단순하므로, 일반적인 주간/월간 패턴을 넘어서면 무너집니다.
    다운타임 이후 놓친 실행은 어떻게 처리하나요?
    표준 cron에는 복구 기능이 없습니다. 예정된 시각에 시스템이 다운되어 있었다면 그 실행은 그대로 건너뜁니다. "이번 실행을 놓쳤다"는 기록도 없습니다. 중요한 작업에는 세 가지 선택지가 있습니다. (1) 부팅 후 놓친 작업을 따라잡는 `anacron`(또는 `Persistent=true`가 있는 `systemd-cron`)을 사용합니다. 노트북이나 간헐적으로 켜지는 시스템에 적합합니다. (2) 재시도가 내장된 스케줄러로 전환합니다. Kubernetes CronJobs에는 `startingDeadlineSeconds`(지연이 기한 안이면 실행)와 `concurrencyPolicy`(중복 실행 방지)가 있고, AWS EventBridge는 재시도 정책을 지원합니다. (3) 작업 자체에 멱등성(idempotency)을 부여합니다. "오전 9시에 리포트 실행" 대신 "오늘 리포트가 이미 생성되었는지 조회 후 없으면 생성"이 되게 합니다. 이렇게 하면 어떤 길이의 다운타임 이후에도 자동으로 복구됩니다. 옵션 3이 가장 견고하며 어떤 스케줄러에서도 작동합니다.
    GitHub Actions cron이 왜 정시에 실행되지 않나요?
    GitHub Actions 스케줄은 베스트 에포트입니다. GitHub 인프라의 부하가 높을 때 몇 분 늦게 시작될 수 있고, 매우 높은 부하에서는 (특히 5분 같은 짧은 간격에서는) 아예 건너뛸 수도 있습니다. 동일한 단서 조건은 대부분의 매니지드 스케줄러에 해당합니다. 정확한 타이밍을 규모와 신뢰성과 맞바꾸기 때문입니다. 실용적 함의: (1) 정확한 초에 실행되어야 하는 작업은 예약하지 마십시오. cron은 "매일 대략 이 시각" 용도입니다. (2) 짧은 간격이라면 예약 작업보다 장기 실행 워커를 선호하십시오. (3) 정확한 시각의 재무·컴플라이언스 마감에는 직접 운영하는 서버의 전용 cron 데몬이나 AWS EventBridge Scheduler Standard 같은 더 엄격한 스케줄러를 사용하십시오. (4) GitHub Actions에 한정해서는, 15분 미만 간격은 피하십시오. 스케줄러가 부하 상황에서 자주 건너뜁니다.

    Unix 타임스탬프 & 에폭 변환기 · 다중 정밀도

    날짜 & 시간

    Unix 타임스탬프를 날짜로 즉시 변환합니다. 초, 밀리초, 마이크로초를 자동 감지하며 실시간 시계와 양방향 변환을 온라인에서 무료로 제공합니다.

    진법 변환기 (Number Base Converter)

    변환 도구

    2진수, 16진수, 10진수, 8진수 및 임의 진법(2-36)을 즉시 변환합니다. 온라인에서 무료로 사용할 수 있으며 모든 처리는 브라우저에서 이루어집니다.

    Base64 디코더 · 인코더 (Base64 Decoder & Encoder)

    인코딩 & 포매팅

    Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.

    CSV to JSON 변환기 (CSV to JSON Converter)

    인코딩 & 포매팅

    브라우저에서 CSV를 JSON으로 변환합니다. RFC 4180, 타입 추론, 헤더 행, 큰 정수 안전 처리. 100% 비공개, 업로드 없음.

    이미지 압축기 · JPEG, PNG, WebP 온라인 압축

    변환 도구

    JPEG, PNG, WebP 이미지를 온라인에서 최대 80% 압축합니다. 브라우저 안에서만 처리되며 업로드 없이 20장 일괄 처리, 품질 조절, 전후 비교를 무료로 지원합니다.

    JSON Diff 비교

    인코딩 & 포매팅

    두 JSON 파일을 브라우저에서 즉시 Diff 비교하세요. 나란히 보기 하이라이팅, RFC 6902 JSON Patch 출력, 타임스탬프·ID 같은 노이즈 필드 무시. 비공개, 업로드 없음.