자동 관리 예: @Transactional, ATOMIC_REQUESTS

선언은 코드에 남기고, 트랜잭션 경계 제어는 프레임워크가 맡깁니다.

개발자는 메서드나 요청 단위로 의도만 표시하고, 프레임워크는 호출 직전에 BEGIN을 열고 끝날 때 COMMIT / ROLLBACK을 결정합니다.

누가 무엇을 책임지는가

개발자

메서드나 요청에 트랜잭션 의도를 선언합니다. 매번 COMMIT을 직접 쓰지 않습니다.

프레임워크 / ORM

호출 전후에서 트랜잭션을 자동으로 열고 닫으며, 예외 여부로 종료 방식을 정합니다.

데이터 상태

여러 SQL이 하나의 일관성 단위로 묶여, 일부만 반영된 중간 상태를 남기지 않습니다.

선언 개발자는 의도만 표시
@Transactional
placeOrder(orderId, 'P001', 2)
자동 처리 호출 직전 BEGIN

같은 경계 안에서 주문 저장과 재고 차감이 함께 실행됩니다.

하나의 트랜잭션 범위 둘 다 성공하거나 둘 다 취소
1. 주문 기록
INSERT INTO orders
VALUES (@order_id, 'P001', 2);
2. 재고 갱신
UPDATE products
SET stock = stock - 2
WHERE product_id = 'P001';
정상 종료
COMMIT

주문과 재고 변경이 함께 영구 반영됩니다.

예외 발생
ROLLBACK

두 작업이 한꺼번에 취소되어 중간 상태가 남지 않습니다.

핵심은 트랜잭션의 시작과 끝이 개별 SQL이 아니라 메서드/요청 경계에 맞춰 자동으로 관리된다는 점입니다.