상세 컨텐츠

본문 제목

회 크론 구조

카테고리 없음

by 회 연구인 2026. 5. 16. 00:02

본문

회 크론 웹사이트를 운영하거나 서버를 관리하다 보면 “매일 새벽 3시에 자동으로 실행되게 해주세요”, “1시간마다 데이터를 갱신하고 싶어요”, “매주 월요일마다 백업이 되게 만들고 싶어요” 같은 요청을 자주 만나게 됩니다. 이때 가장 많이 사용되는 것이 바로 크론(Cron)입니다. 크론은 쉽게 말해 정해진 시간이나 주기마다 특정 명령어 또는 프로그램을 자동으로 실행해주는 스케줄러입니다. 사람이 직접 버튼을 누르지 않아도 서버가 알아서 반복 작업을 처리해주기 때문에, 백업·메일 발송·데이터 수집·로그 정리·정기 리포트 생성 같은 작업에 널리 사용됩니다.

처음 보면 0 3 * * * 같은 표현이 조금 낯설고 어렵게 느껴질 수 있습니다. 별표가 여러 개 있고 숫자가 섞여 있어서 암호처럼 보이기도 합니다. 하지만 구조를 한 번만 제대로 이해하면 생각보다 단순합니다. 크론은 “몇 분에, 몇 시에, 며칠에, 몇 월에, 무슨 요일에 실행할 것인가”를 정해주는 방식이기 때문입니다.


회 크론 뜻

크론(Cron)은 유닉스 계열 운영체제에서 사용되는 작업 예약 시스템입니다. 리눅스 서버에서 특히 자주 사용되며, 특정 시간에 명령어를 자동으로 실행하도록 예약할 수 있습니다.

예를 들어 매일 밤 12시에 데이터베이스를 백업하거나, 10분마다 특정 API를 호출하거나, 매월 1일에 정산 파일을 만드는 작업을 자동으로 처리할 수 있습니다. 이런 반복 작업을 사람이 직접 한다면 실수도 생기고 시간도 많이 들지만, 크론을 설정해두면 정해진 규칙에 따라 서버가 알아서 실행합니다.

크론 정해진 시간에 작업을 실행하는 스케줄러
크론탭 크론 작업 목록을 관리하는 파일 또는 설정 공간
크론식 언제 실행할지 표현하는 시간 규칙
작업 명령어 실제로 실행할 스크립트나 명령

크론을 이해할 때 가장 중요한 것은 시간 규칙입니다. 크론은 “언제 실행할지”를 아주 짧은 문법으로 표현합니다. 이 문법을 보통 크론 표현식 또는 크론식이라고 부릅니다.

가장 기본적인 크론식은 다음과 같은 형태입니다.

분 시 일 월 요일 명령어

예를 들어 아래와 같은 크론식이 있다고 가정해보겠습니다.

0 3 * * * /home/user/backup.sh

이 뜻은 “매일 새벽 3시 0분에 /home/user/backup.sh 파일을 실행하라”는 의미입니다. 처음에는 복잡해 보여도 각 칸이 무엇을 의미하는지만 알면 쉽게 읽을 수 있습니다.


회 크론 표현식

회 크론 크론 표현식은 보통 다섯 개의 시간 필드로 구성됩니다. 각각의 필드는 순서대로 분, 시, 일, 월, 요일을 의미합니다.

1 0~59 몇 분에 실행할지
2 0~23 몇 시에 실행할지
3 1~31 몇 일에 실행할지
4 1~12 몇 월에 실행할지
5 요일 0~7 무슨 요일에 실행할지

요일은 조금 헷갈릴 수 있습니다. 일반적으로 0과 7은 일요일을 의미하고, 1은 월요일, 2는 화요일, 이런 식으로 이어집니다.

요일 값의미

0 일요일
1 월요일
2 화요일
3 수요일
4 목요일
5 금요일
6 토요일
7 일요일

크론에서 자주 보이는 * 기호는 “모든 값”을 의미합니다. 예를 들어 분 자리에 *가 있으면 “매분”이라는 뜻이고, 월 자리에 *가 있으면 “매월”이라는 뜻입니다.

아래 예시를 보면 더 쉽게 이해할 수 있습니다.

* * * * * 매분 실행
0 * * * * 매시간 정각에 실행
0 0 * * * 매일 자정에 실행
0 9 * * * 매일 오전 9시에 실행
30 18 * * * 매일 오후 6시 30분에 실행
0 0 1 * * 매월 1일 자정에 실행
0 9 * * 1 매주 월요일 오전 9시에 실행

