Skip to content

한투 정기점검 후 조회 불가 시 #192

Description

@pipios4006-boop

🧠 [내부 연산 및 논리적 정당화 (Think & Justify)]

▫️ 현상 분석: 한투증권 정기점검 이후 "통신 오류로 계좌 정보를 불러올 수 없습니다" 메시지가 출력되며 봇이 마비됨.

▫️ 수학/논리적 원인: KIS 서버는 정기점검 시 보안 상의 이유로 기존에 발급된 접근 토큰(Access Token) 세션을 일괄 파기(Revoke)하는 경우가 발생합니다. 하지만 봇의 로컬 스토리지(data/token_*.dat)에 기록된 토큰의 논리적 만료 시간(24시간)은 아직 도달하지 않았습니다. 결과적으로 봇은 폐기된 토큰을 유효한 것으로 신뢰하여 지속적으로 KIS 서버에 타격을 시도하고, 서버는 이를 Reject(거절)하여 계좌 조회(get_account_balance)가 None을 반환하며 마비되는 State Mismatch(상태 불일치) 패러독스가 발생한 것입니다.

▫️ 기존 방어망의 맹점: kis_api_client.py 내의 TOKEN_EXPIRY_KEYWORDS 쉴드가 일반적인 토큰 만료 에러(egt0001, expired 등)는 튕겨내지만, 정기점검 직후 KIS 서버가 뱉어내는 비표준 에러 메시지(예: '점검', '등록되지 않은', '초과' 등)를 포착하지 못해 토큰 강제 갱신(force=True) 트리거가 격발되지 않았습니다.

▫️ 엣지 케이스 교차 검증: 토큰 캐시 파일을 강제로 소각하고 재생성하는 로직을 주입할 때, 제4헌법(원자적 쓰기)과 글로벌 파일 뮤텍스(GlobalThrottle.get_file_lock)를 준수하지 않으면 TOCTOU 레이스 컨디션이 발생할 수 있으므로 팩트 래핑이 필요합니다.

🎯 [ 1단계 : 에러 타겟 파일 식별 ]
▫️ 파일명 : kis_api_client.py
▫️ 타겟 함수 : _api_request()_get_access_token()
🔍 [ 2단계 : 논리 승인 브리핑 ]
한투 정기점검 후 발생하는 '토큰 데드락(Token Deadlock)' 현상입니다. 이를 완벽히 사수하기 위한 2중 수술 논리를 브리핑합니다.

🛡️ [수술 논리 1] 맹독성 에러 키워드 스펙트럼 확장
▫️ 기존 TOKEN_EXPIRY_KEYWORDS 집합에 정기점검 후 빈번히 발생하는 KIS 서버의 비표준 Reject 사유(점검, 권한, 등록되지, 시스템)를 추가 이식합니다.
▫️ 이를 통해 예상치 못한 에러 응답 시에도 낡은 토큰을 즉각 의심하고 토큰 강제 재발급(Self-Healing) 파이프라인으로 라우팅시킵니다.

🛡️ [수술 논리 2] 연속 Reject 컷오프 (Fail-Safe)망 결속
▫️ 키워드 매칭을 뚫고 들어오는 미지의 맹독성 응답을 방어하기 위해, 재시도(attempt) 루프 내에서 특정 횟수 이상 API가 거절될 경우 묻지도 따지지도 않고 로컬 토큰 파일(data/token_*.dat)을 원자적으로 100% 영구 소각한 뒤 새로운 토큰을 주입하도록 방어 캡핑을 씌웁니다.

💡 [즉각적인 임시 조치 가이던스]
▫️ 코드 수술 전 당장 봇을 정상화하려면, 봇이 구동 중인 환경의 data/ 폴더 내에 있는 token_*.dat 파일을 수동으로 삭제한 뒤 봇을 재가동(/update 혹은 시스템 재시작)하시면 KIS 서버로부터 새 토큰을 정상 발급받아 즉시 회복됩니다.

💠 V94.30 (2026.07.05)
▫️ 🚀 [KIS 정기점검 토큰 데드락 궁극 수술 및 연속 Reject Fail-Safe 락온]:
🔸 맹독성 에러 스펙트럼 확장: 한투 서버 정기점검 후 반환되는 비표준 Reject 사유('점검', '권한', '등록되지', '시스템', '초과')를 토큰 갱신 트리거(TOKEN_EXPIRY_KEYWORDS)에 100% 편입시켜, 오염된 토큰으로 인한 API 무한 마비(State Mismatch) 런타임 붕괴 원천 방어.
🔸 연속 Reject 컷오프망 결속: 3회 연속 API 통신 거절 시 묻지도 따지지도 않고 로컬 토큰 파일(token.dat)을 원자적으로 영구 소각하여 봇 자가 치유(Self-Healing) 멱등성 100% 사수.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions