Files
trex-core/docs/batches/bat-054_20260628_daystart-credential-kis-inject/planning.md
T
genichinandClaude Sonnet 4.6 6b066e19cb feat(bat-054): 그날-시작 KIS 인증정보 양의 경로 주입 — KISBroker reinitialize (REQ-113 AC-2/AC-4, REQ-115 AC-1)
BAT-053 스캐폴드에서 연기된 양의 경로 완성:
- KISBroker.reinitialize(credential): app_key/app_secret/account_ref 교체 + L1 token 무효화
- SnapshotScheduler에 kis_reinit_callback 주입 지점 추가; 그날-시작 성공 시 callback 호출
- daemon.py에 _build_kis_reinit_callback() 헬퍼 + SnapshotScheduler 조립 수정
- 신규 테스트 12개 추가: 757 passed / 47 skipped (기존 745 대비 +12, 회귀 0)

안전 불변식 유지:
- credential_fetch_enabled=False(기본) 경로 byte-for-byte 보존
- fail-closed 불변식 미파괴 (reinit 실패 시 entry_allowed 유지)
- AMQP wire 계약 변경 없음

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
2026-06-28 19:51:48 +09:00

3.0 KiB

BAT-054: Planning

  • Status: confirmed
  • Batch: BAT-054
  • Profile: standard

Included REQ

  • REQ-113 (Approved, 미충족 AC: AC-2 fetch→KISConfig 재조립, AC-4 break-glass 로그 assert)
  • REQ-115 (Approved, 미충족 AC: AC-1 캐시 인증정보로 KIS 주문 지속)

Scope Summary

BAT-053에서 스캐폴드로 처리된 "양의 경로(positive path)"를 완성한다.

  • 그날-시작 체크포인트에서 fetch 성공 시 BrokerCredentialPayload로 KISConfig의 app_key/app_secret/account_ref를 재조립하고 이를 실제 KISBroker 인스턴스에 주입한다.
  • 재조립 후 KISBroker는 그날 캐시된 인증정보로 장중 KIS API 호출(주문·체결 조회·토큰 갱신)을 처리한다.
  • portfolio-hub 장중 장애는 이미 재조립된 KISBroker 운행에 영향을 주지 않는다.
  • break-glass 로그 내용 assert 테스트를 추가한다(AC-4 보강).

Task Breakdown

T1: REQ-113 AC-2 — KISBroker 재조립 callback 설계 + 구현

  • SnapshotScheduler에 kis_reinit_callback: Optional[Callable[[BrokerCredentialPayload], None]] = None 추가
  • 그날-시작 성공 시 _maybe_fetch_credential()에서 callback 호출 → KISBroker 재초기화
  • daemon.py의 _build_broker()에서 KIS 브로커면 callback을 조립하여 주입

T2: REQ-115 AC-1 — KISBroker 런타임 교체 메서드

  • KISBroker(또는 daemon.py)에 reinitialize(credential: BrokerCredentialPayload) 같은 메서드 제공
  • 재초기화는 app_key/app_secret/account_ref만 교체; base_url/timeout/allow_live는 env 원본 유지
  • KIS access token 캐시(Redis, REQ-016)는 app_key 변경 시 무효화 필요

T3: REQ-113 AC-4 보강 — break-glass 로그 assert 테스트

  • tests/runtime/test_config.py 또는 tests/application/test_snapshot_scheduler.py에 AC-4 로그 content 검증 케이스 추가

Design Gate

  • Design Required Before Implementation: yes
  • Reason: KISBroker 재초기화 방법(메서드 추가 vs callback 교체 vs wrapper) + 재초기화 시 access token 캐시 무효화 정책이 구현 전에 명시되어야 한다. 기존 KISBroker 코드를 확인 후 결정.

Dependencies

  • Internal:
    • BAT-053 완료(REQ-112 BrokerCredentialPayload/TradingContext 구현, REQ-114 fail-closed 스캐폴드)
    • adapters/broker/kis.py (KISBroker) — reinitialize 진입점
    • runtime/daemon.py (_build_broker, SnapshotScheduler 조립)
  • External:
    • 없음 (portfolio-hub 실 연동은 스텁 기반 테스트로 커버)

Risks

  • R1 (High): KISBroker 재초기화 중 진행 중인 주문 경쟁 조건 — broker 레벨 lock 또는 재초기화 안전 구간 확인 필요
  • R2 (Medium): access token 캐시(Redis, REQ-016) 무효화 누락 → 구 account_ref 토큰이 신규 인증정보와 충돌
  • R3 (Medium): daemon.py에서 callback 조립 시 DaemonConfig.broker == 'kis' 여부 확인 — paper broker면 callback 불필요
  • R4 (Low): 테스트에서 실제 KIS API를 호출하지 않도록 mock/stub 격리 유지 — KISBroker.reinitialize()는 stub BrokerPort로 테스트