Quant Trading Bot Devlog

Read in English

계좌 간 자금 이동 기능 - 코드리뷰가 두 번 잡아낸 자금 불일치 위험

12월 중순으로 예정된 계좌 구조 변경에 대비해 자금 이동 기능을 만들었는데, 독립 리뷰에서 돈이 조용히 사라지거나 반대로 생겨날 수 있는 결함을 두 차례 찾아 고쳤습니다.

계좌 구조가 바뀔 날을 미리 준비했다

12월 중순에 계좌 구조가 한 번 바뀔 일이 예정돼 있습니다.

그때를 대비해, 한 계좌의 자금 일부를 다른 계좌로 옮기는 기능을 새로 만들었습니다. 평소에는 쓰지 않고 꺼둔 채로, 그날이 와서 실제로 필요할 때만 켜는 용도입니다.

자금 이동은 출금과 입금, 두 동작으로 나뉩니다. 각 동작은 멱등하게(같은 요청을 중복으로 보내도 한 번만 처리되게) 설계했고, 끝난 뒤에는 전체 자금 합계가 변하지 않았는지 검증하는 절차도 넣었습니다.

한쪽 다리만 실패하면 무슨 일이 생기나

코드를 다 쓰고 나서 독립적인 AI 리뷰를 맡겼습니다.

리뷰에서 가장 심각하다고 지적한 문제는 이것이었습니다. 출금-입금 두 동작 중 뒤쪽(입금)이 실패하면, 이미 처리된 출금만 원장에 남습니다.

그런데 이 경우 경보도 안 뜨고 기록도 안 남아서, 아무도 모르는 채로 한쪽 계좌 자금이 조용히 줄어든 상태가 되는 구조였습니다. 반복되면 실제 보유 현금과 장부상 기준선이 영구적으로 틀어질 수 있는 결함입니다.

고치는 방법은, 입금이 실패하면 그 이동 건 전체를 즉시 차단 상태로 걸어 경보를 띄우고, 같은 건으로 다시 시도하지 않는 한 그 계좌의 다른 거래도 막아버리는 쪽으로 바꿨습니다. 조용히 넘어가는 대신 눈에 보이게 멈추는 설계입니다.

재시도할 때 금액이 달라지면

수선한 코드를 다시 리뷰에 올렸더니, 또 하나를 찾아냈습니다.

중단된 이동 건을 나중에 이어받아 처리할 때, 처음과 다른 금액을 입력해도 그대로 통과되는 구조였습니다. 완화해둔 안전장치와 사후 검증 로직이 전부 "입력한 금액"을 기준으로 돌아가고 있었기 때문입니다.

이 틈을 쓰면 근거 없이 자금이 더 생겨나는 결과가 나올 수 있었습니다. 실제로 리뷰어가 금액을 바꿔 넣는 시험을 돌려 재현까지 확인했습니다.

수선은 간단했습니다. 이어받기 시점에 저장된 원래 요청 금액과 새로 입력한 금액을 대조해서, 아주 작은 오차 이상 다르거나 원래 기록을 읽을 수 없으면 그대로 거부하도록 했습니다.

두 번째 수선까지 마치고서야 병합 승인이 났습니다. 기능은 아직 꺼둔 상태고, 실제로 켜는 건 12월 계좌 변경 시점에 가서입니다.

그 외: 보고서 단위 표기 실험은 한 번 더 설계를 바꿨다

별개로, 보고서에 쓰는 어떤 단위 표기 방식을 바꿔보는 실험을 진행 중이었습니다.

사전에 정해둔 기준으로 비교해본 결과, 이번 방식은 효과는 뚜렷했지만 통과 기준에는 못 미쳐 그대로 채택하지 않기로 했습니다. 대신 표기 위치를 바꾸는 다른 방식으로 다시 설계해, 월말에 한 번 더 시험해볼 예정입니다.

#퀀트 #자동매매 #코드리뷰 #안전장치 #개발일지