
지난 글에서는 웹사이트에서 명언 데이터를 크롤링한 뒤, CSV로 저장하고 간단한 시각화까지 해보았다. 즉, 데이터가 수집 → 가공 → 분석되는 일련의 흐름을 수동으로 경험해봤다. 그런데 여기서 중요한 물음이 하나 생긴다.
“이 작업을 매번 내가 손으로 해야 할까?”
예를 들어, 매일 자정마다 새로운 데이터를 긁어오고 싶다거나, 매주 월요일에 한 번씩 크롤링해서 갱신하고 싶다면? 이건 사람이 매번 실행 버튼을 눌러선 해결이 안 된다. 이제 자동화 즉, "딸깍"이 필요해진 순간이다.
자동화를 실현하는 여러 방법 중, 가장 기본적이면서도 강력한 도구가 cron(크론)이다.
크론은 리눅스 환경에서 돌아가는 시간 기반 스케줄러로, 정해진 시간에 지정된 명령어(또는 스크립트)를 자동으로 실행시켜준다.
매일 0시에 크롤링 스크립트 실행
매시간 마다 특정 로그 파일 저장
매주 특정 폴더를 자동 백업
이 모든 걸 사람이 하나하나 신경쓰지 않아도 자동으로 처리할 수 있다.
cron은 리눅스의 기본 기능이다. 문제는, 우리가 실습 환경으로 사용해온 Windows에는 크론이 없다.
물론 윈도우에도 작업 스케줄러라는 도구가 있긴 하지만, 앞으로 배우게 될 많은 자동화 도구들, 예를 들어 Airflow, Luigi 등과 같은 워크플로우들은 Linux 환경을 기본 전제로 한다.
즉, 윈도우만으로는 제대로 된 크론 실습을 하기가 어렵다.
그래서 오늘 우리가 할 일은 다음과 같다.
1. 윈도우에서 리눅스를 설치할 수 있는 환경 만들기
→ WSL을 통해 Ubuntu 설치
2. Ubuntu 위에 cron을 설치하고 실행해보기
→ 실제로 crontab에 등록하고, 자동 실행되는지 확인
3. 실습 결과 확인
→ 1분마다 로그를 찍는 크론 작업 등록 → 로그 파일 생성 확인
이걸 통해 우리는 크론이 어떻게 작동하는지,
실제로 어떻게 설정하고 관리하는지를 직접 체험해보도록 하자.
WSL은 윈도우 안에 리눅스 운영체제를 가상으로 실행할 수 있게 해주는 기능이다. 쉽게 말해, 윈도우 안에 리눅스 ubuntu를 하나 띄워서 터미널 명령어를 그대로 쓸 수 있는 환경이 된다.
덕분에 리눅스용 도구들(Cron 포함)을 윈도우에서도 학습하고 실습할 수 있다. 데이터 엔지니어링에서는 대부분 리눅스 기반으로 작업하기 때문에, WSL 세팅은 거의 필수 코스라고 보면 된다.
wsl --install
이 명렁어는 다음을 자동으로 수행한다.
관리자 권한으로 PowerShell을 열어야 함.
(마우스 오른쪽 클릭 후 '관리자 권한으로 실행')
설치 완료 후 재부팅이 필요할 수 있음
이후 Ubuntu 콘솔을 처음 실행하면 사용자 계정과 비밀번호를 설정해야 함.
* 요로코롬 관리자 계정과 비밀번호를 설정할 수 있는 화면이 나온다.
Ubuntu가 설치되었다면, 이제 아래 단계를 따라가자.
sudo apt update
sudo apt install cron
이미 설치되어 있다면 "이미 최신 버전입니다"라고 뜨고, 설치되지 않았다면 몇 초 안에 설치가 끝난다.

