증상
PATCH/부분 PUT에 본문을 실어 보내면 200 + SUCCESS가 오는데 값이 안 바뀐다.
파장
배치가 6주간 아무것도 바꾸지 못했다. 진행 파일의 ok:1500은 *보내려 한 문자열의 길이*였지 *저장 결과*가 아니었다. 표본 40건 중 90%가 원본 그대로였고, 그건 배치 실패가 아니라 등록 시점 원본이 그대로 남아 있는 것이었다.
변인 통제로 확정한 과정
처음엔 페이로드 구조를 의심했다. 그래서 구조 6종(단순 div / img / table / ul / 큰따옴표 포함 / 공백 보존)을 전부 시도했다. 전부 실패했다.
★ 6종이 다 같은 결과면 그건 구조 문제가 아니다. 변인을 바꿔봐야 그 변인이 원인이 아님을 확정할 수 있다.
확정된 경로
승인 완료 상태에서는 전체 PUT만 반영된다.
⚠️ 이 경로는 위험을 하나 만든다. 전체 PUT은 일시적으로 판매중단 상태를 거친다. 대량으로 돌리면 그만큼이 동시에 판매중단된다. 소량 배치로 쪼개고, 회차마다 상태 재조회로 복귀를 확인한다. 초안으로 두고 방치하는 게 진짜 사고다.
전체 PUT이 실패해도 "아무 일도 없었다"가 아니다
전체 PUT이 400으로 거부됐는데 승인요청 해제는 이미 반영돼 있었다. 거부된 항목들이 초안에 갇혀 판매중단 상태가 됐다. 쓰기 실패 ≠ 무변경. 실패 응답을 받은 뒤에도 상태를 재조회한다.
같은 배치에서 두 가지가 더 나왔다.
message가 문자열 "[]"로 와서 if msg:가 성공을 실패로 기록했다 — 앞 항목 "성공 응답이 거짓말하는 다섯 가지 방식"의 역방향이다안전망 — 초안에 남은 것을 주기적으로 건진다
30분마다 도는 작업이 초안 상태 전량을 조회해 승인을 다시 요청하고, 건수가 임계를 넘으면 경고한다. 소량 배치로 쪼개는 것은 예방이고, 이건 사고가 났을 때 판매중단이 방치되는 시간을 30분으로 묶는 장치다.