30초 요약

로그 8,905건에서 확인한 것 네 줄

1. Codex는 ~/.codex/sessions의 세션 파일에 리셋 시각(resets_at)과 사용률을 매 요청마다 기록합니다.
2. 창은 첫 요청을 보낸 시각에 열립니다. 08:44에 시작하면 13:44에 닫힙니다. 정각 기준이 아닙니다.
3. 한번 열린 창의 리셋 시각은 초 단위까지 고정입니다. 그 안에서 아무리 써도 뒤로 밀리지 않습니다.
4. 아직 창이 안 열린 상태에서는 resets_at이 ‘지금 + 5시간’으로 계속 따라옵니다. 이걸 보고 “롤링이네”로 오해하기 쉽습니다.

정리하면 “몇 시에 풀리나”의 답은 내가 오늘 처음 코덱스에 말을 건 시각 + 5시간입니다. 남이 알려줄 수 있는 값이 아니고, 내 로그에만 있는 값입니다.

로그 어디에 적혀 있나

Codex CLI는 대화 하나당 rollout-<날짜>-<id>.jsonl 파일을 남깁니다. 경로는 ~/.codex/sessions/연/월/일/입니다. 이 파일 안에 token_count 이벤트가 있고, 거기 rate_limits가 통째로 붙어 옵니다.

Codex 세션 로그에서 추출한 5시간 창 실측 결과. 위쪽에 rate_limits 원본 레코드가 보이고, 아래 표에는 2026-09-10 요청 시각별로 사용률과 리셋 예정 시각이 나열돼 있다. 08:44:12에 0퍼센트로 리셋 13:44:02, 이후 25·49·54·69·84퍼센트로 오르는 동안 리셋 시각은 13:44:11로 고정되고, 14:12:38에 다시 0퍼센트가 되며 리셋이 19:12:23으로 바뀐 뒤 76퍼센트까지 19:12:29~30에 고정돼 있다
한 화면에 다 들어 있습니다 사용률이 0에서 84%까지 오르는 동안 리셋 시각은 13:44:11에서 꼼짝하지 않습니다. 출처: 로컬 Codex CLI 세션 로그 직접 분석, 촬영 2026.09.15

레코드 한 건은 이런 모양입니다. 값은 제 것이라 지웠지만 구조는 그대로입니다.

원본 필드

"rate_limits": { "limit_id": "codex", "primary": { "used_percent": 53.0, "window_minutes": 10080, "resets_at": 1789957542 }, "secondary": null, "credits": { "has_credits": false, "balance": "0" }, "plan_type": "..." }

필드뜻
window_minutes창 길이. 300이면 5시간, 10080이면 7일
used_percent그 창에서 지금까지 쓴 비율
resets_at유닉스 타임스탬프로 찍힌 리셋 시각
primary / secondary두 개의 창을 동시에 추적합니다. 한쪽이 null일 수 있습니다
plan_type플랜 식별자. 같은 계정도 시점에 따라 값이 바뀝니다

창이 열리는 순간이 보입니다

2026년 9월 10일 하루치를 시간순으로 늘어놓으면 구조가 한눈에 들어옵니다. 시각은 모두 한국 시간입니다.

요청 시각사용률리셋 예정남은 시간
08:44:120%13:44:02299.8분
08:47:5625%13:44:11296.2분
08:51:1949%13:44:11292.9분
08:56:0554%13:44:11288.1분
09:03:1769%13:44:11280.9분
09:07:3984%13:44:11276.5분
— 13:44 리셋 통과 —
14:12:380%19:12:23299.7분
15:40:4516%19:12:30211.7분
16:07:4644%19:12:29184.7분
16:19:3676%19:12:30172.9분

읽는 순서는 이렇습니다.

첫째, 08:44:12에 사용률이 0%입니다. 이때 리셋 예정은 13:44:02, 남은 시간은 299.8분. 거의 정확히 5시간입니다. 즉 아직 창이 열리지 않은 상태이고, 서버는 “지금 시작하면 5시간 뒤”를 알려주고 있습니다.

둘째, 다음 요청부터 리셋 시각이 13:44:11로 못 박힙니다. 사용률이 25 → 49 → 54 → 69 → 84%로 오르는 동안 이 값은 초 단위까지 그대로입니다. 창이 열렸고, 닫히는 시각이 확정된 것입니다.

셋째, 08:44에 열린 창은 13:44에 닫힙니다. 그리고 그 뒤 첫 요청인 14:12:38에서 사용률이 다시 0%가 되고, 새 리셋 시각 19:12가 잡힙니다. 14:12 + 5시간 = 19:12. 정확히 맞습니다.

여기서 나오는 실용적 결론