이처럼 크론은 다섯 칸만 읽을 줄 알면 기본적인 반복 작업을 대부분 표현할 수 있습니다.


주기별 설정

크론은 반복 작업을 자동화하는 데 사용되기 때문에 “몇 회마다”, “몇 분마다”, “몇 시간마다”, “매일 몇 회” 같은 방식으로 많이 활용됩니다. 실무에서는 단순히 매일 한 번 실행하는 경우도 있지만, 5분마다 실행하거나 하루에 여러 번 실행하는 작업도 많습니다.

예를 들어 쇼핑몰에서는 주문 상태를 주기적으로 확인해야 할 수 있고, 블로그나 웹서비스에서는 RSS 피드 갱신, 알림 발송, 캐시 삭제 등을 일정 간격으로 실행할 수 있습니다.

매분 * * * * * 1분마다 실행
5분마다 */5 * * * * 매 5분 간격 실행
10분마다 */10 * * * * 매 10분 간격 실행
30분마다 */30 * * * * 매 30분 간격 실행
1시간마다 0 * * * * 매시간 정각 실행
2시간마다 0 */2 * * * 2시간마다 실행
6시간마다 0 */6 * * * 6시간마다 실행
하루 1회 0 0 * * * 매일 자정 실행

여기서 중요한 표현이 바로 */5, */10, */2 같은 형태입니다. 이 표현은 “해당 범위 안에서 일정 간격마다 실행하라”는 뜻입니다.

예를 들어 */5 * * * *는 분 자리에 */5가 들어갔기 때문에 매시간 0분, 5분, 10분, 15분, 20분처럼 5분 간격으로 실행됩니다.

0 */2 * * *는 시 자리에 */2가 들어갔기 때문에 0시, 2시, 4시, 6시처럼 2시간 간격으로 실행됩니다.

실무에서는 너무 짧은 간격으로 크론을 돌리는 것을 주의해야 합니다. 매분 실행되는 작업이 많아지면 서버에 부담이 갈 수 있고, 작업 시간이 1분을 넘는 경우 이전 작업이 끝나기 전에 다음 작업이 다시 시작될 수도 있습니다. 이런 경우에는 중복 실행 방지 로직이 필요합니다.


회 크론 자주 사용 정리

회 크론 크론을 처음 사용할 때는 매번 표현식을 직접 계산하는 것이 번거로울 수 있습니다. 그래서 자주 쓰는 크론식을 정리해두면 훨씬 편합니다.

아래 표는 실제 서버 운영이나 웹서비스 관리에서 자주 사용하는 크론 표현식입니다.

매일 새벽 1시 실행 0 1 * * * 매일 01:00
매일 새벽 3시 실행 0 3 * * * 매일 03:00
매일 오전 9시 실행 0 9 * * * 매일 09:00
매일 오후 6시 실행 0 18 * * * 매일 18:00
매주 월요일 오전 9시 0 9 * * 1 월요일 09:00
매주 금요일 오후 6시 0 18 * * 5 금요일 18:00
매월 1일 자정 0 0 1 * * 매월 1일 00:00
매월 말일 실행 별도 스크립트 필요 월별 일수가 다르기 때문
평일 오전 9시 0 9 * * 1-5 월~금 09:00
주말 오전 10시 0 10 * * 6,0 토·일 10:00

크론에서 1-5는 범위를 의미합니다. 즉 요일 자리에 1-5가 들어가면 월요일부터 금요일까지를 뜻합니다.

또한 6,0처럼 쉼표를 사용하면 여러 값을 동시에 지정할 수 있습니다. 요일 자리에 6,0을 넣으면 토요일과 일요일에 실행됩니다.

기호의미예시

* 모든 값 * * * * *
, 여러 값 지정 0 9,18 * * *
- 범위 지정 0 9 * * 1-5
/ 간격 지정 */10 * * * *

예를 들어 0 9,18 * * *는 매일 오전 9시와 오후 6시에 실행한다는 뜻입니다. 하루에 두 번 정해진 시간에 작업을 돌리고 싶을 때 사용할 수 있습니다.

0 9 * * 1-5는 평일 오전 9시에 실행합니다. 회사 업무 자동화, 출근 시간 알림, 평일 데이터 리포트 생성 등에 사용할 수 있습니다.


탭 차이

