누가 무엇을 책임지는가
개발자
메서드나 요청에 트랜잭션 의도를 선언합니다. 매번 COMMIT을 직접 쓰지 않습니다.
프레임워크 / ORM
호출 전후에서 트랜잭션을 자동으로 열고 닫으며, 예외 여부로 종료 방식을 정합니다.
데이터 상태
여러 SQL이 하나의 일관성 단위로 묶여, 일부만 반영된 중간 상태를 남기지 않습니다.
개발자는 메서드나 요청 단위로 의도만 표시하고, 프레임워크는 호출 직전에 BEGIN을 열고 끝날 때 COMMIT / ROLLBACK을 결정합니다.
메서드나 요청에 트랜잭션 의도를 선언합니다. 매번 COMMIT을 직접 쓰지 않습니다.
호출 전후에서 트랜잭션을 자동으로 열고 닫으며, 예외 여부로 종료 방식을 정합니다.
여러 SQL이 하나의 일관성 단위로 묶여, 일부만 반영된 중간 상태를 남기지 않습니다.
@Transactional placeOrder(orderId, 'P001', 2)
같은 경계 안에서 주문 저장과 재고 차감이 함께 실행됩니다.
INSERT INTO orders VALUES (@order_id, 'P001', 2);
UPDATE products SET stock = stock - 2 WHERE product_id = 'P001';
주문과 재고 변경이 함께 영구 반영됩니다.
두 작업이 한꺼번에 취소되어 중간 상태가 남지 않습니다.