기술 · 실용 가이드
JSONDecodeError line 1 column 1: parser를 고치기 전에 바이트를 확인하세요
문자 0은 실패 위치일 뿐 원인이 아닙니다. 상태, 미디어 유형, 본문 길이와 안전한 지문을 보존하고 빈 본문, HTML, 디코딩, 잘림을 분류해 생산자나 호출자 계약을 고친 뒤 유효·빈·무효 fixture로 검증하세요.

문자 0은 실패 위치일 뿐 원인이 아닙니다. 상태, 미디어 유형, 본문 길이와 안전한 지문을 보존하고 빈 본문, HTML, 디코딩, 잘림을 분류해 생산자나 호출자 계약을 고친 뒤 유효·빈·무효 fixture로 검증하세요.
JSON 텍스트는 직렬화된 값 하나를 포함하며 빈 본문이나 공백만 있는 본문은 JSON이 아닙니다. Python은 입력이 유효한 JSON 문서가 아니면 JSONDecodeError를 냅니다.
1. parse 전에 응답 봉투를 고정하세요
method, 마스킹된 URL, 상태, redirect, Content-Type, Content-Encoding, 선언 길이, 수신 바이트 수, runtime과 정확한 예외를 기록합니다. 정책이 허용해도 본문 hash와 짧은 마스킹 prefix만 남기고 token, Cookie, 개인 데이터 전체를 기록하지 않습니다.
본문은 한 번만 읽고 없음, 0바이트, 공백, HTML, JSON 같은 텍스트, decode 불가 바이트를 구분합니다. 같은 소비된 stream에 json(), text(), json()을 거듭 호출해 두 번째 실패를 생산자 오류로 오해하지 않습니다.
2. 문자 0에서 무엇이 시작하는지 분류하세요
위치 0이 비거나 공백이면 no-body 계약, 조기 종료, payload 손실을 봅니다. 첫 바이트가 작은부등호면 login, proxy, error page HTML일 수 있고 다른 prefix는 잘못된 endpoint, BOM, encoding 또는 compression을 드러냅니다.
실제 JSON이 시작한 뒤의 syntax error와 character-zero failure를 분리합니다. line, column, position은 위치로 기록하되 원인으로 단정하지 않습니다. trailing data, 잘림, 여러 JSON 값 연결은 다른 수정이 필요합니다.
3. 생산자와 변환 경로를 추적하세요
application handler에서 middleware, proxy, cache, decompressor, client library까지 응답을 추적합니다. secret을 복사하지 않고 request ID와 시간을 맞춰 상태, media type, encoding, body를 설정한 계층과 redirect 변경을 확인합니다.
file이면 정확한 path, 바이트 길이, encoding과 atomic write 경계를 증명합니다. 새 빈 file, 오래된 temp, 동시 partial write는 parser 완화로 고쳐지지 않습니다. 다음 writer가 덮기 전에 실패 바이트를 보존합니다.
4. 증상이 아니라 계약을 수정하세요
성공 응답에 표현이 없는 계약이면 그 분기를 명시하고 parse하지 않습니다. JSON을 약속하면 생산자가 유효 값과 올바른 Content-Type을 보내고, HTML이면 인증·proxy·routing을, encoding과 decompress는 책임 계층에서 수정합니다.
정확한 decoder 예외만 잡아 안전한 context를 붙이거나 typed contract error로 바꿉니다. 빈 object 반환, 모든 syntax error retry, 임의 문자 제거는 데이터 손실, 중복 부작용이나 상류 장애를 숨깁니다.
5. 세 fixture와 관측 가능한 실패를 검증하세요
valid JSON, 의도한 no-body, invalid 또는 wrong-media response를 시험합니다. valid는 기대형으로 parse되고 empty는 문서화된 no-content 분기로 가며 invalid는 typed 진단과 안전한 증거로 실패해야 합니다.
대표 트래픽에서 parse error 비율, body 길이 분포, status/media mismatch, redirect와 retry를 확인합니다. 생산자와 소비자가 합의하고 실패가 보이며 민감 본문을 기록하지 않고 rollback이 있으면 성공입니다.
