DEV Community

finaltype
finaltype

Posted on Originally published at finaltype.github.io

[260817~0822] 그래픽카드를 바꾼 뒤, 검증 도구들의 허점을 연달아 잡았다

하드웨어 교체 판정이 한 주 동안 두 번 뒤집혔고, 자동 검증 도구 두 개가 조용히 오류를 놓치고 있었다는 게 드러났고, 실계좌에서는 사람이 두 번 직접 개입해야 했습니다

지난 개발일지 이후로 조금 뜸했는데, 그 사이가 오히려 가장 바빴던 한 주였습니다. 월요일엔 그래픽카드를 통째로 바꿨고, 그 판정이 며칠 사이 두 번 뒤집혔습니다.

같은 주에 새로 만든 검증 도구 두 개가 그동안 못 보고 지나치던 문제들을 잇달아 드러냈습니다. 그리고 실계좌에서는 사람이 두 번 직접 개입해야 하는 일이 있었습니다.

그래픽카드를 바꾸고, 판정이 두 번 뒤집혔다

월요일에 그래픽카드를 다른 브랜드 제품으로 교체했습니다. 계산 방식도 함께 바뀌는 큰 작업이었습니다.

화요일에 새 설정으로 정식 배포했는데, 처리 속도를 높이는 별도 기법까지 같이 튜닝하고 나니 "카드 한 장이 예전 두 장 몫을 한다"는 결론이 나왔습니다. 이 참에 최근 쌓인 코드를 대규모로 리뷰해서, 이중매수를 허용할 뻔한 버그를 포함해 심각한 문제 몇 개를 함께 잡았습니다.

수요일엔 전혀 다른 걸 조사하다가 뜻밖의 자기 오류를 하나 발견했습니다. AI 모델 크기에 관한 오래된 의문을 풀려고 자체 개발한 신뢰도 검증 도구를 살펴봤는데, 이 도구 자체가 표기 스타일 차이를 오류로 잘못 판정하고 있었습니다. 바로 무효 처리하고 재발 방지 장치를 걸었습니다.

목요일 밤부터 금요일까지는 추가로 그래픽카드를 더 살지를 두고 실측 자료를 다시 조사했는데, 판정이 하루 사이 두 번이나 뒤집혔습니다. 결국 아무것도 사지 않기로 했고, 이미 주문해둔 고가 카드는 반품하기로 하고, 대신 비용이 거의 안 드는 소규모 실험으로 먼저 답을 확인하는 쪽으로 방향을 바꿨습니다.

토요일(오늘)엔 그 실험을 실제로 돌리다가 중간에 끊기는 문제를 손보는 한편, 아예 "그래픽카드를 지금보다 덜 쓰는 방향"도 검토했습니다. 매일 아침 나가는 리포트 해설을 로컬 그래픽카드 대신 이미 쓰고 있는 AI 구독 서비스로 대체할 수 있는지 시험해봤는데, 품질은 비슷하거나 오히려 나은 편이었습니다. 다만 사용량 한도를 다른 용도와 나눠 써야 한다는 문제가 남아 있어서 바로 결정하지는 못했습니다.

자동 검증 도구가 조용히 구멍을 감추고 있었다

새로 만든 리포트 수치 자동 검증 도구를 실제 운영에 배선해서 돌려봤습니다. 매일 리포트마다 절반이 넘는 종목에서 표기 오류가 나오고 있었다는 게 확인됐습니다.

과거 45일치를 되짚어보니 하루도 빠짐없이 같은 종류의 오류가 있었습니다. 이 도구를 배선하기 전까지는 이런 오류가 있는 줄도 몰랐다는 뜻이라, "돌아가고는 있는데 정작 아무것도 확인하지 않고 있었다"는 유형의 문제를 또 하나 찾은 셈이었습니다.

모델 재현성을 매일 확인하는 계기도 이틀 연속 죽었습니다. 원인은 다른 야간 작업이 그래픽카드를 쥐고 있는데도, 순간적인 판독만으로 "지금 비어 있다"고 착각하는 구조였습니다.

점유 여부를 직접 확인하는 방식으로 바꿨습니다. 계기를 새로 로드하는 대신, 야간 작업이 끝나갈 무렵 쓰던 걸 그대로 넘겨받는 방식으로 구조 자체를 바꿔서 사고 지점을 없앴습니다.

실계좌에서 사람이 두 번 개입했다

실계좌 주문 실행과 안전장치 설계(새 창)에 대한 배경은 예전 글에 정리해뒀습니다. 이번 주에는 그 안전장치들 자체가 두 번 문제를 일으켰습니다.

목요일엔 특정 종목 하나가 여러 날째 매도 계획이 서 있는데도 계속 팔리지 않는 걸 발견했습니다. 하루 매매 한도를 배분하는 규칙 때문에 소액 주문이 항상 대기열 맨 끝으로 밀리는 구조적 결함이 원인이었습니다.

규칙을 고치는 동안 당장 못 판 주문 1건은 사람이 직접 수동으로 처리했습니다. 실계좌에서 이뤄지는, 되돌릴 수 없는 거래였습니다.

금요일엔 반대 방향의 사고가 있었습니다. 누적 손실을 막는 안전장치가 장중 일시적인 하락에도 반응하도록 돼 있어서, 정상적인 매수 2건이 잘못 차단됐습니다.

판단 결과, 막힌 매수를 사람이 직접 집행하고, 안전장치가 장중 순간값이 아니라 "그날 마감 대 전날 마감" 기준으로만 반응하도록 구조를 바꿨습니다.

이 과정에서 원장에 수동 거래를 반영하는 도구에 사고가 하나 더 있었습니다. 이 도구가 "신규 매수" 케이스를 처음부터 갖고 있지 않아서, 잠깐 자산이 원장 밖에 있는 것처럼 잘못 표시됐습니다. 순서(매도 먼저, 매수 나중)를 지켜서 바로 수습했고, 검증 결과 원장과 실계좌 잔고는 정확히 일치했습니다.

그 밖에

  • 문서가 너무 방대해져서 용도별로 다섯 갈래로 재편했고, 문서 안 링크가 깨졌는지 상시로 검사하는 장치를 추가했습니다.
  • 세션이 열릴 때마다 반드시 확인해야 하는 규율을 모아두는 문서를 새로 만들고, 세션 시작 시 자동으로 불러오도록 배선했습니다.
  • 수동 주문 절차를 별도 문서로 정리해서, 실계좌에 손대는 코드 경로 여러 곳에서 그 문서를 참조하도록 걸어뒀습니다.

한 주를 돌아보면 새 기능보다는 "이미 됐다고 믿던 것"들을 다시 확인하고 고친 한 주였습니다. 그래픽카드 판정도, 검증 도구도, 안전장치도 다 한 번씩은 스스로를 배신했습니다.

다행히 그때그때 발견해서 고쳤고, 실계좌 잔고는 마지막까지 원장과 정확히 맞아떨어졌습니다. 다음 주엔 이번에 새로 설계한 소규모 실험 결과부터 확인하게 될 것 같습니다.

Top comments (0)