RotatingFileHandler로 로그 파일 관리하기 | 토스 개발기 #1-4

📚 토스 자동매매 개발기 시리즈 (현재 Phase 1-4 / 총 6편)

다음 글: Phase 2(전략 모듈화) — 발행 후 링크 추가 예정

Phase 1의 마지막 남은 과제를 정리했다. 감시 루프가 도는 동안 toss_trader.log가 계속 쌓이기만 하는 구조라, 장시간 돌리면 로그 파일이 무한정 커질 수 있는 문제가 있었다. 이번 글에서는 이 문제를 RotatingFileHandler로 해결하고, 그걸로 Phase 1(안정성 & 설정 관리 강화)을 마무리한 과정을 적는다.

왜 로그 회전이 필요했나

자동매매 봇은 5초 주기로 감시 루프를 돌면서 매번 로그를 남긴다. 처음엔 신경 쓰지 않았는데, 하루 이틀 돌려보니 로그 파일이 생각보다 빠르게 불어나는 게 보였다. 디스크 용량을 신경 안 쓰고 방치하면 결국 문제가 될 게 뻔했다.

기준값 설계

감시 주기(5초)를 기준으로 하루 예상 로그량을 대략 역산해서 기준값을 잡았다.

  • 파일당 최대 크기: 5MB — 대략 1.5~2일치 로그 분량. 너무 자주 돌지도, 너무 뜸하게 돌지도 않는 균형점으로 판단했다.
  • 백업 보관 개수: 5개 — toss_trader.log + .1~.5, 합쳐서 최대 약 30MB로 디스크 사용량을 제한.

이 값들을 하드코딩하지 않고 config.pyLOG_MAX_BYTES, LOG_BACKUP_COUNT로 넣어서 중앙 관리하도록 했다. 이렇게 해두면 나중에 감시 주기가 바뀌거나 로그량이 달라져도 설정값만 조정하면 된다.

구현

toss_common.py에서 기존에 쓰던 logging.FileHandlerlogging.handlers.RotatingFileHandler로 교체했다. 핵심 코드는 이 정도다.

from logging.handlers import RotatingFileHandler
import config

handler = RotatingFileHandler(
    "toss_trader.log",
    maxBytes=config.LOG_MAX_BYTES,
    backupCount=config.LOG_BACKUP_COUNT,
    encoding="utf-8",
)

크기가 넘어가면 toss_trader.log.log.1.log.2 순으로 밀리고, 백업 개수를 초과하면 가장 오래된 로그부터 자동 삭제되는 표준 회전 방식이다.

검증 — 실제로 회전이 일어나는지 확인

설정값(5MB) 그대로는 회전을 눈으로 보려면 파일을 그만큼 채워야 해서 비효율적이었다. 그래서 테스트용으로 아주 작은 크기(1KB)의 회전 핸들러를 임시로 만들어서 더미 로그를 대량으로 찍어봤다.

.log, .log.1, .log.2, .log.3까지 설정한 개수만큼 딱 맞게 생성되고, 초과분은 자동으로 삭제되는 걸 확인했다. 여기서 확인하려던 건 5MB/5개라는 값 자체가 맞냐가 아니라, 회전 메커니즘 자체가 의도대로 동작하냐였다. 작은 값으로 축소해서 빠르게 재현해보는 방식이 시간을 많이 아껴줬다.

추가로 test_config.py에 로그 회전 설정값이 합리적인 범위인지 확인하는 회귀 방지 테스트도 넣었다.

최종 결과

pytest 테스트는 기존 33개에서 34개로 늘었고 전부 통과했다. 실제 스크립트(get_price.py)도 다시 돌려서 콘솔과 파일 양쪽에 로깅이 문제없이 찍히는 걸 확인했다. 로컬 환경과 프로젝트 저장소 양쪽 반영도 동기화 완료.

Phase 1 전체 돌아보기

항목상태
config.py 설정 분리
재시도/백오프 로직 공통화
로그 파일 회전(RotatingFileHandler)
pytest 단위 테스트 도입

설정 분리 → 로직 공통화 → 회귀 사고 경험 → 테스트 도입 → 안정성 강화까지, Phase 1은 하나의 완결된 스토리로 정리된다. 다음은 Phase 2(전략 모듈화)로, strategy.py를 신설해서 이동평균·RSI 같은 지표 기반 전략을 플러그인 형태로 붙이고 복수 종목 동시 감시를 지원할 예정이다.

※ 본문에 언급된 수치·파일 구조는 실제 마스킹 규칙에 따라 예시로 재구성한 것이며, 실제 계좌 정보와는 무관합니다.

“RotatingFileHandler로 로그 파일 관리하기 | 토스 개발기 #1-4”에 대한 4개의 생각

댓글 남기기