📚 토스 자동매매 개발기 시리즈 (Phase 3/전체 11편)
- Phase 0 — 기반 시스템 구축 (#0)
- Phase 0-1 — 통화 단위 버그 수정 (#0-1)
- Phase 1 — 설정 분리 & 재시도 로직 (#3)
- Phase 1-2 — 설정/재시도 후속 보완 (#4)
- Phase 1-3 — pytest 테스트 도입 (#5)
- Phase 1-4 — 로그 로테이션 (#6)
- Phase 2-1 — 전략 클래스 추상화 (#7)
- Phase 2-2 — 복수 종목 감시 (#8)
- Phase 3-1 — SQLite 스키마 설계 (#9)
- Phase 3-2 — db.py 모듈 구현 (#10)
- Phase 3-3 — DB 실전 연동 (이 글, #11)
💡 이번 Phase 3-3 요약
- 목적: 지난 세션에서 완성한 db.py를 실제 매매 엔진과 포트폴리오 대시보드에 연결해 Phase 3(데이터 영속성)를 완전히 마무리
- 핵심 포인트: send_notification()에 level/symbol 파라미터를 추가해 알림 발송 여부와 무관하게 alerts 테이블에 항상 기록되도록 설계
- 검증: 모킹 시뮬레이션 + 로컬 실행 2단계 검증, pytest 전체 58개 통과
db.py 자체는 지난 글에서 끝났으니 이번엔 쉬울 줄 알았다. 그런데 막상 auto_trader.py에 init_db() 호출을 박아 넣으려니, “어느 시점에 불러야 매번 새 커넥션을 만들지 않으면서도 테이블 누락 걱정 없이 안전할까”부터 다시 고민해야 했다.
엔진 시작 시점에 init_db() 호출하기
결론은 단순했다. auto_trader.py의 메인 진입점 최상단에서 db.init_db()를 한 번 호출한다. 이렇게 하면 trading_history.db 파일이 없거나 테이블이 비어 있어도 sqlite3.OperationalError: no such table: trades 같은 에러 없이 항상 안전하게 시작된다. toss_portfolio.py 쪽도 동일하게 실행 시작 지점에 init_db()를 추가했다.
send_notification()에 level/symbol 추가하기
원래 send_notification()은 텔레그램 설정이 없으면 그냥 print만 하고 끝나는 함수였다. 이번엔 여기에 level(INFO/WARNING/ERROR)과 symbol(관련 종목, 없으면 None) 파라미터를 추가해서, 텔레그램 전송 여부와 무관하게 무조건 alerts 테이블에 기록되도록 바꿨다. 알림이 “보내졌는지”와 “기록됐는지”를 분리한 게 핵심이었다.
execute_order()에 strategy_name 남기기
시뮬레이션 매수가 발생할 때, 어떤 전략 클래스(Phase 2-1에서 만든 그 추상 클래스)가 신호를 냈는지 trades 테이블에 함께 기록하도록 strategy_name 파라미터를 추가했다. 실주문 API 호출부는 여전히 주석 처리 상태라, 나중에 실전 전환할 때 “이 자리에도 동일한 거래 기록 호출을 넣어야 한다”는 안내 주석만 남겨뒀다.
검증: 모킹 → 로컬 실행 2단계
먼저 API 없이 가상 종목 2개(즉시 매수 성공 / 네트워크 오류로 제외)를 동시에 돌려서 거래·알림 이력이 정확히 남는지 확인했다. 그 다음엔 실제로 4개 종목을 감시하는 auto_trader.py를 로컬에서 몇 초 돌린 뒤, 생성된 trading_history.db를 SQL로 직접 조회해서 “엔진 가동” 알림이 레벨·시각과 함께 남은 걸 확인했다. 마지막으로 pytest를 전체 재실행했고, 58 passed로 안전장치 값 변경 없이 통과했다.
토스 자동매매 봇에서 DB 연동은 db.init_db()를 엔진 시작 시점에 한 번 호출하고, send_notification()과 execute_order()에 각각 level/symbol, strategy_name 파라미터를 추가해 텔레그램 발송 여부와 무관하게 alerts·trades 테이블에 항상 기록되도록 하는 방식으로 완성했다.
Phase 0~3 전체 완료, 다음은 백테스팅
이걸로 Phase 0(기반)부터 Phase 3(데이터 영속성)까지 전부 끝났다. Phase 3에서 쌓기 시작한 price_snapshots 데이터가 쌓이는 대로, Phase 4에서는 이 데이터를 기반으로 과거 시세에 전략을 대입해보는 백테스팅 모듈을 만들 예정이다.
“SQLite 연동으로 완성한 Phase 3, 매매·알림 자동 기록기 | 토스 자동매매 개발기 #11 (Phase 3-3)”에 대한 4개의 생각