코덱스의 5시간 창은 정각이나 자정 기준이 아닙니다. 오전 8시 44분에 첫 요청을 보내면 그날 오후 1시 44분에 리셋됩니다. 커뮤니티에서 도는 “몇 시에 풀린다”는 정보는 그 사람의 시작 시각일 뿐 내 계정과는 무관합니다.

한번 열리면 요청해도 안 밀립니다

가장 많이 받는 오해가 “계속 쓰면 리셋이 계속 미뤄지는 것 아니냐”입니다. 위 표가 그 답입니다. 08:47부터 09:07까지 다섯 번 요청하는 동안 리셋 시각은 13:44:11에서 1초도 움직이지 않았습니다.

다만 자세히 보면 13:44:02 → 13:44:11처럼 몇 초짜리 차이가 있습니다. 창이 열리지 않은 상태(0%)의 값과 실제로 열린 뒤의 값이 다르기 때문이고, 열린 뒤로는 13:44:11로 완전히 동일합니다. 두 번째 창도 19:12:29와 19:12:30 사이를 오가는데 이건 서버·클라이언트 시계의 1초 오차 수준입니다.

그래서 실무적으로는 이렇게 행동하면 됩니다.

상황행동이유
한도에 걸림로그에서 resets_at 확인정확한 시각이 이미 적혀 있습니다
재시도 반복의미 없음리셋 시각은 고정이라 미뤄지지도, 당겨지지도 않습니다
오늘 길게 작업할 예정첫 요청 시각을 의식그 시각 + 5시간이 그날의 첫 번째 마감입니다
사용률이 80%를 넘음남은 분을 계산제 기록에서는 23분 만에 0 → 84%도 나왔습니다

마지막 줄을 강조하고 싶습니다. 08:44에 0%였던 게 09:07에 84%였습니다. 23분입니다. 5시간 창이라고 해서 5시간 동안 균등하게 쓸 수 있다는 뜻이 전혀 아닙니다. 창은 시간 단위이고 한도는 사용량 단위라, 대부분의 경우 시간보다 사용량이 먼저 바닥납니다.

주간 창도 같은 구조입니다

window_minutes가 10080인 레코드, 즉 7일 창도 같은 방식으로 동작합니다. 전환점만 추리면 이렇습니다.

요청 시각(KST)사용률리셋 예정남은 기간
08-25 08:47:110%09-01(화) 08:47:017.00일
08-26 08:39:400%09-02(수) 08:39:327.00일
09-02 10:03:1435%09-07(월) 12:23:515.10일
09-14 08:48:550%09-21(월) 08:48:437.00일

0%인 줄은 전부 정확히 7.00일입니다. 창이 안 열린 상태라 “지금 + 7일”을 그대로 보여주는 것입니다. 반면 사용률 35%인 줄만 5.10일로 짧습니다. 역산하면 그 주간 창은 8월 31일 12시 23분에 열렸다는 뜻이 됩니다.

주간 창도 요일이 고정돼 있지 않다는 점이 중요합니다. 위 표에서 리셋 요일이 화요일, 수요일, 월요일로 제각각입니다. 주간 한도는 ‘매주 월요일’이 아니라 ‘그 주에 처음 쓴 시각’부터 7일입니다.

0%일 때의 값에 속지 마세요

제 데이터 전체에서 창이 안 열린 상태의 남은 시간은 5시간 창이 중앙값 299.8분, 7일 창이 10,000분대로 거의 만기값이었습니다. 이 상태만 보고 resets_at을 기록해 두면 “리셋이 계속 미뤄진다”는 잘못된 결론에 도달합니다. 사용률이 0보다 클 때의 값만 진짜 마감 시각입니다.

클로드와는 방식이 다릅니다

같은 날 클로드 쪽 기록도 꺼내 봤습니다. Claude Code는 한도에 걸린 429 응답을 ~/.claude/projects의 세션 로그에 남기고, 거기 resetsAt이 들어 있습니다.

Claude Code 세션 로그에서 추출한 429 한도 도달 기록. status rejected, resetsAt, rateLimitType five_hour가 담긴 원본 레코드와, 한도 도달 시각 2026-08-25 12:20:37에 리셋 13:30:00, 12:33:52에 13:30:00, 08-28 11:59:14에 14:00:00으로 세 건 모두 1800초 배수라는 확인 결과가 보인다
클로드 쪽은 정돈된 시각이 나옵니다 13:30:00, 13:30:00, 14:00:00. 초 단위가 아니라 30분 경계입니다. 출처: 로컬 Claude Code 세션 로그 직접 추출, 촬영 2026.09.15
Codex CLIClaude Code
기록 위치~/.codex/sessions~/.claude/projects
기록 시점매 요청마다 (사용률 포함)한도에 걸렸을 때 (429 응답)
리셋 시각 정밀도초 단위 (13:44:11, 19:12:29)30분 경계 (13:30:00, 14:00:00)
미리 알 수 있나예. 사용률과 남은 시간이 상시 기록걸리기 전에는 로그에 안 남습니다
창 길이300분 / 10080분5시간 / 7일

