codex OAuth 토큰 만료를 자동 감지해 재로그인하는 cron 자동화
목차
codex OAuth 토큰 만료를 자동으로 감지하고 재로그인하는 cron 작업과 스크립트를 추가했다. 개발 환경의 인증 문제가 반복되지 않도록 하는 작업이었다.
왜 이런 자동화가 필요했나
OAuth 토큰은 보안상 일정 시간 후 만료된다. 개발 환경도 마찬가지인데, 토큰이 만료되면 팀원들이 일일이 재로그인해야 한다. 특히 CI/CD 파이프라인이나 자동화 스크립트에서 codex를 사용할 때, 예고 없이 요청이 실패하기 시작한다. "왜 어제까지 잘 되던 게 오늘 안 돼?" 하는 문의가 들어오고, 결국 누군가는 수동으로 재로그인해야 한다.
이런 상황을 반복하다 보니, 아예 토큰 만료를 감시하고 자동으로 갱신하는 게 낫겠다고 판단했다. 팀원들의 개발 흐름을 끊지 않으면서도, 인증 문제로 인한 방해를 없애려고.
구현 접근
두 개의 스크립트로 구성했다:
| 파일 | 역할 |
|---|---|
codex-auth-check.sh |
OAuth 토큰 만료 여부를 주기적으로 감시하는 cron 작업 |
codex-relogin.sh |
만료 감지 시 자동으로 재로그인하는 실행 스크립트 |
cron으로 일정 간격(보통 매일 또는 특정 시간)에 체크하고, 만료 감지되면 재로그인을 수행하는 방식이다. 이렇게 하면:
- 개발팀이 의식적으로 로그인을 신경 쓰지 않음
- 자동화 작업(배포, 테스트 등)이 중단되지 않음
- 토큰 갱신 로그를 남길 수 있어 모니터링 가능
구현할 때 고민한 지점
macOS 환경에서의 인증 처리
macOS는 보안이 엄격해서, 단순히 환경변수나 설정 파일만으로는 인증이 안 되는 경우가 많다. Keychain, 세션 토큰, 권한 문제 등을 고려해야 했다. 스크립트가 충분한 권한으로 실행되도록 하고, 인증 정보를 안전하게 저장하도록 신경 썼다.
멱등성 (idempotent)
cron이 여러 번 실행되어도, 이미 토큰이 유효하면 굳이 재로그인하지 않아야 한다. 불필요한 요청이나 상태 변화를 피하려고. 따라서 auth-check 스크립트는 현재 토큰의 유효시간을 먼저 확인하고, 정말 필요한 경우에만 relogin 스크립트를 실행하도록 했다.
로그 및 모니터링
자동화 스크립트가 조용히 실행되다 보면 문제가 생겼을 때 추적이 어렵다. 토큰 갱신 시도, 성공/실패 여부, 타임스탬프 등을 로그 파일에 남겨두면, 나중에 "언제부터 문제가 있었나?" 같은 질문에 빠르게 답할 수 있다.
일반적인 토큰 자동 갱신 패턴
이런 류의 자동화는 생각보다 자주 마주친다:
- Refresh Token 기반: 만료 토큰 대신 refresh token을 이용해 새 토큰 획득. OAuth 표준이 많이 이렇게 구현됨
- API 응답 기반: API 요청이 401 Unauthorized를 반환하면 그때 재로그인. 코드가 단순하지만, 실제로 요청이 실패해야 대응함
- 시간 기반: 토큰 발급 시간 + TTL을 기반으로 만료 예상 시간을 계산하고, 그 전에 선제적으로 갱신. 부분 선제적 갱신은 API 부하도 줄일 수 있음
- 주기적 감시 (이번 경우): 독립적인 cron 작업이 정기적으로 토큰 상태를 체크하고 필요시 갱신. 코드가 복잡할 수 있지만, 중앙 집중식 모니터링에 유리
우리가 선택한 "주기적 감시" 방식은 개발팀이나 운영팀이 직접 제어할 수 있고, 로그 추적이 명확하다는 장점이 있다.
회고
처음엔 "개발팀이 이 정도는 스스로 대응하겠지"라고 생각했는데, 실제로 이걸 자동화하자 제안했을 때 반응이 긍정적이었다. 작은 번거로움도 누적되면 팀 생산성에 영향을 준다는 걸 다시 깨달았다. 특히 인증처럼 자주 문제가 되지 않지만, 발생하면 원인 파악이 어려운 분야는 아예 자동화로 없애버리는 게 나을 수 있다.
비슷하게, 자동화할 수 있는 운영 작업들(로그 정리, 캐시 갱신, 설정 동기화 등)을 주기적으로 리뷰하면서, "이게 정말 수동으로 해야 하나?" 하는 질문을 던져야겠다는 생각도 들었다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.