ai-coding-mines목차GitHub

같은 값을 두 경로가 각자 계산하면 갈라진다

Python · DB

증상

"화면엔 맞게 나오는데 전송/저장만 0 또는 빈값."

원인

검수 화면(GET)과 실제 전송(POST)이 각자 같은 빌더 함수를 호출했다. 한쪽만 환율 파라미터를 주입해서, GET은 수십만 원대 가격을 표시하고 POST는 Noneint(None or 0)0을 전송했다.

판별

처방

  1. 단일 소스 헬퍼로 묶는다
  2. 파생값은 한 번 계산해 넘긴다
  3. 미확정을 0으로 강등하지 마라. int(x or 0)은 "모름"을 "0"으로 둔갑시켜 조용히 전송한다
  4. 계약 테스트로 표시값 == 전송값을 못 박는다. 양쪽을 따로 검증하면 갈라짐을 못 잡는다

두 경로만이 아니라 정본과 사본도 갈라진다

소싱 맵의 krw가 마켓플레이스의 실제 등록가와 달랐다. 등록가는 마켓플레이스가 정본이고 로컬 맵은 사본이다 — 사본을 근거로 마진을 계산하면 틀린다. 갈라지는 건 코드 경로 두 개만이 아니다. "정본 시스템 vs 로컬 복사본"도 같은 형태다.

같은 맵에서 6,541건 중 618건은 usd·jpy가 모두 비어 있었다. 소싱처가 연결돼 있어도 가격이 없으면 마진 검사에서는 미연결과 같다. 필수 입력이 빠진 레코드는 링크가 없는 레코드와 동치로 취급한다.

상류 값 0이 파생값을 음수로 만든다

한 채널의 판매가 필드가 0인 상품이 있었다(임시 실패 상태 등). 이걸 그대로 가져와 다른 채널 가격을 원가 − 랜덤으로 파생하면 음수 가격이 나온다. 파생 공식은 상류가 정상값이라는 가정 위에 서 있다 — 하한 검증을 파생 직전에 건다. 0은 "값이 있다"가 아니라 "값이 없다"의 다른 표기일 수 있다.