* 나는 오늘 처음 설치했었어서 잠깐의 업데이트를 수행했다.
sudo service cron start
#실행되고 있다면 명령어를 입력할 수 있는 창이 뜬다.
서비스가 정상 작동 중인지 확인하려면?
sudo service cron status
#active (running)이면 크론 서비스가 제대로 켜진 것이다.
* Active 탭에서 "running"을 확인할 수 있다.
자, 이제 설치 다 했으니 이제 cron을 만들어보자. 우리는 1분마다 "Hello from cron!"이라는 문장을 로그에 남겨볼 것이다.
1️⃣ 먼저 홈 디렉토리에 스크립트를 하나 만든다.
nano ~/cron_test.sh
2️⃣ 다음 내용을 입력한다.
#!/bin/bash
echo "Hello from cron! $(date)" >> ~/cron_log.txt
3️⃣저장하고 나와서, 실행 권한을 부여한다:
chmod +x ~/cron_test.sh
* 경로로 들어가서 파일의 권한을 확인해보자. 맨 앞단에 rxx(7)이 부여되어 있으면 정상이다.
crontab -e
편집기에 아래 한 줄을 추가한다.
# * * * * * /home/사용자명/cron_test.sh
# 분, 시, 일, 월, 요일(0-6, 일요일 = 0)
* * * * * /home/ttneck/cron_test.sh
* 성공적으로 crontab이 등록되었다면 아래와 같이 메시지를 확인할 수 있다.
1~ 2분 정도 기다린 후 다음 명령어로 로그 파일을 확인해보자.
cat ~/cron_log.txt
* 성공적으로 crontab이 등록되었다면 아래와 같이 메시지를 확인할 수 있다.
1분마다 크론이 실행되도록 설정했는데도 로그가 찍히지 않는다면, 아래 항목들을 순서대로 확인해보자.
sudo service cron status
* 사진과 같이 active(running) 상태여야한다. 만약 꺼져있다면 아래 명령어로 시작하자.
sudo service cron start
chmod +x ~/cron_test.sh
* 아래처럼 777은 보안상 권장되진 않는다.
상대경로(~/) 대신 아래처럼 절대경로를 사용하자.
/home/사용자면/cron_test.sh
cron은 login shell이 아니기 때문에, 기본 PATH가 다를 수 있다.
#!/bin/bash
PATH=/usr/bin:/bin
echo "Hello from cron! $(date)" >> /home/사용자명/cron_log.txt
cron 작업 등록 시 아래처럼 표준 출력과 에러 출력을 로그로 남겨보자.
* * * * * /home/사용자명/cron_test.sh >> /home/사용자명/cron_stdout.log 2>> /home/사용자명/cron_error.log
crontab -e 편집기에서 앞에 #이 붙어있으면 주석이다.
아래처럼 #이 없이 맨 아래 줄에 추가해야 실행된다.
(누가 저런 실수하냐 ㅋㅋ 아니. 생각보다 실수 ㅈㄴ 많이 할거다.)
cron은 리눅스에서 지정한 시간마다 명령어를 자동으로 실행해주는 도구
WSL (Windows Subsystem for Linux) 덕분에 윈도우 환경에서도 cron 실습이 가능
crontab -e로 작업 등록할 때 주석(#) 처리 조심!한 칸 차이로 몇 시간 날릴 수도 있음 😇
로그가 안 찍힌다? 아래 순서대로 점검해보자:
크론 데몬 살아있나? → sudo service cron status
경로 제대로 잡혔나? → PATH 설정 or 절대경로 쓰기
실행 권한 줬나? → chmod +x script.sh
로그 출력 어디로 가고 있나? → >>, 2>> 확인
진짜 실행은 됐나? → /var/log/syslog에서 CRON으로 검색
이번 실습은 단순한 크론 명령어 등록을 넘어서, *WSL 환경 세팅부터 cron 설치, 실행 및 권한 부여, 로그 리디렉션까지 자동화의 기본기를 체계적으로 짚어보는 과정이었다.
오늘은 단순히 “1분마다 로그 찍기”라는 작업을 구현했지만, 그 안에는 스크립트 실행 흐름, 시스템 권한 관리, 로그 기반 디버깅 같은 실무에서 반드시 요구되는 핵심 개념들이 담겨 있다.
데이터 엔지니어링 관점에서 보면, 이건 단순한 실습이 아니라 정기 수집(스케줄링)의 출발점이다. 배치 수집, 모니터링, 장애 대응 같은 자동화 시스템의 본질은 결국 신뢰성 있는 반복 실행에서 출발한다.
이번 실습을 통해 우리는 단지 cron을 ‘써본’ 게 아니라, 자동화를 제어하고 관리할 수 있는 감각을 기르기 시작한 셈이다.
이제 cron이 뭔지, 어떻게 쓰는지는 알게 됐다. 그렇다면 이제 실제로 우리가 만들었던 크롤링 스크립트를 이 cron에 물려 자동 실행시켜볼 차례다.
다음 글에서는:
매일 자정에 실행되는 크롤링 작업 만들기
로그 자동 저장 설정
실행 결과 확인 및 디버깅 방법
날짜별 파일 저장처럼 실무에 가까운 자동화 흐름 설계
까지 다뤄볼 예정이다. 즉, 이번엔 단순한 ‘명령어 테스트’가 아니라 “진짜 내가 만든 프로그램을 자동으로 돌려보는 첫 경험”이 될 거다.