봇을 24시간 안정적으로 운영하기 (Windows 콘솔)
봇을 만드는 것과 24시간 죽지 않게 돌리는 것은 다른 일입니다. Windows 데스크톱에서 콘솔 봇을 무인 운영하며 정리한, 눈에 잘 안 띄는 그러나 결정적인 기법들입니다.
⚠️ 실거래 자동매매는 소프트웨어·네트워크 장애로 손실이 발생할 수 있습니다. 이 글은 교육·정보 목적이며 투자 권유가 아닙니다.
1. 콘솔을 트레이처럼 — 시작 시 최소화
콘솔 봇을 24시간 켜두면 창이 계속 자리를 차지합니다. Windows라면 user32.dll을 직접 호출해 시작하자마자 창을 최소화하거나 숨길 수 있습니다.
var user32 = syscall.NewLazyDLL("user32.dll")
var showWindow = user32.NewProc("ShowWindow")
const swHide, swShowMin = 0, 2
// 시작 시 콘솔 최소화 (창 핸들이 준비될 때까지 잠깐 재시도)
func minimizeConsoleOnStart() {
go func() {
for i := 0; i < 20; i++ {
if hwnd := getConsoleWindow(); hwnd != 0 {
showWindow.Call(hwnd, swShowMin)
return
}
time.Sleep(100 * time.Millisecond)
}
}()
}
핸들이 즉시 준비되지 않을 수 있어 짧게 재시도하는 게 포인트입니다. 여기에 대시보드 버튼으로 show/hide/minimize를 연결하면, 웹에서 봇 창을 꺼냈다 넣었다 할 수 있습니다. 단, 이 코드는 OS 종속이라 window_ctrl_windows.go처럼 빌드 태그로 격리해 다른 OS 빌드가 깨지지 않게 합니다.
2. 죽으면 다시 살린다 — 자동 재시작
아무리 잘 만들어도 프로세스는 죽습니다. 패닉, 메모리, OS 업데이트… 그래서 감시 후 재시작하는 얇은 래퍼를 둡니다. 별도 도구 없이 배치 스크립트만으로도 됩니다.
:loop
StockBot.exe
echo [%date% %time%] 봇 종료 감지 — 5초 후 재시작
timeout /t 5 /nobreak
goto loop
봇이 어떤 이유로든 종료되면 루프가 다시 실행합니다. 더 견고하게 가려면 Windows 작업 스케줄러에 "실패 시 다시 시작"이나 부팅 시 자동 실행을 걸어, 재부팅 후에도 손 없이 복구되게 합니다. 무한 재시작 폭주를 막으려면 짧은 대기(예: 5초)를 꼭 끼워 넣으세요.
3. 재시작해도 기억한다 — 상태 영속화
자동 재시작의 전제 조건은 재시작해도 상태를 잃지 않는 것입니다. 메모리에만 있던 포지션·기준선이 날아가면, 되살아난 봇은 자기가 뭘 들고 있는지 모릅니다. 그래서 핵심 상태를 파일에 남깁니다.
bot_state.json : 실행 상태(running 여부 등)
positions.json : 현재 포지션(수량·평단·진입시각)
baseline.json : 당일 기준선(날짜 포함)
복구 시 날짜 검사가 중요합니다. 저장된 기준선의 날짜가 오늘이 아니면 폐기하고 새로 잡습니다 — 어제 데이터로 오늘 판단하는 참사를 막기 위해서죠. 저장은 잦아도 되니, 상태가 바뀔 때마다 파일에 덮어씁니다(데이터가 작아 비용은 무시할 만합니다).
if saved.TradingDate != today {
baseline = nil // 날짜 바뀜 → 폐기 후 재캡처
}
4. 살아 있음을 증명한다 — 헬스와 알림
무인 운영의 마지막 조각은 "봇이 살아 있고 정상인가"를 밖에서 아는 것입니다.
- 헬스 엔드포인트: 인증 없는
/health로 프로세스 생존을 외부에서 폴링. - 데이터 신선도 감시: 실시간 데이터가 일정 시간 안 들어오면 경고 → 더 길면 연결 재수립.
- 핵심 이벤트 알림: 진입·청산·오류·재시작을 메신저로 즉시 통지. 사람이 하루 종일 화면을 볼 수 없으니까요.
정리
- 콘솔은 시작 시 최소화로 트레이처럼, 창 제어는 빌드 태그로 격리
- 감시 래퍼/스케줄러로 자동 재시작, 단 재시작 폭주 방지 대기 필수
- 상태를 파일로 영속화하고 날짜 검사로 복구 — 재시작의 전제 조건
- 헬스·신선도·알림으로 살아 있음을 밖에서 확인
봇의 진짜 난이도는 첫 실행이 아니라 1주일, 한 달을 손 안 대고 도는 것에 있습니다. 화려한 전략보다, 죽어도 되살아나고 상태를 잃지 않는 이 지루한 뼈대가 무인 운영을 지탱합니다.
댓글
댓글 쓰기