AI 토큰이 아침부터 98% 사라졌다 — 범인은 내가 의심한 게 아니었다

저는 수학 과외를 하면서 잡무를 AI로 자동화해보고 있어요. 그러다 보니 AI 사용량 한도(하루에 쓸 수 있는 토큰의 상한 — 토큰은 AI가 읽고 쓰는 글자 수의 단위예요)를 늘 신경 쓰게 됐죠. 그런데 어느 날 아침, 컴퓨터를 켜자마자 오늘치 토큰의 98%가 이미 사라져 있었어요. 저는 아직 아무 작업도 안 했는데 말이죠. 이 오답노트는 그 범인을 엉뚱한 데서 찾다가, 결국 진짜 범인을 잡은 이야기입니다.

아침에 켜자마자 98%가 비어 있었다

상황부터 정리할게요. 컴퓨터를 켜고 AI 작업을 시작하려는데, 남은 토큰이 2%뿐이었어요. 하루가 시작도 안 됐는데 거의 다 쓴 상태였던 거죠. 뭔가가 밤사이에, 혹은 내가 안 보는 사이에 토큰을 태우고 있었다는 뜻입니다.

에러가 빨갛게 뜨는 것도 무섭지만, 이렇게 “원인 모를 소진”도 못지않게 당황스러워요. 눈에 보이는 실패가 아니라서 어디서부터 봐야 할지 감이 안 잡히거든요.

첫 번째 용의자 — 그럴듯했지만 틀린 추측

제가 처음 의심한 건 예약해 둔 자동 루틴이었어요. 저는 매일 정해진 시각에 도는 작업을 몇 개 걸어놨거든요(하루를 정리하는 /closing, 프로젝트 상태를 훑는 project-scan 같은 것들이요). 그런데 전날 밤 컴퓨터가 꺼져 있었어요.

그러니 이런 추론이 자연스러웠죠. “예정 시각에 못 돈 루틴들이, 컴퓨터가 켜지자 밀린 걸 한꺼번에 따라잡기(catch-up) 실행하면서 토큰을 몰아 쓴 것 아닐까?” 실제로 이게 꽤 합리적으로 들려요. 예약 작업 + 밤사이 꺼짐 + 아침에 소진, 딱 이야기가 맞아떨어지니까요.

초보일수록 이 함정에 잘 빠져요. “그럴듯한 이야기”가 곧 “맞는 이야기”는 아니거든요. 저는 학생들 오답을 볼 때도 늘 느끼는데, 답이 틀린 이유를 지레짐작하면 열에 아홉은 빗나가요. 실제로 풀이 과정을 한 줄씩 되짚어봐야 진짜 원인이 나옵니다.

추측을 멈추고, 직접 세어봤다

그래서 저는 “예약 루틴 때문일 것이다”라고 단정하지 않고, 실제로 토큰을 어디서 썼는지 세어보기로 했어요. AI와의 대화는 세션(session, 하나의 연속된 대화 묶음)마다 기록 파일로 남거든요. 그 기록을 집계하면 어느 대화가 토큰을 얼마나 먹었는지 보입니다.

세는 과정은 이렇게 단계를 밟았어요. 한 번에 답을 내려 하지 않고, 채점하듯 조건을 좁혀갔습니다.

  1. 세션 파일별로 토큰 사용량을 합산했어요. 일단 전체 그림부터요.
  2. 그런데 그 파일들엔 어제·그저께 것도 섞여 있잖아요. 그래서 오늘(한국 시간 기준)분만 다시 걸러서 집계했어요. 오늘 소진이 궁금한 거니까요.
  3. 그랬더니 유독 한 세션이 압도적이었어요. 그 지배적인 세션을 호출 단위로 잘게 쪼개 봤습니다.
  4. 마지막이 제일 중요한데, 같은 메시지가 중복으로 집계되지 않게 걸러냈어요(message id로 중복 제거). 이걸 빼먹으면 한 세션의 점유율이 실제보다 부풀려져 보이거든요. 그래서 중복을 제거하고 점유율을 다시 계산했습니다.

