짧은 범위
DB 변경만 묶고 계산과 외부 호출은 밖으로 뺀다.
트랜잭션은 코드가 길어지는 문제가 아니라 실패했을 때 데이터가 어떤 상태로 남는지의 문제다.
DB 변경만 묶고 계산과 외부 호출은 밖으로 뺀다.
중간 단계 실패도 하나의 rollback 기준으로 해석한다.
동시 주문, 재고 차감처럼 충돌 가능성이 있는 지점을 표시한다.
일시 실패와 비즈니스 실패를 같은 예외로 섞지 않는다.
| 냄새 | 결과 |
|---|---|
| 트랜잭션 안의 네트워크 호출 | 잠금 시간이 길어지고 타임아웃이 늘어난다. |
| 여러 repository가 각자 저장 | 일부 성공 상태가 남을 수 있다. |
| catch 후 계속 진행 | 실패를 성공 응답으로 숨길 수 있다. |
| rollback 누락 | 연결 반환과 데이터 정합성이 함께 흔들린다. |