My bot logged a fresh decision every 5 minutes for over an hour. The price it was deciding on never moved once.

개요

자동화된 암호화폐 거래 봇에서 API 호출 시 발생한 간과하기 쉬운 오류가 봇이 실제로는 아무런 결정을 내리지 않고 있었음에도 불구하고 정상적으로 작동하는 것처럼 보이게 만들었다.

주요 내용

* 문제 상황: 암호화폐 거래 봇이 5분마다 브로커 API를 호출하여 최근 1시간의 가격 데이터를 가져와 매수, 매도, 보유 결정을 내리고, 매번 의사결정 내용을 로그 파일에 기록하도록 설정되었다.
* 근본 원인: API에 "최근 N개의 봉(bar)"을 요청할 때 명시적인 시작 시간을 지정하지 않아, API가 최신 N개의 봉 대신 해당 날짜의 자정부터 시작되는 고정된 시간 범위의 데이터를 반환했다.
* 실제 발생한 현상: 봇은 5분마다 API를 호출하고 응답을 받았으나, 1시간 이상 동일한 가격 데이터 스냅샷을 반복해서 받아왔다. 로그에는 매번 새로운 결정이 기록되었지만, 실제로는 같은 데이터를 기반으로 동일한 결정을 반복한 것이었다.
* 오류 발견 경로: 봇의 로그만으로는 문제가 감지되지 않았으며, 무관한 검토 중 로그의 가격 데이터가 연속적으로 동일하다는 점을 발견하여 문제의 심각성을 인지했다.
* 오류의 특이점: API 자체의 오류, 프로세스 충돌, 타임아웃 등이 발생하지 않았고, 각 구성 요소는 명령대로 작동했다. 봇 내부 측정 지표상으로는 정상 작동하는 것처럼 보였다.
* 더 넓은 시사점: "로그에 무언가 기록되었다"와 "의미 있는 변화가 발생했다"는 같은 주장이 아니며, 정상적으로 보이는 로그만으로는 이를 구분하기 어렵다. 단순히 주기적으로 출력이 발생하는지를 확인하는 모니터링 시스템은 이러한 종류의 실패 모드를 감지하지 못한다.

시사점

정상적으로 작동하는 것처럼 보이는 로그나 지표만으로는 자동화된 시스템의 실제 유효한 작업 수행 여부를 보장할 수 없으며, 데이터의 내용적 변화를 직접 확인하는 심층적인 모니터링 메커니즘이 필수적이다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions