인증, DTO 검증, command 생성
DB 커넥션을 오래 붙잡지 않고 빠르게 서비스로 넘긴다.
컨트롤러는 요청을 해석하고, 서비스는 함께 성공해야 하는 DB 변경만 하나의 트랜잭션으로 묶는다. 외부 부작용은 커밋 뒤로 밀어낸다.
인증, DTO 검증, command 생성
DB 커넥션을 오래 붙잡지 않고 빠르게 서비스로 넘긴다.
@Transactional 내부: 재고 차감, 주문 저장, 주문 항목 저장
읽기와 쓰기가 같은 커넥션 문맥에서 이어진다.
이후 상세 항목이 같은 주문을 참조한다.
금액 스냅샷과 상품 연결을 보존한다.
런타임 예외가 전파되면 전체 변경을 취소한다.
메일, 알림, 결제 승인, 이벤트 발행
Outbox나 after-commit hook으로 DB 락과 분리한다.
재고 차감과 주문 저장이 분리 커밋되면 안 된다.
실패를 삼키면 롤백 규칙이 실행되지 않는다.
외부 API를 안쪽에 두면 DB 잠금이 불필요하게 길어진다.