철회 후 판단
철회(Aborted)는 끝이 아니라, 원상복구가 끝난 뒤 다음 행동을 고르는 지점입니다.
ROLLBACK은 실패를 성공으로 바꾸지 않습니다. 먼저 변경을 모두 되돌려 일관성을 회복한 다음, 실패 원인이 다시 시도할 문제인지 아닌지를 판단합니다.
실패 상태
더 이상 SQL을 진행할 수 없음
오류가 난 순간 트랜잭션은 멈추고, 남은 선택지는 ROLLBACK뿐입니다.
→
ROLLBACK
Undo 로그를 역순으로 적용
실패한 변경을 하나씩 회수해 트랜잭션 시작 전 상태로 되돌립니다.
→
철회 상태
데이터는 원점으로 복원됨
이제 트랜잭션 내부 변경은 사라졌고, 남는 질문은 "같은 요청을 다시 해도 되는가?"입니다.
무엇이 바뀜
부분 변경이 모두 취소되어 일관된 시작 상태로 돌아갑니다.
왜 중요함
다시 시도하더라도 깨진 중간 상태 위에서 이어가지 않습니다.
재시도
원인이 일시적이면 같은 작업을 다시 시도
경합이나 순간적 자원 문제라면 다음 실행에서는 성공할 수 있습니다.
예시
교착 상태 희생자 선택, 락 타임아웃
판단 기준
데이터 규칙은 맞지만, 이번 실행 타이밍이 나빴는가?
포기
원인이 영구적이면 오류를 반환하고 종료
입력이나 비즈니스 규칙 자체가 잘못되었다면 다시 실행해도 같은 실패가 반복됩니다.
예시
제약 조건 위반, 비즈니스 규칙 위반
판단 기준
같은 데이터를 그대로 보내면 결과가 달라질 여지가 없는가?
핵심: 철회는 데이터 복구 완료를 뜻하고, 그 다음 결정은 실패 원인의 성격이 정합니다. 즉, ROLLBACK과 재시도 여부 판단은 같은 단계가 아닙니다.