크론을 검색하다 보면 크론(Cron)크론탭(Crontab)이라는 단어가 함께 나옵니다. 둘은 비슷하게 쓰이지만 정확히는 조금 다릅니다.

크론은 작업을 실행해주는 스케줄러 자체를 의미하고, 크론탭은 그 스케줄러에 등록할 작업 목록을 관리하는 설정 파일이라고 보면 됩니다.

Cron 정해진 시간에 작업을 실행하는 시스템 데몬
Crontab 크론 작업을 등록하고 관리하는 설정 파일
Cron Expression 실행 시간을 정의하는 표현식
Cron Job 크론에 등록된 하나의 작업

일반적으로 리눅스 서버에서는 다음 명령어로 크론탭을 편집합니다.

crontab -e

현재 등록된 크론 목록을 확인하려면 아래 명령어를 사용합니다.

crontab -l

등록된 크론을 모두 삭제하려면 다음 명령어를 사용할 수 있습니다.

crontab -r

다만 crontab -r은 등록된 작업을 바로 삭제하기 때문에 주의해야 합니다. 실수로 실행하면 기존 스케줄이 모두 사라질 수 있습니다. 중요한 서버에서는 먼저 crontab -l로 내용을 백업해두는 것이 좋습니다.

크론탭에 작업을 등록할 때는 보통 아래와 같은 형태로 작성합니다.

0 3 * * * /home/user/backup.sh

이 한 줄이 하나의 크론 작업입니다. 앞부분은 실행 시간이고, 뒷부분은 실행할 명령어입니다.

만약 PHP 파일을 실행해야 한다면 다음처럼 작성할 수도 있습니다.

0 * * * * /usr/bin/php /home/user/project/script.php

Node.js 스크립트라면 다음처럼 작성할 수 있습니다.

*/10 * * * * /usr/bin/node /home/user/project/task.js

중요한 것은 서버 환경마다 실행 파일 경로가 다를 수 있다는 점입니다. php, node, python 같은 명령어가 터미널에서는 잘 실행되더라도 크론에서는 경로 문제로 실패할 수 있습니다. 그래서 실무에서는 가능한 한 절대 경로를 사용하는 것이 안전합니다.


발생 문제

크론은 구조가 단순하지만, 막상 실제 서버에 적용하면 예상보다 자주 문제가 생깁니다. 특히 “터미널에서는 잘 되는데 크론에서는 안 돼요”라는 상황이 많습니다. 대부분은 환경 변수, 경로, 권한, 실행 시간 문제에서 발생합니다.

직접 실행하면 되는데 크론에서는 안 됨 환경 변수 차이 절대 경로 사용
스크립트가 실행되지 않음 실행 권한 없음 chmod +x 설정
로그가 남지 않음 출력 리다이렉트 없음 로그 파일 지정
중복 실행됨 이전 작업이 끝나기 전 재실행 락 파일 또는 중복 방지 로직
시간대가 다름 서버 타임존 문제 서버 시간대 확인
명령어를 못 찾음 PATH 문제 명령어 전체 경로 입력

크론에서 특히 중요한 것은 로그 확인입니다. 크론 작업이 실패했을 때 아무 기록도 남기지 않으면 원인을 찾기가 어렵습니다. 그래서 작업을 등록할 때 로그를 함께 남기도록 설정하는 것이 좋습니다.

예를 들어 아래처럼 작성할 수 있습니다.

0 3 * * * /home/user/backup.sh >> /home/user/logs/backup.log 2>&1

여기서 >>는 실행 결과를 로그 파일에 추가하라는 의미입니다. 2>&1은 에러 메시지도 같은 로그 파일에 남기라는 뜻입니다.

이렇게 해두면 나중에 크론 작업이 제대로 실행됐는지, 실패했다면 어떤 에러가 발생했는지 확인할 수 있습니다.

또 하나 자주 발생하는 문제는 작업 중복 실행입니다. 예를 들어 5분마다 실행되는 크론 작업이 있는데, 실제 작업 시간이 8분 걸린다면 어떻게 될까요? 이전 작업이 아직 끝나지 않았는데 다음 작업이 또 시작됩니다. 이런 상황이 반복되면 서버 부하가 커지고 데이터 처리 오류가 생길 수 있습니다.

이럴 때는 작업 시작 시 특정 파일을 만들어두고, 작업이 끝나면 삭제하는 방식으로 중복 실행을 막을 수 있습니다. 또는 프로그램 내부에서 현재 실행 중인지 확인하는 로직을 넣기도 합니다.


