2024년 초, 저는 처음으로 Jesse 프레임워크 위에 전략 하나를 올리고 웹훅 연결을 완료했을 때 묘한 안도감을 느꼈습니다. ‘이제 시스템이 알아서 하겠지’라는 생각이었죠. 그 생각이 얼마나 순진했는지 깨닫는 데 딱 3주가 걸렸습니다. 포지션이 예상과 반대로 터지던 새벽 2시, 슬랙 알림을 멍하니 보던 기억이 아직도 선명합니다. 1년을 넘긴 지금, 저는 시스템을 만든 사람이 아니라 시스템한테 배운 사람에 가깝다고 생각합니다. 이번 회고는 수익 자랑이 아닌, 제가 직접 부딪힌 실수와 재설계의 기록입니다.
첫 번째 고비 — 전략 로직보다 인프라가 먼저 무너졌습니다
초기 6개월 동안 제가 가장 많은 시간을 쏟은 것은 놀랍게도 매매 전략이 아니라 인프라 안정성이었습니다. Cafe24 VPS(Ubuntu) 위에 Jesse와 Flask API를 올리고 TradingView 웹훅을 연결하는 구조 자체는 생각보다 금방 완성됐습니다. 문제는 운영 중 발생하는 예외 상황이었습니다. 첫 번째 함정은 웹훅 타임아웃이었습니다. TradingView가 시그널을 보낼 때 Flask 서버가 5초 이내에 응답하지 못하면 재발송이 발생하고, 그 결과 동일 포지션에 이중 진입이 생겼습니다. 제가 설정한 포지션 사이즈의 두 배가 한순간에 열렸고, 당연히 리스크도 두 배였습니다. 해결책은 단순했습니다. Flask 엔드포인트에 signal_id 기반 중복 처리 로직을 추가하고, Redis 없이도 동작하도록 로컬 딕셔너리에 최근 10개 시그널 해시를 캐싱하는 방식으로 구현했습니다. 두 번째 함정은 VPS 재부팅 후 자동 복구 미설정이었습니다. 한 번은 VPS가 새벽에 패치 재부팅되면서 Jesse 프로세스가 죽었는데, 아침까지 오픈 포지션이 청산 없이 방치됐습니다. 그 이후 systemd 서비스로 Jesse와 Flask를 등록하고, 프로세스 생존 여부를 5분마다 확인하는 헬스체크 스크립트를 crontab에 추가했습니다. 인프라는 전략보다 덜 섹시하지만, 인프라가 흔들리면 전략은 아무 의미가 없습니다.
중간 위기 — 전략을 너무 자주 바꿨더니 기준선이 사라졌습니다
인프라를 안정시킨 뒤 저는 전략 최적화에 집중했습니다. 4시간봉 기준으로 BTC, ETH, SOL 페어에 각기 다른 파라미터를 적용하고, 백테스트 결과가 조금이라도 더 좋아 보이는 값으로 계속 교체했습니다. 당시에는 개선하고 있다고 생각했지만, 3개월 후 로그를 돌아보니 실제로는 커브 피팅을 반복하고 있었습니다. 가장 큰 실수는 라이브 운영 중 파라미터를 변경할 때 변경 이력을 체계적으로 남기지 않았다는 점입니다. 어떤 설정에서 어떤 결과가 나왔는지 재현이 불가능해졌고, 결국 ‘이게 원래 전략인가, 수정된 전략인가’를 구분할 수 없는 상태가 됐습니다. 해결 방법으로 저는 전략 설정 파일을 Git으로 버전 관리하기 시작했습니다. 커밋 메시지에 변경 이유와 날짜를 반드시 기록하고, 라이브 전략과 실험 전략을 브랜치로 분리했습니다. 또한 전략을 변경하기 전 최소 2주 이상 현행 설정으로 충분한 거래 샘플을 확보하는 규칙을 스스로에게 강제했습니다. 자동매매의 역설은, 사람이 개입할수록 시스템의 장점이 희석된다는 점입니다. 저는 이 사실을 몸으로 배웠습니다.
지금의 운영 방식 — 개입 최소화와 관찰 최대화
현재 저의 운영 철학은 간단합니다. ‘개입하고 싶을 때 오히려 아무것도 하지 않는다’입니다. 이 결론에 도달하기까지 꽤 많은 시행착오가 있었습니다. 지금 저는 매일 아침 10분간 운영 대시보드를 확인하는 것 외에 실시간으로 포지션을 들여다보지 않습니다. 슬랙 알림은 포지션 진입/청산/에러 세 가지만 받습니다. 포지션이 열려 있는 동안 차트를 보면 반드시 개입하고 싶어지기 때문에, 구조적으로 볼 수 없게 만든 것입니다. Make.com 파이프라인으로 일일 로그를 자동 수집하고, Claude API로 간단한 요약을 생성해 WordPress 블로그에 발행하는 것도 이 관찰 루틴의 일부입니다. 데이터를 직접 해석하는 시간을 줄이고, 패턴을 주간 단위로만 검토합니다. 또 한 가지 바뀐 점은 코인 페어 선택 기준입니다. 초기에는 변동성이 큰 알트코인에 욕심을 냈지만, 지금은 BTC, ETH, SOL 세 페어만 운영합니다. 유동성이 충분하고 스프레드가 좁으며, 이상 거래 시 거래소 측 이슈가 적다는 점이 이유입니다. 수익 기회를 좁힌 대신 예측 가능성을 높인 선택이었고, 지금 이 방향이 맞다고 검증 중입니다.
💬 운영자 한마디
1년을 운영하면서 제가 가장 많이 들은 질문은 ‘수익률이 얼마냐’입니다. 저는 솔직히 그 숫자보다 ‘시스템이 예상대로 작동하고 있는가’를 더 중요하게 봅니다. 아직 검증 중인 부분이 많고, 제가 틀릴 수 있다는 전제를 항상 유지합니다. 지금도 배우는 중입니다.
— J_River · autoprofit 운영자
✅ 이번 주 체크리스트
- 웹훅 엔드포인트에 시그널 중복 처리 로직(해시 캐싱 등)이 있는지 확인한다
- Jesse/Flask 프로세스를 systemd 서비스로 등록하고 재부팅 후 자동 복구 여부를 테스트한다
- 전략 설정 파일을 Git으로 버전 관리하고 변경 이유를 커밋 메시지에 남긴다
- 라이브 전략 변경 전 최소 2주 이상 현행 설정의 샘플을 확보하는 규칙을 정한다
- 슬랙/텔레그램 알림을 진입·청산·에러 3가지로 줄이고 실시간 차트 확인 습관을 끊는다
- 운영 로그를 주간 단위로 정기 검토하는 루틴을 캘린더에 고정한다
- 운영 코인 페어를 유동성·스프레드 기준으로 재점검하고 불필요한 알트 페어를 정리한다
1년의 운영은 시스템을 만든 경험이 아니라 시스템과 함께 성장한 경험에 가깝습니다. 다음 1년도 틀리고, 수정하고, 다시 관찰하는 과정이 될 것입니다. 그 과정을 여기서 계속 공유하겠습니다.
※ 본 콘텐츠는 운영자 개인의 경험과 연구를 바탕으로 한 정보 제공 목적이며, 특정 종목에 대한 투자 권유나 매매 시그널이 아닙니다. 암호화폐 및 자동매매는 원금 손실 가능성이 있는 고위험 활동이며, 모든 투자 판단과 그 결과에 대한 책임은 투자자 본인에게 있습니다.