모의투자 단계에서 배운 것들 — 실전 전 반드시 거쳐야 하는 이유
"모의투자는 형식적인 절차"라는 착각
자동매매 시스템을 만들다 보면 모의투자(페이퍼 트레이딩) 단계를 그냥 빨리 통과해야 할 형식적인 절차로 여기기 쉽다. "어차피 코드는 다 짰고, 로직도 맞는 것 같은데 굳이 오래 돌려봐야 하나"라는 생각이 드는 순간이 온다. 나도 그랬다.
그런데 실제로 모의투자 단계를 충분히 돌려보고 나서 생각이 완전히 바뀌었다. 이 단계에서 걸러지는 문제들은 코드 리뷰만으로는 잘 드러나지 않는 유형이 많았기 때문이다.
코드 리뷰로는 안 보이던 문제들
정적으로 코드를 읽을 때는 "논리적으로 맞다"고 느껴지는 코드가, 실제 시세 데이터를 흘려보내면 다르게 동작하는 경우가 있었다. 대표적으로 이런 유형들이다.
- 경계 조건에서만 터지는 버그: 특정 조건이 동시에 겹칠 때만 중복 주문 신호가 발생하는 로직. 평상시엔 문제없이 동작하다가, 특정 타이밍에만 문제가 드러났다.
- 데이터 끊김에 대한 방어 부재: 시세 데이터 수신이 잠시 끊겼을 때, 시스템이 "마지막으로 받은 값"을 실제 현재 시세처럼 계속 사용하던 문제. 코드만 보면 "값이 있으니 문제없어 보이는" 부분이었다.
- 권한 경계가 뚫려 있던 코드 경로: 정상적인 흐름에서는 반드시 사람 승인을 거치지만, 특정 예외 처리 분기에서는 승인 없이 주문이 실행될 수 있는 경로가 남아있었다.
이 세 가지 모두 "코드를 읽었을 때는 이상해 보이지 않는" 문제였다는 공통점이 있다. 실제로 시스템을 돌리면서 다양한 시나리오(정상 시세, 급변동, 데이터 끊김, 동시다발적 신호 등)를 흘려보내야만 드러나는 유형이었다.
왜 "돈이 안 걸린 연습"이 아니라 "마지막 방어선"인가
모의투자를 그냥 연습 삼아 돌리는 단계로 생각하면, 시간 낭비처럼 느껴질 수 있다. 하지만 다르게 보면 모의투자는 실전에서 발생했을 때 가장 비싼 대가를 치를 문제를 무료로 미리 겪어보는 유일한 기회다.
특히 자동화된 시스템은 사람이 실시간으로 지켜보고 있지 않아도 계속 동작한다는 특성이 있다. 사람이 개입할 틈 없이 문제가 반복적으로 발생할 수 있다는 뜻이다. 위에서 언급한 세 가지 문제 중 어느 하나라도 실전에서 처음 발견됐다면, 한 번의 실수가 아니라 감지될 때까지 반복되는 사고로 번졌을 가능성이 크다.
모의투자 단계에서 확인한 것들 (체크리스트 성격)
이번 단계를 거치면서 최소한 아래 항목들은 실전 전환 전에 확인해야 한다는 걸 배웠다. 아직 완성된 체크리스트는 아니지만, 지금까지의 경험을 정리하면 다음과 같다.
- 중복 주문·과다 주문이 발생할 수 있는 경계 조건이 있는가
- 데이터 수신 장애 시 시스템이 "죽은 데이터"를 살아있는 것처럼 취급하지 않는가
- 모든 코드 경로에서 사람 승인 없이 실행되는 경우가 없는가 (예외 처리 분기 포함)
- 급변동 상황(시세 급등락)에서 로직이 의도대로 동작하는가
- 시스템 재시작·오류 복구 이후에도 상태가 꼬이지 않는가
이 항목들은 한 번 통과했다고 끝나는 게 아니라, 로직이 바뀔 때마다 다시 확인해야 하는 성격의 것들이라고 판단하고 있다.
언제까지 모의투자를 돌려야 하는가
"충분히 돌렸다"는 기준을 정하는 것도 쉽지 않았다. 우리가 잡은 기준은 "정상 시나리오뿐 아니라 의도적으로 이상 상황(데이터 끊김, 급변동, 동시 신호 등)을 만들어서도 문제가 없는가"였다. 정상 흐름만 여러 번 돌리는 건 같은 결과를 반복 확인하는 것에 가깝고, 실제로 문제를 드러내는 건 의도적으로 만든 예외 상황이었다.
오늘의 정리
- 모의투자 단계에서 드러나는 문제는 코드 리뷰만으로는 잘 보이지 않는 유형이 많다.
- 모의투자는 "돈이 안 걸린 연습"이 아니라 "실전 대가를 치르기 전 마지막 방어선"이다.
- 정상 시나리오뿐 아니라 의도적인 이상 상황(데이터 끊김, 급변동 등)까지 돌려봐야 문제가 드러난다.
다음 글에서는 규제와 안전장치가 실제로 왜 필요한지, 그리고 그 절차들이 귀찮게 느껴짐에도 왜 유지해야 하는지를 더 풀어본다.