🎯 바쁘시면 이것만 읽어도 돼요
자동화가 실패하는 방식 중에 제일 안 걸리는 건 조용히 성공한 척하는 거였어요. 로그는 성공, 종료 코드는 0, 에러도 없는데 하는 일이 없었어요
규칙 문서에 하지 말라고 주석까지 달아뒀는데 클로드가 그대로 어겼어요. 문서는 부탁이지 차단이 아니더라고요
그래서 훅을 만들었더니 그 훅이 저를 세 번 막았어요. 오탐 잡는 게 절반이었어요
👀 이런 분들께 도움돼요
클로드한테 자동화 스크립트를 맡겨두고 잘 도는지는 확인 안 해보신 분
CLAUDE.md에 규칙을 잔뜩 써뒀는데 잘 안 지켜지는 것 같은 분
백업이나 예약 실행을 걸어두고 알림이 안 오니까 잘 되는 줄 알고 계신 분
AI가 내놓은 결과물을 어디까지 믿어야 하나 애매하신 분
😮 Before: 알림이 안 와서 잘 되는 줄 알았어요
집에 남는 노트북으로 개인 서버를 만드는 중이었어요. 원고를 어디서든 열려고 시작한 일이에요. 저는 콘텐츠 마케팅 디자이너면서 클로드랑 웹앱을 만들어 굴리는 바이브코딩 개발자고, 소설도 쓰거든요.
그 노트북에는 이미 오픈소스 AI 에이전트가 하나 살고 있었어요. 메신저로 말을 걸면 대답하고 심부름도 하는 비서예요. 그런데 얘가 죽어도 제가 알 방법이 없었어요. 말을 걸어봐야 아는 거죠.
그래서 클로드한테 감시 장치랑 백업 자동화를 만들게 했어요. 만들고 나서 며칠은 알림이 하나도 안 왔어요. 저는 그걸 잘 돌아가는 신호로 읽었고요.
✨ After: 알림이 안 온 게 아니라 아무 일도 안 하고 있었어요
확인해보니 백업은 컨테이너를 멈춰놓고 다시 안 켰고, 파일을 옮기는 작업은 91번 실행돼서 91번 다 정상 종료했는데 파일을 하나도 안 옮겼어요. 원인은 셋 다 달랐는데 증상이 똑같았어요. 했다고 말하는데 안 한 거요.
지금은 감시 장치가 실제 상태를 다시 확인하게 고쳤고, 규칙 위반은 훅이 기계적으로 막게 해뒀어요.
🛠️ 이번에 한 것 (배경 30초)
집에 남는 윈도우 노트북을 24시간 서버로 돌리는 중이에요. 인터넷에 포트를 열지 않고 VPN 안에서만 접근해요.
에이전트가 죽으면 자동으로 살리고 메신저로 알려주는 감시 장치
매일 새벽에 에이전트의 기억이랑 설정을 압축해서 다른 기계로 보내는 백업
원고 동기화용 데이터베이스 컨테이너
이 셋이 서로 안 밟게 묶는 정비 잠금
이번 글은 이걸 만드는 방법이 아니라, 만들어놓고 잘 되는 줄 알았던 기간에 대한 이야기예요.
🔨 과정: 성공했다는 말을 세 번 믿었어요
1️⃣ 감시하는 쪽을 감시당하는 쪽에 두면 안 되더라고요
처음에 제가 원한 건 두 가지였어요. 안 죽게 하는 것, 죽으면 알려주는 것.
이게 한 덩어리인 줄 알았는데 아니었어요. 앞의 것은 그 기계 안에서 하는 일이고, 뒤의 것은 그 기계 밖에서 해야 하는 일이더라고요. 감시 장치를 감시 대상과 같은 기계에 두면, 그 기계가 통째로 나갈 때 감시 장치도 같이 죽어서 아무 소식이 없어요. 제일 알아야 할 순간에 제일 조용해지는 거죠.
알림 채널도 에이전트가 쓰는 채널과 분리했어요. 에이전트가 죽었다는 알림을 에이전트가 읽는 곳에 보내면, 살아난 뒤에 그걸 제 지시로 읽을 수도 있으니까요.
2️⃣ 재기동 완료라고 찍고 컨테이너를 방치했어요
백업은 컨테이너를 잠깐 멈추고 파일을 복사한 다음 다시 켜는 순서였어요. 데이터베이스가 쓰는 중에 복사하면 깨진 사본이 나오니까요.
며칠 뒤 로그를 열어보니 이렇게 적혀 있었어요.
09:46:51 compose stop 실패: Container Stopping 09:47:53 게이트 웨이·컨테이너 재기동 완료
두 줄이 서로 안 맞아요. 앞에서 실패했다는데 뒤에서는 완료라고 해요.
원인은 도커가 진행 상황을 오류 통로로 내보낸다는 거였어요. 컨테이너를 멈추는 중이라는 정상 메시지를 파워셸이 예외로 받아버렸고, 그래서 멈추기가 실패로 기록됐어요. 다시 켜는 부분이 조건문 안에 있었는데 그 조건이 거짓이 돼서 통째로 건너뛰었고요. 그런데 완료 로그는 조건 밖에 있어서 그대로 찍혔어요.
컨테이너는 그 상태로 다섯 시간 죽어 있었어요. 감시 장치는 에이전트만 보고 있어서 못 잡았고요.
3️⃣ 😲 하이라이트: 91번 실행해서 91번 성공하고 아무것도 안 했어요
백업 파일을 받는 쪽은 맥이에요. 한 시간마다 받은 파일을 정해진 폴더로 옮기는 작업을 걸어뒀어요.
며칠 뒤 확인해보니 파일이 이틀째 그대로 쌓여 있었어요. 작업 상태를 열어보니 이랬어요.
실행 횟수 91회 마지막 종료 코드 0 에러 로그 비어 있음
91번 다 정상이었어요. 그런데 옮긴 파일은 0개였어요.
제 예상은 스크립트 버그였어요. 조건문을 잘못 짰거나 경로를 틀렸겠거니 했죠. 그래서 손으로 같은 스크립트를 돌려봤는데, 그때는 파일이 멀쩡히 옮겨졌어요. 같은 스크립트가 제가 돌리면 되고 예약 실행으로 돌면 안 되는 거예요.
원인은 맥의 권한 정책이었어요. 예약 실행으로 뜬 프로그램은 다운로드 폴더를 못 읽어요. 문제는 거부되는 방식이었어요. 권한 없음이라고 에러를 내는 게 아니라 폴더가 텅 빈 것처럼 보여요. 그러니까 스크립트 입장에서는 받을 파일이 없는 거고, 할 일이 없으니 정상 종료하는 거예요.