
우리가 일할 때도, 봇은 차트를 본다
안녕하세요. 감정 없는 기계적인 매매로 내 계좌를 든든하게 지켜내는 [계좌 리팩토링] 시리즈 8편입니다. 지난 7편까지 우리는 API 토큰 발급, 잔고 조회, 실시간 시세 연동, 그리고 대망의 매수/매도 로직까지 모두 완성했습니다.
하지만 여기까지는 절반의 완성입니다. 우리가 터미널에서 node app.js를 치고 컴퓨터를 켜두어야만 봇이 돌아간다면, 진정한 의미의 '자동화'라고 할 수 없겠죠. 컴퓨터가 꺼지거나, 우리가 직장에서 본업에 집중하는 동안에도 봇은 백그라운드에서 조용히 자신의 임무(수익 창출)를 수행해야 합니다.
이번 8편에서는 봇을 서버(또는 항상 켜두는 PC)에 올려두고, 정해진 시간에만 작동하며 에러가 나도 스스로 재시작하는 완벽한 무중단 시스템을 구축해 보겠습니다.
1. 주식 시장 시간에만 일하게 만들기: node-cron
주식 시장은 정해진 시간(한국 기준 오전 9시 ~ 오후 3시 30분)에만 열립니다. 새벽이나 주말에 봇이 증권사 서버에 시세를 물어보거나 주문을 넣는 것은 무의미하며, 불필요한 API 호출로 에러를 유발할 수 있습니다.
이때 사용하는 것이 스케줄러 라이브러리인 node-cron입니다. 특정 시간, 요일에만 함수를 실행하도록 예약할 수 있습니다.
# 터미널에서 라이브러리 설치
npm install node-cron
// (프로젝트 루트의 app.js - 메인 실행 파일)
const cron = require('node-cron');
const { subscribePrice } = require('./subscribe_price'); // 5편의 실시간 시세 함수
const { checkAndSell } = require('./sell_order'); // 7편의 매도 로직 함수
console.log('🤖 [계좌 리팩토링] 자동매매 시스템 대기 중...');
// 평일(월~금) 오전 9시 정각에 봇 실행
cron.schedule('0 9 * * 1-5', () => {
console.log('🔔 장이 열렸습니다. 자동매매 시스템을 가동합니다.');
// 1. 실시간 호가 구독 시작
subscribePrice('005930');
// 2. 주기적인 계좌 상태 모니터링 (예: 1분마다) 시작
// ... 모니터링 로직 ...
}, {
timezone: "Asia/Seoul" // 한국 시간대 설정 필수!
});
// 평일(월~금) 오후 3시 30분에 봇 정지 (장 마감)
cron.schedule('30 15 * * 1-5', () => {
console.log('🛑 장이 마감되었습니다. 시스템을 대기 모드로 전환합니다.');
// ... WebSocket 연결 종료 및 일일 수익률 결산 로직 ...
}, {
timezone: "Asia/Seoul"
});
2. 터미널이 꺼져도 봇은 살아있다: PM2
node-cron으로 시간표를 짰다면, 이제 이 프로그램을 백그라운드에서 영구적으로 돌려줄 프로세스 매니저가 필요합니다. Node.js 생태계에서 가장 강력하고 널리 쓰이는 도구가 바로 PM2입니다.
PM2는 코드에 치명적인 에러가 발생해 봇이 뻗어버려도(Crash), 자동으로 다시 실행(Auto Restart)시켜주는 엄청난 기능을 가지고 있습니다.
# PM2는 시스템 전역에 설치하는 것이 좋습니다.
npm install pm2 -g
PM2 핵심 명령어 모음 (이것만 알면 끝!)
- 봇 백그라운드 실행:
pm2 start app.js --name "stock-bot"(이제 터미널을 꺼도 봇은 계속 돌아갑니다!) - 실행 중인 봇 목록 확인:
pm2 list(상태, 메모리 사용량 등 확인 가능) - 봇의 콘솔 로그(console.log) 실시간 확인:
pm2 logs stock-bot(주문 체결 로그를 볼 때 필수) - 봇 중지/재시작/삭제:
pm2 stop stock-bot/pm2 restart stock-bot/pm2 delete stock-bot

시스템 아키텍처 완성: 내 계좌 리팩토링
이제 여러분의 코드는 단순한 스크립트를 넘어, 하나의 독립적인 '서비스'가 되었습니다. 클라우드 서버(AWS EC2, Oracle Cloud 등)나 집에 남는 라즈베리파이에 이 코드를 올려두고 pm2 start를 치는 순간, 여러분만의 개인 펀드매니저가 고용된 것입니다.
마무리 및 다음 편 예고
축하합니다! 1편부터 8편까지 따라오시느라 정말 고생 많으셨습니다. API 세팅부터 시작해 매수/매도 로직을 짜고, 24시간 무중단 자동화 시스템까지 구축하며 우리는 성공적으로 '계좌 리팩토링'의 뼈대를 완성했습니다.
하지만 봇이 혼자 서버에서 돈을 벌고(혹은 잃고) 있다면 우리가 알 길이 없겠죠? 매수/매도가 체결될 때마다 스마트폰으로 알림을 받아야 마음이 편할 것입니다.
다음 9편(외전)에서는 슬랙(Slack) 또는 텔레그램(Telegram) API를 연동하여 봇의 매매 결과를 내 핸드폰 메시지로 실시간으로 쏴주는 알림 시스템을 만들어보겠습니다. 봇과의 완벽한 소통, 기대해 주세요!
⚠️ 주의사항 (면책 조항)
이 블로그에서 제공하는 코드는 교육 목적으로 작성되었습니다. 무중단 서버에 봇을 배포하기 전, 반드시 모의투자 환경에서 최소 1주일 이상 봇을 구동하며 예상치 못한 에러나 로직 결함(예: 무한 매수 버그)이 없는지 완벽하게 검증하시기 바랍니다. 모든 투자 결과와 서버 관리의 책임은 개발자 본인에게 있습니다.
'🛠️ Dev & Tools (투자 도구 개발)' 카테고리의 다른 글
| [계좌 리팩토링] 10편(심화). 진짜 퀀트의 시작! 일목균형표(Ichimoku Cloud) 매매 로직 연동하기 (0) | 2026.05.23 |
|---|---|
| [계좌 리팩토링] 9편(외전). 봇의 보고서를 내 폰으로! 텔레그램(Telegram) 실시간 알림 연동 (0) | 2026.05.23 |
| [계좌 리팩토링] 7편. 수익의 완성! Node.js 주식 매도 주문 및 수익률 자동 계산 (0) | 2026.05.20 |
| [계좌 리팩토링] 6편. 드디어 실전! Node.js로 주식 매수 주문 자동화하기 (0) | 2026.05.19 |
| [계좌 리팩토링] 5편. 뚝딱뚝딱 호가창 연동! Node.js 실시간 시세 조회 (WebSocket) (0) | 2026.05.18 |