이 4단계가 이 글에서 제일 하고 싶은 이야기예요. “많이 쓴 것 같다”는 인상이 아니라, 중복까지 걷어낸 실제 집계로 판단했다는 것. 여기서 결론이 바뀌었거든요.

진짜 범인 — 하루 종일 안 닫은 세션

집계 결과, 결론이 뒤집혔습니다. 토큰을 가장 많이 태운 건 밀린 예약 루틴이 아니라, 하루 종일 닫지 않고 계속 이어간 장수(long-lived) 세션이었어요. 대화를 끝내지 않고 계속 얹으면, AI는 매번 그때까지의 긴 맥락을 다시 읽어야 해서 토큰이 눈덩이처럼 불어납니다.

여기서 정직하게 짚을 게 있어요. 예약 루틴이 “무죄”였다는 뜻은 아닙니다. 그 따라잡기 실행도 분명 토큰을 썼어요. 다만 그게 주범은 아니었다는 거죠. 처음 의심을 완전히 버리는 게 아니라, “기여는 했지만 1등은 아니었다”로 순위를 바로잡은 겁니다.

안 될 때 같은 명령을 또 치는 게 틀린 풀이를 그대로 다시 쓰는 것과 같다면, 안 닫은 세션에 계속 얹는 건 그 틀린 풀이지를 하루 종일 옆에 펼쳐두고 매 문제마다 다시 읽는 것과 비슷했어요.

숫자는 옮기지 않았습니다 — 대신 재는 법을

여기서 “그래서 그 세션이 몇 %였는데?”가 궁금하시죠? 저는 이 글에 구체적인 비율 숫자를 적지 않기로 했어요. 그 숫자는 제 환경에서 나온 값이라 여러분 것과 다르고, 남의 숫자를 외우는 건 별 쓸모가 없거든요. 확실한 사실은 “아침에 98%가 소진돼 있었다”와 “세어보니 범인이 바뀌었다”는 방향까지입니다.

그보다 훨씬 쓸모 있는 건 여러분이 자기 것을 직접 재는 방법이에요. 위의 4단계가 그 방법입니다. 세션별로 합산하고 → 기간을 오늘로 좁히고 → 제일 큰 세션을 쪼개고 → 중복을 걷어내는 것. 도구가 무엇이든 이 순서는 똑같이 통합니다.

처방 — 세션을 짧게 끊고, 연속성은 파일로

그래서 얻은 교훈은 명확했어요. 대화를 짧게 끊고, 이어가야 할 내용은 세션이 아니라 파일로 넘긴다. 오늘 한 일을 문서(핸드오프 메모 같은 것)에 적어두고 새 세션에서 그 파일을 읽으면, 긴 맥락을 매번 다시 태우지 않고도 작업이 이어져요. 저는 이 규칙을 다시 잊지 않으려고 아예 메모리 파일로 영구 기록해뒀습니다(“세션 위생” 규칙으로요).

혹시 여러분도 사용량이 유난히 빨리 녹는다면, 아래를 짚어보세요.

신호어떻게 판단할까액션
켜자마자 사용량이 이미 많이 빠져 있다밤사이·예약 작업을 먼저 의심하되 단정 금지🔴 지금: 세션별로 실제 집계부터
“예약 루틴 때문일 것”이라는 추측그럴듯함 ≠ 사실. 측정으로 확인🔴 지금: 오늘분만 걸러 재계산
한 대화를 하루 종일 안 닫음장수 세션이 맥락을 반복해 태움🟡 백로그: 세션 짧게 끊기 습관화
이어서 할 일이 많다세션에 쌓지 말고 파일로🟢 계속: 연속성은 문서로 인계

한마디로, 사용량이 샐 땐 “그럴듯한 범인”을 지목하지 말고 실제로 세어보라입니다. 저처럼 예약 루틴을 의심했다가 진짜 범인(안 닫은 세션)을 놓칠 수 있거든요. 그리고 세는 김에 중복 제거까지 꼭 하세요 — 그거 하나로 순위가 바뀌기도 하니까요.


댓글 남기기