--- kind: CONCEPT slug: adapter-outbound-persistence-jpa-c17 title: SQLSTATE만으로는 구분할 수 없어 phase가 필요하다 topic: state-machines-and-ownership project: clean-architecture-backend-template status: 게시 전 sourceRevision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 rootTreeNode: concept:adapter-outbound-persistence-jpa-c17 evidenceCapturedOn: 2026-09-01 assets: - key: adapter-outbound-persistence-jpa-c17 file: ../../../final/evidence/rendered/adapter-outbound-persistence-jpa-c17.svg evidence: - ../../../final/evidence/raw/adapter-outbound-persistence-jpa-c17.txt source: - 원본 분석 절은 final/document.md#a05#L1074 이다. module: adapter-outbound-persistence-jpa --- # SQLSTATE만으로는 구분할 수 없어 phase가 필요하다 `CommitFailureClassifier`를 generic SQLSTATE translator 대신 commit call 내부에서만 적용한다. ## 본문 completion unknown 후보는 SQLSTATE 40003, connection class 08*, admin shutdown / crash / cannot-connect-now 계열, transport break cause다. ## CommitFailureClassifier 참조 위치 :::evidence key="adapter-outbound-persistence-jpa-c17" alt="코드베이스에서 CommitFailureClassifier 를 검색한 출력 18줄. 이 기록이 세는 참조가 그 출력에 그대로 보인다." caption="CommitFailureClassifier 코드베이스 검색 — 18줄 · exit 0" zoom="true" ::: ## 같은 SQLSTATE가 phase에 따라 다른 뜻이 된다 중요한 건 이 classifier를 generic SQLSTATE translator 대신 **commit call 내부에서만** 적용한다는 것이다. connection reset이 query 실행 중 발생했다면 connection unavailable일 수 있지만, provider에게 COMMIT을 보낸 후 reset됐다면 "commit됐는지 모름"이다. SQLSTATE만으로 이 둘을 구분할 수 없고 transaction phase가 필요하다. PostgreSQL classifier source도 이 이유를 직접 설명한다.