가장 큰 차이는 “미리 볼 수 있느냐”입니다. 코덱스는 한도에 걸리지 않아도 매 요청마다 지금 몇 %인지가 파일에 쌓입니다. 사용량 추이를 스스로 그릴 수 있다는 뜻입니다. 클로드는 걸려야 남습니다. 대신 클로드는 /usage 화면에서 같은 정보를 보여줍니다.

리셋 시각의 성격도 다릅니다. 코덱스는 내가 시작한 시각을 초 단위로 그대로 반영하고, 클로드는 30분 경계로 정돈합니다. 클로드 기록 세 건 모두 1800초의 배수였고, 같은 날 13분 간격으로 두 번 걸렸을 때도 리셋 시각은 13:30:00으로 동일했습니다.

단서는 달아 둡니다. 클로드 쪽은 제 계정 3건이 전부라 항상 30분 경계라고 단정하기엔 표본이 작습니다. 코덱스 쪽은 8,905건이라 패턴이 확실합니다.

내 로그로 직접 확인하기

남의 수치를 믿을 필요가 없습니다. 아래 한 덩어리를 붙여 넣으면 자기 계정의 실제 창 이력이 나옵니다.

코덱스 리셋 이력 뽑기

cd ~/.codex/sessions
grep -rho '"rate_limits".*' . | tail -1 ← 최근 한 건 원본 확인

시각으로 바꾸려면 resets_at 숫자를 date -r <숫자>(macOS) 또는 date -d @<숫자>(Linux)에 넣으면 됩니다.

판단 순서는 이렇게 하면 됩니다.

단계확인할 것
1used_percent가 0보다 큰지. 0이면 그 resets_at은 아직 의미 없는 값입니다
2window_minutes가 300인지 10080인지. 5시간 창과 7일 창을 섞어 보면 안 됩니다
3resets_at을 시각으로 변환. 그게 확정된 마감입니다
4used_percent와 남은 시간을 함께 보기. 대개 시간보다 사용량이 먼저 끝납니다

자주 묻는 질문

코덱스 한도는 몇 시에 리셋되나요?
고정된 시각이 없습니다. 그 창의 첫 요청 시각 + 5시간입니다. 제 기록에서는 08:44 시작 → 13:44 리셋, 14:12 시작 → 19:12 리셋이었습니다. 자기 로그의 resets_at을 보는 게 유일하게 정확한 방법입니다.

계속 쓰면 리셋이 미뤄지나요?
아닙니다. 창이 열린 뒤에는 초 단위까지 고정입니다. 사용률이 0에서 84%까지 오르는 동안 리셋 시각은 13:44:11 그대로였습니다.

제 로그에는 secondary가 null입니다.
정상입니다. 제 데이터에도 두 창이 동시에 채워진 구간과 한쪽만 있는 구간이 섞여 있었습니다. 플랜과 시점에 따라 달라집니다.

5시간 창인데 왜 30분 만에 다 썼나요?
창 길이와 한도 크기는 별개입니다. 창은 “언제 초기화되는가”이고 한도는 “얼마나 쓸 수 있는가”입니다. 제 기록에서도 23분 만에 84%에 도달한 구간이 있습니다.

주간 한도는 월요일에 풀리나요?
아닙니다. 제 로그의 리셋 요일은 화·수·월로 제각각이었습니다. 그 주에 처음 쓴 시각부터 7일입니다.

확인한 자료 2026년 9월 15일, 로컬에 설치된 Codex CLI 0.148.0의 세션 로그(~/.codex/sessions)에서 rate_limits가 포함된 레코드 8,905건을 추출해 window_minutes·used_percent·resets_at의 관계를 직접 분석했습니다. 본문의 2026년 9월 10일 5시간 창 추적표와 주간 창 전환표는 모두 제 계정의 실제 기록이며, 시각은 한국 시간으로 변환했습니다. 비교용 Claude Code 기록은 ~/.claude/projects의 429 응답 3건에서 resetsAt·rateLimitType를 뽑은 것입니다. 한도의 절대 크기와 플랜별 배정량은 로그에 비율로만 남아 다루지 않았습니다. 리셋 창의 동작에 관한 OpenAI의 공개 문서 설명은 확인하지 못했고, 이 글의 결론은 전부 제 로컬 기록에 근거합니다.

Codex CLI 공식 문서 ↗ · Claude Code 한도 오류 레퍼런스 ↗ · openai/codex 저장소 ↗