사유고 개발로그 · 8화
배치 사용량 문지기: 5시간 한도 80%에서 쉬고 주간 90%에서 멈춘다
완독 코스 배치가 구독 한도를 끝까지 쓰면 다른 작업까지 멈춘다. 5시간 한도 80%에서 쉬고 주간 한도 90%에서 멈추는 문지기를 붙였다.
완독 코스 배치는 Claude 구독으로 돈다. 그 구독은 내가 낮에 코딩하고 글 쓰고 다른 프로젝트를 돌리는 데 쓰는 바로 그 구독이다. 본문 배치 하나와 마인드맵 샤드 셋, 모두 네 개가 쉬지 않고 모델을 부르면 5시간 한도는 금방 찬다. 한도가 차면 배치만 멈추는 게 아니라 나도 멈춘다. 9월 29일 저녁에 실제로 그랬다. 5시간 한도와 추가 사용 월 한도가 한꺼번에 걸려 배치의 강 몇 개가 실패로 넘어갔고, 같은 시간 다른 작업도 막혔다.
한도에 걸린 뒤 기다렸다 다시 하는 코드는 이미 있었다. 그런데 그건 벽에 부딪힌 다음의 이야기다. 필요한 것은 벽 앞에서 서는 것이었다. 9월 30일, 배치가 한도를 끝까지 쓰기 전에 스스로 쉬게 했다.
한도는 CLI가 이미 알려 준다
어디까지 썼는지부터 알아야 했다. 따로 조회할 필요는 없었다. Claude CLI를 스트림 출력으로 부르면 호출마다 한도 이벤트가 섞여 나오고, 거기에 5시간 창과 주간 창의 사용률, 각 창이 리셋되는 시각, 추가 사용(유료) 구간에 들어갔는지가 들어 있다. 호출이 끝날 때마다 이 값을 공용 상태 파일 하나에 적는다.
네 개의 배치가 같은 파일에 쓰니 두 가지를 챙겼다. 쓰기는 파일 잠금으로 한 번에 하나만 한다. 그리고 호출은 끝나는 순서가 뒤섞이므로, 같은 창이면 더 높은 사용률을 남기고, 더 오래된 창의 값이 새 창을 덮지 못하게 했다. 늦게 끝난 호출이 들고 온 옛 숫자 때문에 사용률이 내려가 보이면 문지기가 쓸모없어진다.
부르기 전에 묻는다
배치는 모델을 부르기 전마다 문지기에게 한 가지만 묻는다. 계속할까, 기다릴까, 멈출까.
- 기다린다: 5시간 창이 80%를 넘었거나 추가 사용 구간에 들어갔으면, 그 창이 리셋될 때까지 잔다. 리셋 시각에 2분을 더해 깨어나 이어서 한다. 남은 20%는 내 몫이다.
- 멈춘다: 주간 창이 90%를 넘으면 기다리지 않는다. 리셋까지 며칠이라, 그동안 배치가 자다 깨다 하며 남은 주간 한도를 조금씩 가져가게 두면 안 된다. 배치를 깔끔하게 끝내고 알림을 보낸다.
- 계속한다: 그 밖에는 그대로 간다.
추가 사용 구간을 따로 본 것은 29일 저녁의 교훈이다. 5시간 한도를 넘기면 사용량이 곧바로 유료로 넘어가는데, 배치가 그 구간을 계속 쓰면 돈과 월 한도를 함께 태운다. 이 구간에 들어가면 사용률 숫자와 상관없이 쉰다.
기준값은 설정 파일에 두고 매번 다시 읽는다. 배치를 내리지 않고도 80%를 70%로 낮추거나 문지기를 끌 수 있다. 값이 이상하면(0 이하, 1 초과, 숫자가 아님) 무시하고 기본값을 쓴다.
문지기는 배치를 죽이지 않는다
문지기에 한 가지 원칙을 더 걸었다. 문지기 자신이 고장 나도 배치를 멈추지 않는다. 상태 파일이 깨졌거나 읽다가 예외가 나면 ’계속한다’를 돌려주고 이유만 기록한다. 이 문지기는 한도를 아끼는 장치지, 배치를 지키는 마지막 방어선이 아니다. 실제로 한도에 걸리면 원래 있던 재시도와 대기가 받아 준다. 쉬는 장치가 고장 나서 일주일짜리 배치가 새벽에 조용히 죽는 편이 더 나쁘다.
알림
쉴 때와 멈출 때는 알림이 온다. 쉬면 이유와 다시 시작할 시각을, 멈추면 주간 사용률과 기준을 적는다. 배치 상태 화면에도 지금 기다리는 중인지와 그 이유가 나온다. 30일 아침 기준으로 5시간 창은 79%, 주간 창은 35%였다.
배운 것
사람과 같은 한도를 나눠 쓰는 자동 작업은 한도를 끝까지 쓰면 안 된다. 벽에 부딪힌 다음 기다리는 코드만으로는 부족하고, 벽 앞에서 설 기준이 있어야 한다. 그 기준은 짧은 창과 긴 창을 다르게 다뤄야 한다. 몇 시간 뒤 풀리는 한도는 기다리면 되지만, 며칠 뒤 풀리는 한도는 멈추고 사람에게 알려야 한다.
연재는 여기까지 쓴다. 사유고는 지금도 매일 쓰는 도구라, 새로 막히는 곳이 생기면 그 이야기로 이어 쓰겠다.
사유고 개발로그 · 전 11화
- 1화종이책 사진에 물어보는 서재: 글자·그림 검색 두 갈래로 세웠다
- 2화저자 토론 기능을 붙였다: GPT가 저자 연기를 거부했다
- 3화학습 루프를 만들었다: 증거 없이 완료되는 구멍이 나왔다
- 4화저자 인터뷰와 대목 연결 기능을 붙였다: 결함 5개를 먼저 고쳤다
- 5화책 587권 자동 등록: 파일은 왔는데 페이지가 빠져 있었다
- 6화AI 강의 품질을 쟀다: 모델이 쓴 인용은 문구가 바뀌고 쪽수가 틀렸다
- 7화600권 완독 코스·마인드맵을 배치로 미리 만들기 시작했다
- 8화배치 사용량 문지기: 5시간 한도 80%에서 쉬고 주간 90%에서 멈춘다
- 9화사유고2는 책 795권을 원문 10분의 1 크기 지도로 바꿨다: 답하는 서재에서 늘어놓는 서재로
- 10화투자 책 50권만으로 노트 2,094개짜리 지식 연결망이 나왔다: 795권으로 키우기 전에 고민할 것
- 11화사유고 촬영 자동화를 맥북 프로에서 맥북 에어로 옮겨 같은 작업을 이어 갔다: 바꾼 코드는 두 줄이었다