2.4 KiB
2.4 KiB
id, kind, slug, title, topic, topicName, project, status, studio, decisionStatus, source, sourceRevision
| id | kind | slug | title | topic | topicName | project | status | studio | decisionStatus | source | sourceRevision | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PROJECT_DECISION | record-the-evidence-first-choose-the-conclusion-later | 증거를 먼저 기록하고 결론은 나중에 고른다 | commit-ambiguity-as-a-result | 커밋 모호성 — 「모른다」를 결과로 유지하기 | clean-architecture-backend-template | 게시 전 | ADOPTED |
|
21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 |
증거를 먼저 기록하고 결론은 나중에 고른다
실패를 관측한 즉시 성공·실패·재시도로 접지 않는다. 먼저 전송·커밋 단계를 증거로 남기고, 완료 판정은 그 증거를 입력으로 별도 단계에서 정한다.
근거
- 발행 증거와 완료 판정이 따로 있는 이유 증거와 결론이 답하는 질문이 다르다.
- 트랜잭션 결과 대수 — 다섯 변형이 각각 답하는 질문 완료를 다섯 상태로 유지하는 타입 모델이 이미 있다.
- completion-unknown 은 자동으로도 수동으로도 재시도하지 않는다 증거가 모호할 때 결론을 강하게 만들지 않는 후속 결정이다.
결정문
전송·커밋 진행 정도를 먼저 증거 값으로 기록한다. 성공·롤백·completion-unknown·재시도 가능 여부 같은 결론은 그 증거와 operation semantics를 읽는 후속 판정에서 정한다.
판단 이유
예외 타입 하나에는 “아무것도 전송되지 않았다”와 “요청은 전달됐지만 결과 응답을 잃었다”가 함께 들어갈 수 있다. 이 둘을 같은 실패로 접으면 재시도 정책이 관측 사실보다 강한 주장을 하게 된다.
증거를 먼저 기록하면 후속 정책이 바뀌어도 최초 관측은 보존된다. 특히 completion-unknown을 retryable로 동시에 표현하지 못하게 만든 생성자 제약은 이 순서를 코드에서 강제한다.
영향
감수하는 것 : 상태 타입과 판정 단계가 늘어나고 호출자는 단일 boolean보다 많은 경우를 처리해야 한다.
얻는 것 : 실패 원인과 완료 상태를 섞지 않으며, 결과를 모르는 작업을 자동 재실행하는 경로를 구조적으로 줄인다.
얻는 것 : 후속 reconciliation이 최초 관측을 다시 해석할 수 있다.