--- kind: CONCEPT slug: messaging-schema-json-c05 title: 여섯 갈래 원인이 하나의 코드로 접힌다 topic: delivery-and-settlement-models project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:messaging-schema-json-c05 evidenceCapturedOn: 2026-09-01 assets: - key: messaging-schema-json-c05 file: ../../../final/evidence/rendered/messaging-schema-json-c05.svg evidence: - ../../../final/evidence/raw/messaging-schema-json-c05.txt source: - 원본 분석 절은 analysis/messaging/messaging-schema-json.md#L246 이다. module: messaging-schema-json --- # 여섯 갈래 원인이 하나의 코드로 접힌다 전부 retryable = false다 — PERMANENT_BUSINESS와 DESERIALIZATION 카테고리다. 같은 바이트를 다시 디코딩해도 같은 결과이므로 일관적이다. ## 관계 - **실패 코드는 운영자의 다음 행동이 갈리는 지점마다 나눈다** 같은 분석 리프에서 끌어낸 규칙이다. ## 본문 실패는 전부 `retryable = false`다 — `PERMANENT_BUSINESS`와 `DESERIALIZATION` 카테고리다. 같은 바이트를 다시 디코딩해도 같은 결과이므로 일관적이다. ## 이 기록이 다루는 범위 :::evidence key="messaging-schema-json-c05" alt="코드베이스에서 파일 목록을 만든 출력 1줄. 이 기록이 다루는 범위가 그 목록이다." caption="코드베이스 파일 목록 — 1줄 · exit 0" zoom="true" ::: ## 진단 손실 하나 파서 강화가 잡는 여섯 가지(깊이, 중복 키, trailing token, 미지 필드, 문서 길이, 토큰 길이)가 전부 하나의 코드 `JSON_DECODE_FAILED`로 접힌다. 운영자는 "JSON 디코딩 실패"만 보고 원인 여섯 갈래를 구분할 수 없다. ## 원인은 붙지만 분류에는 남지 않는다 원인 예외가 `cause`로 붙지만 `FailureDescriptor`는 `exceptionType`을 `Optional.empty()`로 둔다(`MessageSerializationException`의 3인자 생성자 경로). §17 참조.