티스토리 뷰
728x90
✅ 1. CRON (크론)
📌 정의
유닉스/리눅스 계열 운영체제에서 사용되는 시간 기반 작업 스케줄러
주기적으로 반복되는 작업을 자동으로 실행하기 위해 사용
📌 동작 방식
- 리눅스의 cron daemon이 정해진 시간에 등록된 명령을 실행
- 설정 파일인 **crontab**을 사용하여 작업 등록
📌 Cron 표현식 예시
* * * * * 명령어
│ │ │ │ │
│ │ │ │ └── 요일 (0=일요일~6=토요일)
│ │ │ └──── 월 (1~12)
│ │ └────── 일 (1~31)
│ └──────── 시 (0~23)
└────────── 분 (0~59)
📌 예시
# 매일 자정에 스크립트 실행
0 0 * * * /home/user/backup.sh
# 매 5분마다 실행
*/5 * * * * /usr/bin/python3 /home/user/task.py
✅ 2. Scheduler (일정 실행기)
📌 정의
정해진 시간, 주기 또는 조건에 따라 작업을 실행하는 시스템 또는 기능의 총칭
📌 CRON과의 차이
- CRON은 Unix/Linux의 기본 scheduler 도구
- Scheduler는 보다 일반적인 개념이며, 다양한 환경에서 쓰임
📌 어디에 쓰이나?
환경 | 스케줄러 도구 |
OS | cron, Windows Task Scheduler |
클라우드 | AWS EventBridge (구 CloudWatch Events), GCP Cloud Scheduler |
Kubernetes | CronJob |
Java 앱 | Quartz Scheduler, Spring @Scheduled |
CI/CD | GitHub Actions, GitLab CI에서 schedule 기능 |
Workflow 도구 | Airflow, Argo Workflows |
🔍 CRON vs 일반 Scheduler 차이점
항목 | CRON | 일반 Scheduler |
범위 | Unix/Linux 한정 | 범용 (앱, 클라우드, K8s 등) |
표현 방식 | crontab 표현식 | 대부분 cron 형식 + 조건 |
제어 방식 | 터미널 또는 crontab -e | GUI, 코드, YAML 등 다양 |
반복 주기 설정 | 가능 | 가능 (더 유연한 조건 설정도 가능) |
상태 추적 | 기본 없음 (로그 직접 남겨야 함) | 상태, 이력 추적 포함 가능 |
🛠 실제 활용 예시들
① Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: sample-job
spec:
schedule: "0 2 * * *" # 매일 새벽 2시
jobTemplate:
spec:
template:
spec:
containers:
- name: job
image: busybox
command: ["sh", "-c", "echo Hello World"]
restartPolicy: OnFailure
② Spring Boot에서 @Scheduled
@Scheduled(cron = "0 0 * * * *") // 매 정시에 실행
public void runTask() {
System.out.println("정시 작업 실행!");
}
③ GitHub Actions 스케줄 예
on:
schedule:
- cron: "0 8 * * 1-5" # 평일 오전 8시 실행
🎯 함께 알아두면 좋은 개념
개념 | 설명 |
@Scheduled(fixedDelay, fixedRate) | 특정 주기로 실행하는 Spring 기능 |
Job Queue | 예약된 작업을 큐에 넣고 워커가 처리 |
Retry, Backoff | 실패 시 재시도 간격 설정 |
TimeZone 설정 | 국제화 서비스에서는 타임존 고려 필수 |
Distributed Scheduler | 여러 인스턴스에서 중복 실행 방지 필요 (e.g. Quartz clustered, Redis lock 등) |
📌 정리 요약
- CRON: 리눅스 기반에서 실행되는 전통적인 시간 기반 작업 실행 도구
- Scheduler: 시간뿐 아니라 조건/이벤트 기반으로도 실행 가능한 포괄적인 개념
- 모든 백엔드 시스템, 배치 작업, DevOps 환경에서 기본적으로 필요하며 CI/CD, 워크플로우 자동화, 정기 백업, 데이터 수집 등 광범위한 용도에 사용됨
728x90
'Programming' 카테고리의 다른 글
Java 주요 컬렉션 비교표 (0) | 2025.04.17 |
---|---|
Observer 패턴 (Pub/Sub, 이벤트 리스너) (0) | 2025.04.17 |
Thread / Coroutine / Green Thread (0) | 2025.04.17 |
Path Variable의 개념과 대규모 시스템에서의 영향 (0) | 2025.04.17 |
APISIX Lua 플러그인: RESTHeart 데이터 Kafka 및 외부 API 전송 튜토리얼 (0) | 2025.04.16 |