업무 단위 선택
주문 생성과 재고 차감처럼 모두 성공하거나 모두 실패해야 하는 작업을 묶는다.
긴 외부 API 호출은 트랜잭션 안에 넣지 않는다트랜잭션은 데이터 정합성을 지킨다는 말보다 언제 시작하고, 어떤 세션이나 query runner를 공유하며, 어떤 예외에서 rollback하고, 동시성 충돌을 어떻게 다시 시도할지가 중요하다.
주문 생성과 재고 차감처럼 모두 성공하거나 모두 실패해야 하는 작업을 묶는다.
긴 외부 API 호출은 트랜잭션 안에 넣지 않는다TypeORM QueryRunner나 Mongoose session을 모든 repository 호출에 같은 경계로 전달한다.
하나만 세션 밖이면 정합성이 깨진다모든 검증과 쓰기가 끝난 뒤에만 commit하고, 이후 부작용은 outbox 같은 별도 경로를 검토한다.
메일 발송은 DB commit과 원자적으로 묶기 어렵다예외, timeout, 검증 실패에서 rollback이 실행되고 connection/session이 해제되는지 보장한다.
finally 정리가 핵심이다deadlock, serialization failure, optimistic lock 실패를 재시도하거나 사용자 오류로 돌린다.
격리 수준에 따라 증상이 달라진다