매일 같은 시간에 반복되는 작업이 하나 있었습니다. 특별히 복잡하지는 않지만 사람이 매번 그 시점을 기억해뒀다가 직접 세션을 열고 시켜야 하는 게 번거로웠습니다. 알람을 맞춰두고 시간에 맞춰 터미널을 여는 대신, Claude Code Remote의 예약 트리거(Routine)로 이 부분을 넘긴 과정을 정리합니다.

어떤 작업이었나

특정 조건을 매일 아침 확인하고, 필요하면 결과를 정리해서 남기는 작업이었습니다. 매번 같은 프롬프트를 손으로 다시 치는 것도 번거롭지만, 더 큰 문제는 그 시간에 컴퓨터 앞에 있어야 한다는 제약이었습니다. 하루 이틀은 괜찮아도 매일 반복하다 보면 결국 빠뜨리는 날이 생겼습니다.

AI를 어떻게 활용했나

Claude Code Remote는 크론 표현식으로 세션을 깨우는 Routine을 만들 수 있습니다. 기존 세션을 그대로 이어서 쓸 수도 있고(persistent_session_id를 지정하거나 기본값으로 자기 자신에 바인딩), 매번 새 세션을 띄울 수도 있습니다(create_new_session_on_fire: true). 대화 맥락을 계속 유지해야 하는 작업이면 전자, 매번 독립적으로 처리해도 되는 작업이면 후자가 맞습니다. 이번 작업은 전날 결과를 참고할 필요가 없어서 후자로 골랐습니다.

name: "아침 점검"
prompt: "정해진 조건을 확인하고 결과를 정리해서 남겨줘. 이상이 없으면 굳이 알리지 않아도 돼."
cron_expression: "0 0 * * *"
create_new_session_on_fire: true

크론 표현식은 UTC 기준으로 해석됩니다. 매일 한국 시각 오전 9시에 실행하고 싶었으니 9시간을 빼서 0 0 * * *로 등록했습니다. 분 시 일 월 요일 순서라 자정을 나타내는 0 0이 KST 9시에 해당합니다.

처음에 걸렸던 부분

처음에는 이 시차를 계산하지 않고 그냥 0 9 * * *를 그대로 등록했습니다. 등록은 문제없이 됐고 다음 실행 시각도 정상적으로 잡혔는데, 막상 결과를 확인해보니 원하던 아침이 아니라 저녁 시간대에 세션이 깨어나 있었습니다. 0 9 * * *가 UTC 기준 9시, 즉 KST로는 오후 6시라는 걸 뒤늦게 알아챘습니다. 로컬 시간대 감각으로 크론을 등록하면 흔히 겪는 실수인데, 등록 시점에는 아무 에러도 나지 않기 때문에 실제로 몇 번 잘못된 시간에 실행되고 나서야 발견했습니다.

또 하나는 실행 주기였습니다. 처음에는 30분마다 상태를 확인하도록 걸어보려 했는데, 너무 짧은 주기의 크론은 등록 단계에서 거부됩니다. 허용되는 최소 간격이 보통 시간 단위라서, 결국 하루 한 번으로 주기를 늘려 잡았습니다. 촘촘한 감시가 필요한 작업이라면 Routine보다는 별도의 모니터링 도구를 쓰는 편이 맞다는 걸 확인한 셈입니다.

결과와 얻은 팁

  • 크론 표현식은 항상 UTC로 등록된다는 점을 먼저 확인하고, 로컬 시각에서 시차만큼 미리 빼서 계산하는 편이 안전합니다. 등록 자체는 시간이 틀려도 성공하기 때문에 눈으로 다음 실행 시각을 한 번 확인하는 습관이 필요합니다.
  • 매번 새 세션이 필요한 작업인지, 이전 대화 맥락을 이어야 하는 작업인지를 먼저 정하고 나서 Routine을 만드는 게 낫습니다. 나중에 바꾸려면 트리거를 다시 만들어야 하는 경우가 많습니다.
  • 프롬프트에 "이상이 없으면 알리지 않아도 된다"는 조건을 넣어두면, 매번 같은 결과를 알림으로 받는 소음을 줄일 수 있습니다. 확인이 꼭 필요한 순간에만 알림이 오도록 만드는 편이 실제로 더 오래 씁니다.
  • 사람이 잊어버리기 쉬운, 하지만 규칙이 명확한 반복 작업일수록 Routine으로 옮겼을 때 체감 효과가 컸습니다. 반대로 매번 판단이 달라지는 작업은 예약 실행보다 그때그때 직접 시키는 편이 나았습니다.