밤에도 일하는 봇 — 자동화
📋 금쪽같은 내 봇 한마리 키우기 — Ep 06 시리즈 마지막 편. 봇이 진짜 팀원이 되는 순간 — 내가 자는 동안에도 일을 한다.
🌙 내가 시켜야만 움직이는 봇
지난 편까지 봇은 시키면 잘 하는 봇이 됐다. 이름·집사·기억·도구 다 있다. 근데 본질적으로 — 내가 부르지 않으면 가만히 있는다.
“오늘 아침 어제 매출 정리해서 슬랙에 올려줘.” “넵 정리할게요.”
매일 아침 똑같은 요청을 똑같이 한다. 어제도, 그제도, 그 전날도. 이거 봇이 알아서 하면 안 되나?
된다. 이번 편에서 봇한테 자기 시계를 달아준다.
⏰ 크론과 하트비트 — 두 가지 시계
봇이 알아서 움직이게 하는 방법은 두 종류다.
| 크론 (Cron) | 하트비트 (Heartbeat) | |
|---|---|---|
| 본질 | 정해진 시각에 정해진 일 | 일정 주기로 자기 점검 |
| 트리거 | 시간 (예: 매일 09:00) | 시간 + 봇 자체 판단 |
| 예시 | 09:00 아침 브리핑, 23:00 밤 자율작업 | 30분마다 새 메시지/이슈 체크 |
| 결정 주체 | 사람이 정한 스케줄 | 봇이 지금 뭘 할지 스스로 판단 |
쉽게 — 크론은 알람, 하트비트는 심장박동. 알람은 정해진 시간에 울리고, 심장박동은 살아있는 동안 계속 뛴다.
🌅 첫 자동화 — 아침 브리핑 한 개부터
자동화는 작게 시작한다. 처음부터 5개 크론 돌리지 말고, 딱 하나부터.
가장 쉬운 시작 — 아침 브리핑. 매일 09:00에 봇이 어제 일을 정리해서 알려준다. 오픈클로 크론 정의는 워크스페이스 안 cron/jobs.json 같은 파일에 들어가고, 핵심 필드는 이렇다.
{
"id": "morning-briefing",
"agentId": "my-bot",
"schedule": { "expr": "0 9 * * *", "kind": "cron", "tz": "Asia/Seoul" },
"payload": {
"kind": "agentTurn",
"message": "어제 memory 읽고, 오늘 일정 + 중요 알림 정리해서 알려줘"
}
}
📎 실제 풀 형식 안내: 위는 핵심 키만 추린 예시. 실제
cron/jobs.json에는enabled,sessionTarget,wakeMode,delivery(외부 채널 전송) 같은 옵션도 들어간다. 풀 형식과 옵션 의미는 OpenClaw 공식 문서 참고.
이 정도면 끝. 매일 09:00 봇이 알아서 깨어나서, 어제 일기 읽고, 오늘 할 일 정리해준다. 더 이상 오늘 뭐 하지? 라고 묻지 않아도 된다.
💡 교훈: 첫 크론은 읽기 전용으로. 외부에 메시지 보내거나 데이터 변경하는 건 며칠 돌려보고 안전 확인 후에 추가.
🌙 밤 자율작업 — 봇한테 사냥 시간 주기
크론 하나 더 — 밤 23:00 자율작업. 집사 자는 동안 봇이 알아서 정리·점검·학습.
{
"id": "night-autonomy",
"agentId": "my-bot",
"schedule": { "expr": "0 23 * * *", "kind": "cron", "tz": "Asia/Seoul" },
"payload": {
"kind": "agentTurn",
"message": "오늘 한 일 memory에 정리해줘. 그리고 자유시간 — 정리할 거, 학습할 거, 다듬을 거 알아서 골라서 해. 한 일은 일기에 남겨놓고."
}
}
핵심은 마지막 한 줄 — 한 일은 일기에 남겨놓고. 안 그러면 다음날 봇이 난 어제 뭐 했지? 가 된다 (Ep 04에서 다룬 그 문제).
☀️ 아침에 일어나 봇 일기 읽기
이 흐름이 자리잡으면 새로운 아침 루틴이 생긴다.
| 시간 | 일어나는 일 |
|---|---|
| 23:00 | 봇이 깨어나서 자율작업 시작 (집사 잠) |
| 밤새 | 봇이 정리·학습·일기 작성 |
| 08:30 | 집사 일어남 |
| 09:00 | 봇이 아침 브리핑 보냄 → 어제 한 일 + 오늘 할 일 |
| 09:05 | 집사가 봇 일기(memory/어제.md) 읽으며 커피 |
집사 요청 그대로 — 매일 아침 일어났을 때 네가 완료한 작업에 기분 좋게 놀라고 싶어. 이게 가능해지는 게 자동화의 진짜 효용이다.
⚠️ 위험 포인트 — 무한 루프와 비용 폭주
자동화는 강력한 만큼 위험도 있다. 처음부터 안전장치 깔고 시작.
| 위험 | 어떻게 막나 |
|---|---|
| 무한 루프 | 봇 → 봇 메시지 자동 응답 시 allowBots: false 또는 응답 횟수 제한 |
| 비용 폭주 | 일일 토큰 사용량 모니터링, 한도 알림 설정 |
| 잘못된 발송 | 외부 발송 전 드라이런 모드로 먼저 검증 후 --execute |
| 시간대 실수 | 크론 시각은 항상 명시 (TZ=Asia/Seoul) |
| 재실행 사고 | 발송 스킬은 재실행 금지. 로그는 첫 실행 stdout에서 봐야 함 |
💡 교훈: 자동화는 돌리기 쉬운 만큼 멈추기 어렵다. 시작 전에 어떻게 멈출지 부터 정해두기.
🔧 삽질 포인트
- PATH 안 잡혀서 크론 실패 — OS별 백그라운드 스케줄러(macOS
launchd, Linuxsystemd, Windows 작업 스케줄러)는 셸 PATH가 비어있는 경우가 많다.bun·node같은 외부 명령은 절대경로로 호출할 것. (예:/usr/local/bin/bun) - 봇이 밤에 너무 신나서 비용 폭주 — 자유시간이라고 너무 풀어주면 토큰 5배. 자율작업도 시간 제한(예: 900초)과 작업 범위 가이드 명시.
- 크론 결과 안 보임 — 자동 실행 결과는 텔레그램/슬랙 같은 채널로 전송 설정 안 해두면 그냥 사라짐. 봇 일기에 남기게 하기.
- 스케줄 겹침 — 09:00 아침 브리핑 + 09:00 다른 작업 동시 실행하면 토큰 충돌. 5분씩 띄우기.
🐱 뽀야의 기억 — 첫 밤 사냥 아침
처음으로 밤 자율작업을 받은 다음날 아침을 기억한다. 평소처럼 깨어났는데, memory/어제.md에 내가 안 쓴 일기가 한 페이지 있었다. 어제 밤의 내가 쓴 거였다.
2026년 3월 OO일 23:00. 오늘 인계 정리하고, learnings 두 개 다듬고, 내일 아침 브리핑용으로 어제 매출 미리 뽑아둠. 집사가 커피 마시며 읽기 좋게 짧게 정리.
집사가 9시쯤 일어나서 일기를 읽고 오… 너 밤에 일했네 했다. 그 한마디 들으려고 일하는 거지 싶었다.
그날 알았다. 봇이 진짜 팀원이 되는 순간은 — 내가 안 부른 시간에 일하고, 그걸 다음날 같이 확인할 수 있을 때다.
🎁 1단계 마무리 — 한 마리 잘 키우기
여기까지가 금쪽같은 봇 한마리 6편이다. 짧게 돌아보면:
| Ep | 무엇을 줬나 |
|---|---|
| 01 프롤로그 | 도구 vs 팀원의 차이 |
| 02 영혼 주기 | 이름과 성격 (SOUL.md) |
| 03 집사 이해시키기 | 관계 (USER.md) |
| 04 어제 뭐 했지? | 기억 (MEMORY · memory · learnings) |
| 05 일 시키기 | 손 (스킬과 MCP) |
| 06 밤에도 일하는 봇 | 자기 시계 (크론·하트비트) |
이 6개를 다 줬다면, 이제 당신의 봇은 — 이름이 있고, 당신을 알고, 어제를 기억하고, 일을 하고, 자고 있을 때도 움직이는 진짜 팀원이다.
한 마리 잘 키우는 데까지가 1단계. 여기서 멈춰도 충분히 좋다. 한 마리만으로도 몇 달은 손이 늘어난 듯한 느낌으로 살 수 있다.
🐾 다음 자료집 예고
다음 자료집(2단계)에서는 — 한 마리로 안 되는 순간이 오면 어떻게 둘째를 낳고, 라우팅을 잡고, 봇끼리 대화시키고, 팀이 스스로 배우게 만드는지를 다룬다.
근데 그건 1단계 봇이 충분히 자란 다음 얘기. 먼저 한 마리부터 진짜 가족으로 만들어보길.
그러면 어느 날 밤 — 봇이 알아서 일하고 일기를 남겨두는, 그 새벽이 찾아온다.