매일 아침 15분짜리 손작업, AI에게 통째로 떠넘긴 이야기
매일 하는 복붙·파일 정리·점검 작업을 '나만을 위해' 자동화한 실전기. 복붙으로 돌아가는 스크립트와, 내가 저지른 실패에서 배우는 안전한 맡기기.
매일 아침, 커피를 내리기 전에 똑같은 작업을 하고 있었습니다.
폴더를 열고, 어제 로그를 확인하고, 테스트가 깨지지 않았는지 눈으로 보고, 신경 쓰이는 변경점을 메모장에 붙인다. 하나하나는 1분. 그런데 전부 하면 커피가 식을 무렵에야 겨우 끝납니다. 매일이요. 주말 빼고, 줄곧.
어느 아침 문득 생각했습니다. “이거, 내가 할 필요 있나?”라고.
결론부터 말하면, 없었습니다. 지금 그 루틴은 제가 세수하는 사이에 작은 스크립트가 끝내 놓습니다. 그것도 저보다 꼼꼼하게요. 오늘은 그 이야기를, 코드까지 전부 보여주면서 써볼게요.
‘자동화’는 개발자만의 이야기가 아니다
자동화라고 하면 CI/CD니 배포 파이프라인이니, 거창한 걸 떠올리시죠. 그런데 제가 하고 싶은 건 훨씬 수수한 이야기입니다.
당신이 매일 멍하니 손으로 하는, 그 복붙. 그걸 대신 시키는 것.
예를 들면 이런 거예요. 여러 파일에서 숫자를 주워다 표로 정리한다. 정해진 양식대로 메모를 다듬는다. 어제와 오늘 뭐가 바뀌었는지 나란히 본다. 오래된 메모를 골라낸다. 죄다 ‘생각하는’ 것보다 ‘눈과 손가락을 움직이는’ 작업입니다. 사람이 하면 실수하고, 질리고, 무엇보다 시간이 녹아내려요.
여기서 AI, 구체적으로는 Claude Code가 효과를 봅니다. 포인트는 딱 하나. AI에게 전부 떠넘기지 않는 것. “알아서 잘 좀 해줘”는 사고의 시작입니다(뒤에서 제 실패담으로 증명할게요). 대신 읽을 범위·할 일·건드리면 안 되는 것을 먼저 정하고, 반복되는 부분만 맡긴다. 이것만으로 세상이 달라집니다.
참고로 여기서 자주 나오는 ‘harness(하네스)‘라는 말. 직역하면 마구(馬具)인데, 요는 AI를 폭주시키지 않기 위한 바깥 틀을 말합니다. 무엇을 입력하고, 어디까지 허락하고, 어떻게 기록하고, 안 될 때 멈추는가. 이 틀을 먼저 만들어 둔다, 라고 기억하세요.
어디까지 맡기고, 어디서부터 직접 볼까
맡기기 전에 딱 한 번만 선을 긋습니다. 이걸 게을리하면, 빨라진 것처럼 보여도 나중에 호되게 당해요. 제가 추천하는 건 4단계입니다.
| 단계 | AI에게 맡길 것 | 직접 볼 것 |
|---|---|---|
| 조사 | 로그·변경점·파일 내용 요약 | 중요도와 대응 순서 |
| 정리 | 양식 통일, 표로 정리, 초안 작성 | 내용 판단과 최종 OK |
| 점검 | 깨진 테스트, 오래된 메모, 이상한 변경점 지적 | 어느 지적을 채택할지 |
| 실행 | 정해진 생성·복사 작업 | 삭제·전송·공개 버튼 |
선 긋는 법은 단순합니다. 되돌릴 수 있는 건 맡긴다. 되돌릴 수 없는 건 내 손가락으로 누른다. 삭제, 전송, 결제, 공개. 이 4가지는 처음엔 전부 “사람에게 물어본 뒤”로 둡니다. 안전하다고 확인된 것만 나중에 자동으로 승격하면 됩니다. 순서가 거꾸로면 울게 돼요.
이 선 긋기 사고방식은 승인과 샌드박스 만드는 법에서 더 깊게 파고들었으니, 함께 읽으면 확실히 와닿을 겁니다.
일단 돌리기: 매일 아침 점검을 대신 시키기
말은 이쯤 하고, 실물을 돌려봅시다. 제가 매일 아침 하던 “로그와 테스트를 보고, 오늘 조심할 점을 메모하기”를, 그대로 스크립트로 만듭니다. Node.js와 Anthropic의 API 키만 있으면 돌아갑니다.
scripts/morning-check.mjs 로 저장하세요. 주석은 전부 한국어로 달아 뒀습니다.
#!/usr/bin/env node
import { spawnSync } from "node:child_process";
import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
import { join } from "node:path";
const logDir = ".claude-logs";
const lockFile = join(logDir, "morning.lock"); // 중복 실행을 막는 자물쇠
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
const logFile = join(logDir, `morning-${stamp}.log`);
function fail(message) {
console.error(message);
process.exit(1);
}
// 명령어를 실행해서 출력을 그대로 받아오는 작은 헬퍼
function run(command, args, options = {}) {
const result = spawnSync(command, args, {
encoding: "utf8",
shell: process.platform === "win32", // Windows에서도 돌게 하는 주문
...options,
});
const output = `${result.stdout || ""}${result.stderr || ""}`;
if (result.status !== 0) {
writeFileSync(logFile, output);
fail(`명령 실패: ${command} ${args.join(" ")} / 자세한 내용은 ${logFile}`);
}
return output;
}
// 키를 깜빡하고 안 넣었으면, 아무것도 안 하고 멈춘다(이게 중요)
if (!process.env.ANTHROPIC_API_KEY) {
fail("먼저 ANTHROPIC_API_KEY 를 설정하세요.");
}
mkdirSync(logDir, { recursive: true });
if (existsSync(lockFile)) {
fail(`아직 지난번 점검이 돌고 있습니다: ${lockFile}`);
}
writeFileSync(lockFile, String(process.pid));
try {
// 1. 지금 상태를 모은다(여기는 AI가 아니라 그냥 명령어)
const status = run("git", ["status", "--short"]);
const tests = run("npm", ["test"]);
// 2. 모은 재료를 AI에게 넘겨, 오늘 봐야 할 점만 항목으로 뽑아달라고 한다
const prompt = [
"당신은 제 아침 점검 담당입니다.",
"다음 git status 와 테스트 결과를 읽고, 오늘 조심해야 할 점을 항목으로.",
"코드 변경·삭제·커밋·전송은 일절 하지 마세요. 읽기만.",
"분류는 인증 / 중복 실행 / 되돌리는 법 / 로그 / 사람 판단 필요 로.",
"",
"git status:",
status || "(변경 없음)",
"",
"test output(끝부분만):",
tests.slice(-12000), // 긴 로그를 전부 넘기지 않는다. 끝부분만으로 충분
].join("\n");
const report = run("claude", [
"-p", prompt,
"--max-turns", "5",
"--permission-mode", "plan", // 읽기만 모드. 갈아엎지 못하게 한다
"--output-format", "text",
]);
writeFileSync(logFile, report);
console.log(`오늘의 점검 메모를 써냈습니다 → ${logFile}`);
} finally {
rmSync(lockFile, { force: true }); // 끝나면 반드시 자물쇠를 푼다
}
실행은 이게 전부입니다.
node scripts/morning-check.mjs
수십 줄이지만, 이 안에 벌써 ‘재료 모으기’ ‘AI에게 넘기기’ ‘읽기만으로 제한’ ‘자물쇠로 중복 실행 방지’ ‘로그 저장’이 전부 들어 있습니다. 이게 자동화의 골격이에요. 당신의 아침 루틴이 다르다면, git status 나 npm test 부분을 평소 두드리는 명령어로 바꾸기만 하면 됩니다. 내용을 이해하지 않고 복붙해도 돌아가게 써뒀지만, 익숙해지면 손을 대보세요.
이런 장면에서 효과를 본다 (3가지)
1. 흩어진 파일을 한 장으로 모은다 청구서 CSV가 7개, 폴더에 흩뿌려져 있다. 매달 이걸 손으로 열어서 합계를 냈습니다. 하나씩 엑셀에 붙이고, 더하고, 검산하고. 대략 20분. 게다가 지난달엔 복사 실수로 한 자리 어긋난 숫자를 그대로 보고했다가 나중에 얼굴이 화끈했어요. 지금은 “이 폴더의 CSV를 전부 읽고, 합계와, 평균에서 크게 벗어난 행만 표로 만들어줘”로 끝. 사람이 계산기를 두드리면 한 자리 어긋나지만, 기계는 안 어긋납니다. 검산 수고까지 사라졌어요.
2. 어제와 오늘의 차이를 나란히 본다 설정 파일이나 메모를 어제 백업과 비교해서 “뭐가 바뀌었는지”만 알고 싶을 때. 전문을 위에서부터 읽어 비교하는 건 지옥입니다. 어디가 다른지 눈이 자꾸 미끄러져요. 그래서 차이만 주워 오게 하고, “그게 의미 있는 변화인지, 그냥 오타인지”는 제가 판단합니다. AI에게 판단까지 맡기지 않고, 변화를 찾아내는 작업만 넘기는 거죠. 눈으로 3분이 5초가 됐습니다.
3. 어질러진 메모를 정형으로 다듬는다 회의 중 갈겨쓴 메모. 날짜 제각각, 제목 없음, 오타투성이, 화살표만 있어서 무슨 뜻인지 알 수 없음. 이걸 “정한 템플릿대로 다듬어줘, 단 내용은 일절 더하지 마”라고 부탁합니다. 여기서 중요한 게, 밑바닥부터 쓰게 하는 게 아니라 형태만 다듬게 하는 것. “알아서 잘 정리해줘”라고 하면 AI는 말하지도 않은 걸 멋대로 채워 넣습니다. 형태만, 이라고 못을 박는다. 이것만으로 거짓이 보태지지 않게 돼요.
내가 저지른 실패 3가지
폼 안 잡고 적습니다. 첫 자동화는 사고의 연속이었어요.
첫째. “알아서 잘 정리해줘”로 통째 떠넘겼다. 그 결과 AI는 지우면 큰일 나는 설정 파일까지 ‘정리’해 줬습니다. 돌아가는 코드는 남아 있었지만, 그날 아침엔 정말 핏기가 가셨어요. .env 가 사라져서 서비스가 안 떠서, 복구에 한 시간. 그 뒤로 “이 폴더 안에서만” “이 파일은 건드리지 마”라고, 건드려도 되는 범위를 반드시 먼저 지정하게 됐습니다. AI가 알아서 헤아려 주길 바라면 안 됩니다.
둘째. 로그를 전부 프롬프트에 쑤셔 넣었다. 친절을 베푼답시고 몇만 줄을 넘겼더니, 정작 중요한 실패 줄이 파묻혀서, AI가 “여기가 문제네요” 하고 전혀 다른 곳을 짚어 옵니다. 요금과 시간만 부풀고, 결국 내가 다시 읽는 신세. 지금은 위 코드처럼 slice(-12000) 으로 끝부분만 넘깁니다. 에러는 마지막에 나옵니다. AI도 마지막 몇 줄을 가장 잘 읽어요. 그래서 끝부분만으로 충분합니다.
셋째. 같은 스크립트를 이중으로 돌렸다. 작업 스케줄러 설정을 실수해서, 아침 점검이 두 번, 거의 동시에 떴습니다. 로그가 덮어써져서 어느 게 진짜인지 알 수 없게 됐어요. 최악인 건 이게 ‘쓰는 계열’ 작업일 때입니다. 같은 메모를 두 번 생성해서, 나중에 중복을 손으로 지우는 신세가 됩니다. 잠금 파일(자물쇠)을 넣은 뒤로는, 나중에 온 쪽이 “아직 지난번이 돌고 있어요”라고 튕겨 나가서 단번에 해결. 고작 3줄짜리 장치지만, 이게 없으면 꼭 바쁜 아침에 호된 꼴을 봅니다.
시작한다면, 여기서부터
다짜고짜 완전 자동을 노리지 마세요. 실패해도 안 우는, 작은 작업을 하나만 고릅니다. 매일 아침 점검, 파일 집계, 메모 다듬기. 이 정도가 딱 알맞아요.
순서는 늘 같습니다. ① 읽힐 범위를 좁게 정한다 → ② 목표(완성형)를 또렷이 말로 한다 → ③ 확인은 되도록 명령어에 시킨다 → ④ 삭제·전송·결제·공개만은 “사람에게 묻기”로 고정한다. 익숙해져 안전하다고 확인된 조작만 나중에 자동으로 승격. 이 순서만 지켜도 사고는 놀랄 만큼 줄어요.
매일 정해진 시각에 돌리고 싶어지면, cron이나 작업 스케줄러에 등록합니다.
# Linux/macOS: 평일 아침 8시 15분에 실행
15 8 * * 1-5 cd /path/to/repo && /usr/bin/node scripts/morning-check.mjs >> .claude-logs/cron.log 2>&1
# Windows: 작업 스케줄러에 매일 8:15로 등록
schtasks /Create /TN "MorningCheck" /SC DAILY /ST 08:15 /F /TR "powershell -NoProfile -ExecutionPolicy Bypass -Command \"cd C:\path\to\repo; node scripts\morning-check.mjs\""
멈췄을 때 무엇을 봐야 하는지, --permission-mode 같은 세세한 인자의 뜻은 공식 CLI 레퍼런스가 1차 정보입니다. 막히면 우선 여기를 보면 돌아가지 않아도 됩니다. 첫걸음에서 발이 걸리면 Claude Code 첫 30분도 골라 읽어 보세요.
실제로 해본 결과
솔직히 말하면, 처음 1주일은 스크립트 쪽이 손작업보다 시간이 더 걸렸습니다. 키를 깜빡해서 멈추고, 로그가 너무 많아서 이상한 답이 오고, 스케줄러가 애초에 안 뜨고. 손으로 전부 고쳤어요.
그런데 2주 차부터 효과가 나타났습니다. 지금은 아침에 세수하고 책상에 돌아오면, .claude-logs 에 오늘 봐야 할 점이 3~5줄만 나란히 놓여 있어요. “테스트는 그린, 단 이 의존성이 오래됐다” “변경점 중에 지운 기억 없는 파일 있음, 확인 필요” 처럼요.
가장 기뻤던 건, 매일 아침의 ‘귀찮음’이 사라진 것입니다. 같은 작업을 관성으로 이어가던 시간이 없어지고, 그만큼을 정말로 머리를 쓰는 일에 돌릴 수 있게 됐어요. 똑똑한 AI를 찾기보다, 내 귀찮은 5분을 하나씩 기계에 넘긴다. 수수하지만, 이게 가장 효과적이었습니다.
정리
자동화는 배포니 뭐니 거창한 이야기가 아닙니다. 당신이 매일 멍하니 손으로 하는 복붙을 기계에 대신 시키는 것. 그것뿐이에요.
요령은 3가지. 읽힐 범위를 좁게 정한다. 완성형을 말로 한다. 되돌릴 수 없는 조작만 내 손가락으로 누른다. 우선 위 스크립트를 자기 작업에 맞춰 돌려보고, 내일 아침의 5분을 하나 줄여 보세요.
좀 더 체계적으로 배우고 싶거나, 팀의 작업을 통째로 자동화하고 싶다면, 교재 목록에 손을 움직이며 배울 수 있는 것들을 갖춰 뒀습니다. 자기 사례로 상담하고 싶은 분은 거기서 말 걸어 주시면 됩니다.
무료 PDF: Claude Code 치트시트
이메일을 입력하면 명령, 리뷰 습관, 안전한 워크플로를 정리한 PDF를 받을 수 있습니다.
개인정보를 안전하게 관리하며 스팸을 보내지 않습니다.
작성자 소개
Masa
Claude Code 실무 워크플로와 팀 도입을 검증하는 엔지니어입니다.
관련 글
제작사가 Claude Code에 고객 사이트를 맡기기 전 권한 체크리스트
고객 사이트를 안전하게 AI로 수정하기 위한 에이전시용 권한과 검증 절차입니다.
SaaS 고객지원 버그 신고를 Claude Code로 재현 절차로 바꾸는 방법
모호한 문의를 재현 단계, 증거, 개발자 전달 메모로 정리하는 지원팀 워크플로입니다.
Obsidian 묵은 메모를 Claude Code 지시서로 바꾸는 10분 루틴
Obsidian에 쌓인 메모가 매번 쓸모없어지는 분께. 사실·결정·미확인으로 분류해 Claude Code가 그대로 움직일 지시서로 바꾸는 아침 10분의 형(型)을 소개합니다.