DB 는 그 자체로 완벽한 트랜잭션을 지원한다.
하나의 SQL 명령을 처리하는 경우는 DB 가 트랜잭션을 보장한다고 믿을 수 있다.
하지만!
여러개 SQL 이 하나의 트랜잭션으로 취급해야 하는 경우
ex. 계좌이체, 여러 사용자에 대한 레벨 수정 작업
계좌 이체
출금 잔고는 이체 금액만큼 줄어들고, 입금 계좌에는 이체 금액만큼 증가되어야 한다.
이체 프로그램은 DB 에 두번 요청 전송
출금 계좌 잔고 수정과 입금 계좌 레코드 잔고를 수정하는 두개의 SQL 이 필요하다.
첫번째 SQL 은 성공하지만 두번째 SQL 이 성공하기 전에 작업이 생겨서 중단되는 경우
두가지 작업이 하나의 트랜잭션이 되려면?
두번째 SQL 이 성공적으로 DB 에 수행되기 전에 문제가 발생할 경우에는 앞에서 처리한 SQL 작업도 취소한다 →
트랜잭션 롤백
여러개의 SQL 을 하나의 트랜잭션으로 처리하는 경우 SQL 수행 작업이 다 성공적으로 마무리됐다고 DB 에 알려줘서 작업을 확정시킨다 →
트랜잭션 커밋
JDBC 트랜잭션의 트랜잭션 경계설정
트랜잭션 경계
트랜잭션이 시작하는 지점과 끝나는 지점(위치)