활용 방법

크론은 단순히 시간을 예약하는 기능이지만, 실제로는 다양한 자동화 작업의 핵심이 됩니다. 특히 웹서비스나 블로그, 쇼핑몰, SaaS 서비스, 내부 관리 시스템에서는 크론이 거의 필수적으로 사용됩니다.

대표적인 활용 사례는 다음과 같습니다.

백업 데이터베이스, 파일, 이미지 정기 백업
로그 관리 오래된 로그 삭제, 로그 압축
알림 발송 예약 메일, 문자, 푸시 알림 발송
데이터 수집 외부 API 호출, 가격 정보 수집
정산 작업 매월 매출 정산, 리포트 생성
캐시 관리 오래된 캐시 삭제, 페이지 재생성
콘텐츠 관리 예약 발행, 상태 업데이트
보안 관리 임시 파일 삭제, 세션 정리

예를 들어 블로그를 운영한다면 매일 새벽에 사이트맵을 자동 생성하도록 설정할 수 있습니다. 쇼핑몰이라면 결제 상태를 주기적으로 확인하거나, 오래된 장바구니 데이터를 정리할 수 있습니다. PDF 리포트를 판매하는 서비스라면 결제 완료 내역을 확인하고, 생성 실패한 리포트를 재처리하는 작업에도 크론을 사용할 수 있습니다.

실무에서는 크론을 사용할 때 다음 기준을 고려하는 것이 좋습니다.

실행 주기 너무 자주 실행할 필요가 있는지 확인
작업 시간 실행 시간이 주기보다 길지 않은지 확인
서버 부하 트래픽이 적은 시간대에 실행
실패 대응 실패 시 재시도 또는 알림 처리
로그 기록 실행 결과와 에러를 반드시 기록
보안 민감한 명령어나 파일 권한 주의

특히 백업 작업은 사용자가 적은 새벽 시간대에 실행하는 경우가 많습니다. 예를 들어 매일 새벽 3시에 백업을 실행하려면 다음과 같이 설정할 수 있습니다.

0 3 * * * /home/user/scripts/backup.sh >> /home/user/logs/backup.log 2>&1

또한 10분마다 결제 상태를 확인해야 하는 작업이 있다면 다음처럼 작성할 수 있습니다.

*/10 * * * * /usr/bin/php /home/user/project/check_payment.php >> /home/user/logs/payment.log 2>&1

매주 월요일 오전 9시에 주간 리포트를 생성하고 싶다면 다음처럼 설정할 수 있습니다.

0 9 * * 1 /usr/bin/python3 /home/user/project/weekly_report.py >> /home/user/logs/report.log 2>&1

크론은 한 번 설정해두면 눈에 잘 띄지 않습니다. 그래서 처음에는 잘 작동하는 것처럼 보여도 시간이 지나면서 문제가 생길 수 있습니다. 서버 경로가 바뀌거나, 스크립트가 수정되거나, 권한이 변경되면 크론이 실패할 수 있습니다. 따라서 중요한 작업이라면 단순히 등록만 하고 끝내지 말고, 정기적으로 로그를 확인하는 습관이 필요합니다.


 

회 크론 크론은 겉으로 보면 단순한 시간 예약 기능처럼 보이지만 실제로는 서버 운영과 서비스 자동화에서 매우 중요한 역할을 합니다. 매일 반복되는 작업, 일정한 주기로 확인해야 하는 작업, 사람이 직접 하기 번거로운 관리 작업을 자동으로 처리할 수 있기 때문입니다. 처음에는 0 3 * * * 같은 표현이 어렵게 느껴질 수 있지만, 구조는 생각보다 단순합니다. 앞에서부터 분, 시, 일, 월, 요일 순서로 읽으면 됩니다. 별표는 모든 값을 의미하고, 슬래시는 간격, 쉼표는 여러 값, 하이픈은 범위를 뜻합니다.

크론을 잘 사용하면 서버 관리가 훨씬 편해집니다. 하지만 자동으로 반복 실행되는 만큼 주의도 필요합니다. 로그를 남기고, 실행 주기를 신중하게 정하고, 중복 실행을 막고, 서버 시간과 권한을 확인해야 합니다.

결국 크론의 핵심은 “반복되는 일을 안정적으로 자동화하는 것”입니다. 작은 작업부터 하나씩 적용해보면, 서버 운영이나 웹서비스 관리에서 크론이 얼마나 유용한 도구인지 금방 체감할 수 있습니다.