DNS 순간 장애가 WebSocket을 종일 죽인 이유: 자동 복구 경로가 없었다
새벽 5시 DNS 순간 장애로 KIS WebSocket이 재연결 5회를 소진하고 영구 차단됐다. DNS가 복구된 후에도 WebSocket은 살아나지 않았다. 자동 복구 경로가 설계에 없었기 때문이다.
새벽 5시 DNS 순간 장애로 KIS WebSocket이 재연결 5회를 소진하고 영구 차단됐다. DNS가 복구된 후에도 WebSocket은 살아나지 않았다. 자동 복구 경로가 설계에 없었기 때문이다.
Phase 124에서 DB 컬럼을 TIMESTAMP → TIMESTAMPTZ로 올렸는데, 대응하는 SQLModel 필드에 timezone=True를 빠뜨렸다. asyncpg가 매도 체결 저장을 거부하면서 9거래일간 체결이 한 건도 기록되지 않았다. /health는 계속 200이었다.
uvicorn을 네이티브로 띄웠다고 생각했는데 헬스체크가 200을 반환한다. 서버가 잘 떴다고 믿고 계속 개발했다. 알고 보니 OrbStack의 Docker 컨테이너가 같은 포트를 점유하고 있었고, 내가 수정한 코드는 실행 중이 아니었다.