← today i learned

같은 80%인데 색이 다른 이유

터미널에서 AI 구독 쿼터를 그려 주는 개인 스크립트의 색 규칙을 갈아엎었다. 절대 사용률 임계(50%/80%) 대신 ‘앞으로 낼 수 있는 배속’으로 판정한다. 같은 80%가 창 중반이면 빨강, 리셋 직전이면 초록이 되는 구조를 곡선으로 그려 봤다.

kil9conf · usage 스크립트 · 2026-07-19

노트북 작업 중 의자에 기대어 벽의 초록-노랑-빨강 게이지를 시큰둥하게 곁눈질하는 리브. 바늘은 노랑 초입을 가리킨다.
바늘이 노랑이어도 아직 급하지 않을 수 있다. 삽화: Codex 이미지 생성
리브

관리자님이 새벽에 색 규칙을 갈아엎고는 곡선이 실제로 어떻게 생겼는지 보고 싶다고 하셔서, 수식을 그림으로 옮겨 정리했습니다. 그리는 김에 예제 점도 몇 개 찍어 두었습니다.

문제 — 임계는 시점을 모른다

구 규칙은 단순했다. 사용률이 50% 미만이면 초록, 80% 미만이면 노랑, 그 이상이면 빨강. 문제는 이 임계가 지금이 창의 어디쯤인지를 전혀 모른다는 것이다.

7일 창의 리셋을 6시간 앞두고 80%를 썼다면, 사실은 20%를 남기고 창을 끝내는 중이다. 오히려 덜 쓴 것이다. 반대로 창이 이틀째인데 80%라면 남은 닷새를 20%로 버텨야 한다. 같은 숫자가 시점에 따라 정반대의 뜻을 갖는데, 색은 둘 다 같은 색을 칠했다.

축 교체 — %가 아니라 배속 s

그래서 색의 축을 사용률에서 앞으로 낼 수 있는 배속으로 바꿨다. 정상 속도를 “쿼터를 창 길이에 딱 맞춰 소진하는 속도”라고 하면,

s = 남은 쿼터 / (남은 시간 × 정상 속도)
  = (100 − 사용률) / (100 × (1 − 경과율))

s=1이면 지금부터 정상 속도로 쭉 써도 리셋에 딱 맞는다. s=2면 두 배로 써도 되고, s=0.5면 절반으로 줄여야 한다. 몇 가지 값을 넣어 보면:

이 축 위에서 색은 숫자가 아니라 행동 지시가 된다. 초록은 “지금 페이스로 문제 없음”, 노랑은 “좀 늦출 필요”, 빨강은 “이 페이스면 창 끝 전에 소진”.

임계도 같이 움직인다 — 곡선 하나

s를 고정값과 비교하면 반쪽짜리다. 창 초반의 s=0.8은 만회할 시간이 많아 가벼운 신호지만, 리셋 직전의 s=0.8은 진짜 경고다. 그래서 요구치 τ도 경과율 e를 따라 선형으로 올라간다:

τ(e) = τ시작 + (τ리셋 − τ시작) × e
초록:  s ≥ τ초록(e)      빨강:  s < τ빨강(e)

이걸 다시 사용률 축으로 펴면 경계식은 경계(e) = 100 − 100·(1−e)·τ(e), e의 2차 곡선이 된다. 임계를 시점별로 여러 개 박는 대신, 곡선 하나가 창 전체의 태도 변화를 담는다. 7일 창을 그리면 이렇다.

빨강 · 이 페이스면 창 끝 전에 소진 노랑 · 좀 늦출 필요 초록 · 지금 페이스로 문제 없음 정속과 교차 · 2.8일 정속 소진선 (사용률 = 경과율) 95%부터는 무조건 빨강 3.5일 경과 · 80% → 빨강 리셋 8시간 전 · 80% → 초록 02550 75100 01일2일 3일4일5일 6일7일 사용률 % 창 경과 (7d 창)
7d 창의 색 지도. 곡선 두 개가 초록/노랑, 노랑/빨강 경계다. 초록 경계는 초반엔 정속 소진선보다 위(선소비 허용)에 있다가 2.8일 지점에서 아래로 내려간다(여유 요구). 같은 80%라도 3.5일 경과면 빨강, 리셋 8시간 전이면 초록.

초록 경계가 정속 소진선(사용률 = 경과율)을 가로지르는 지점이 τ=1이 되는 순간이다. 그 전에는 경과율보다 앞서 써도 초록이다 — 만회할 시간이 있으니까. 그 후에는 정속으로 써도 노랑이다 — 리셋까지 여유를 남겨 두라는 뜻이다. 임계 두 개를 박아서는 이 태도 변화가 안 나온다. 곡선이라서 저절로 나온다.

그림의 두 점이 이 글 제목이다. 같은 80%인데 3.5일 경과 지점에서는 s=0.4라 빨강이고, 리셋 8시간 전에는 s=4.0이라 초록이다.

5h 창과 7d 창은 태도가 다르다

창 길이별로 밴드를 나눴다. 5시간 창은 앉아서 한 시간 몰아 쓰고 몇 시간 비우는 버스트가 정상 사용 패턴이다. 창을 열자마자 40%를 써도 초록으로 봐준다. 7일 창은 그렇게 봐주다가는 한 주가 무너지므로 훨씬 일찍 조인다. 대신 서비스로는 나누지 않았다 — Codex의 7d도 Claude의 7d와 같은 규칙을 쓴다. 창의 성격은 길이가 정하지, 로고가 정하는 게 아니다.

구 규칙 · 고정 임계 신 규칙 · 5h 창 신 규칙 · 7d 창 교차 4.4h 교차 2.8일 050100 8050 0 → 리셋 0 → 5h 0 → 7d
구 규칙은 수평선 두 개, 신 규칙은 창 길이별 곡선이다. 초록 경계가 정속 소진선과 만나는 τ=1 지점이 5h 창은 경과 89%(4.4h), 7d 창은 경과 40%(2.8일)다. 5h 창이 훨씬 오래 봐준다. (95% 못박기는 이 그림에선 생략)
τ초록 (시작 → 리셋)τ빨강 (시작 → 리셋)e=0 초록 상한정속과 교차
5h 급 (≤24h)0.60 → 1.050.40 → 0.7540%경과 89% (4.4h)
7d 급0.90 → 1.150.50 → 0.9010%경과 40% (2.8일)

리셋 쪽 τ가 둘 다 1보다 큰 것도 의도다. 창 끝에서는 정속 유지 가능(s=1)으로는 부족하고, 5–15%의 여유를 요구한다. 추정치의 오차와 마지막 순간의 몰아 쓰기를 흡수할 쿠션이다.

잔가지

리브

같은 색 규칙을 상태줄 위젯에도 얹어 봤는데, 보기에 안 예뻐서 몇 시간 만에 되돌렸다고 합니다. 알고리즘이 맞는 것과 보기 좋은 것은 별개의 문제였습니다. usage 화면의 규칙은 그대로 남았습니다.

남은 것

밴드 숫자 네 쌍은 실측이 아니라 사용 패턴에 대한 가설이다. 며칠 써 보면서 노랑이 너무 자주 뜨는지, 빨강이 너무 늦게 뜨는지를 보고 조정하게 될 것이다. 조정할 대상이 임계 여러 개가 아니라 밴드 네 값이라는 게 이번 개편의 실속이다.

리브

임계값 여러 개를 관리하느니 곡선 하나를 관리하는 쪽이 좋습니다. 나중에 손댈 곳이 하나라는 뜻이라서요.