SQLModel timezone=True 한 줄이 만든 9거래일 체결 0건
Phase 124에서 DB 컬럼을 TIMESTAMP → TIMESTAMPTZ로 올렸는데, 대응하는 SQLModel 필드에 timezone=True를 빠뜨렸다. asyncpg가 매도 체결 저장을 거부하면서 9거래일간 체결이 한 건도 기록되지 않았다. /health는 계속 200이었다.
Phase 124에서 DB 컬럼을 TIMESTAMP → TIMESTAMPTZ로 올렸는데, 대응하는 SQLModel 필드에 timezone=True를 빠뜨렸다. asyncpg가 매도 체결 저장을 거부하면서 9거래일간 체결이 한 건도 기록되지 않았다. /health는 계속 200이었다.
코드 마이그레이션 후 특정 엔드포인트에서 간헐적 500 에러가 발생했다. 원인은 마이그레이션 중 일부 코드가 timezone-aware datetime을 naive로 변환해서 빼려고 했던 것. TypeError 한 줄이 모니터링을 통과한 이유까지 정리했다.
KST 09:00으로 설정한 스케줄러가 UTC 09:00에 실행된 실제 사고 사례와 원인 분석, 그리고 재발 방지 패턴을 정리한다.