Codex 야호-!
요즘 연구에 필요한 코드베이스 수정에 Codex의 도움을 받다가 심심찮게 사용량 제한에 걸리게 되는데, 그 제한 방식이 재미있다:
사용량은 다섯 시간과 일주일, 이렇게 두 레벨에서 각각 계량된다 (Claude Code도 비슷한 시스템을 가진다고 알고 있다). 사용량 초과 여부 판단을 위한 대상 구간은 간단히는 다음의 두 가지 정도를 생각해볼 수 있는데 (5h 레벨을 예로 들면)
- 오늘 9시-14시, 14시-19시, ⋯ 처럼 정해진 구간 (fixed window) 혹은
- 사용 요청이 들어오기 직전 5h 동안의 구간 (moving window)
Codex는 1번과 2번의 사이쯤에 있는 방식으로 작동한다. 사용자가 한동안 사용을 멈추었다 재개하면, 재개하는 시각부터 5h window를 시작하고 다섯 시간이 지나면 window를 리셋하는 식이다. 사용자가 Codex를 24시간 내내 사용한다면 이 방식은 1번과 비슷하게 작동할테지만 그건 현실적으로 불가능하다.
이런 괴상한 산정 방식 때문에, Codex를 (잘) 더 쓰면 실질적 사용량을 오히려 늘릴 수 있는 역설적인 상황이 발생한다. 간단한 예시를 들어보자:
누군가 출근해서 Codex가 필요없는 일을 하다가 오전 11시에 하나의 Codex 작업으로 5h 할당량 100%를 소진했다고 가정해보자. 그럼 이 사람은 추가 크레딧을 구매하지 않는 이상 오후 4시까지 Codex를 더 쓸 수가 없다. 하지만 아침 9시에 출근하자마자 Codex로 간단한 작업을 수행했다면, 11시에 100%에 가까운 작업을 또 수행하더라도 오후 2시면 사용량이 리셋되어 할당량 100%를 한번 더 쓸 수 있다.
이 점을 잘 활용하면 사용량을 극한까지 늘릴 수 있다. 핵심은 cron job으로 Codex에게 새벽부터 특정 주기로 특정 작업을 수행하도록 스케쥴링하여, 내가 가장 집중적으로 작업할 것으로 예상되는 시간대 중간에 사용량이 리셋되도록 자동으로 맞추어놓는 것이다. 내게는 10시, 15시, 20시가 적당하겠다. 작업은 가벼울수록 좋다. 난 간단히 "Codex 야호-!"만을 외치도록 해놓았다:
이러면 5h 할당량의 1%도 소모하지 않으면서 리셋 시각을 매일 5n시로 고정해놓을 수 있다.
결론: Codex 야호-!
추가 #1
인스타에 스토리로 올린 이 글을 보고 누가 제보해주어서 알게 된 건데, 이미 반년도 더 전에 누가 나와 정확히 똑같은 생각을 하고 GitHub Gist에 cron job script와 그 개발 동기를 작성해 올려놓은 문서가 있다. 여기엔 Claude Code를 위한 스케쥴링도 포함되어있으니 궁금한 사람은 참고할 것.
추가 #2
본문의 cron job은 개념 전달만을 위해 baseline을 적은 것이고, 부가적으로 몇 가지 기능을 더 붙일 수 있다. 아래는 실제 내 컴퓨터에 입력한 작업이며:
~/bin/codex-log-test.sh
#!/bin/bash
LOGFILE="$HOME/logs/codex.log"
{
echo
echo "=================================================="
date '+%Y-%m-%d %H:%M:%S'
echo "=================================================="
codex exec \
'"Codex 야호-!"라고 출력해.' \
--config model_reasoning_effort="low" \
--skip-git-repo-check
} >> "$LOGFILE" 2>&1
terminal
chmod +x /Users/gunheeyi/bin/codex-log-test.sh
$ crontab -l
56 4 * * * /Users/gunheeyi/bin/codex-log-test.sh 58 9 * * * /Users/gunheeyi/bin/codex-log-test.sh 0 15 * * * /Users/gunheeyi/bin/codex-log-test.sh 2 20 * * * /Users/gunheeyi/bin/codex-log-test.sh
여기에는 다음과 같은 사항들이 추가되었다:
execmode &--skip-git-repo-checkflag: 크론잡으로서 문제없이 실행되려면 이 모드/옵션을 명시해서 non-interactive mode로 실행하고 디렉토리 확인 절차를 건너뛰도록 해야 함>> "$LOGFILE" 2>&1: cron이 잘 실행되었는지 확인할 수 있도록 실행 중 출력 사항을 log 파일에 저장echo ~: 로그에 출력물과 함께 현재 일시를 기록--config model_reasoning_effort: 토큰 사용량을 최소화하도록 추론 노력을 최저로 설정- 직전 작업보다 이번이 더 빠르게 실행되면 이번 작업이 직전 window 내에서 실행, window가 갱신되지 않을 것을 우려해, 정확히 5시간이 아닌 5시간 2분 간격으로 실행하도록 설정 (시험해보지는 않음)
더불어 사소한 주의사항: cron은 로컬 컴퓨터 설정이므로 실행할 컴퓨터가 꺼져있는 동안에는 작동하지 않는다. 언제나 정상적으로 실행되기를 원한다면 컴퓨터를 항상 켜두거나, 이상적으로는 서버가 있다면 그곳에 스케쥴링해두는 것이 좋다. 사용량은 기기별로 계량되는 것이 아니라 같은 계정에 속한 세션끼리 공유되므로, 서버에서 window를 열어도 같은 window가 다른 컴퓨터에도 마찬가지로 적용될 것이다. 아직 엄격히 검증해보지는 않음.
제 뉴스레터를 구독하시면 새 글이 올라왔을 때 이메일을 받아보실 수 있습니다.
다음글: v27.2.7
이전글: 스무살에 알았더라면 좋았을 것들