트랜잭션 기초: COMMIT, ROLLBACK, SAVEPOINT, 자동 커밋, 격리 수준
이체는 출금, 입금, 로그 기록 세 문장입니다. 중간에 하나라도 실패하면 세 문장 모두 없던 일이어야 합니다. 트랜잭션은 여러 문장을 하나로 묶어 COMMIT 으로 확정하고 ROLLBACK 으로 되돌리는 단위입니다. 이 레슨은 한 세션 안의 동작, DB별 자동 커밋 기본값, SAVEPOINT, 격리 수준의 기본값까지 다룹니다.
1. 왜 배우는가
계좌 이체를 UPDATE 두 번으로 구현했다고 합시다. 출금이 끝난 뒤 입금 전에 서버가 죽거나 제약 위반이 나면 돈이 사라집니다. 반대로 입금만 되고 출금이 실패하면 돈이 생깁니다. 트랜잭션은 이런 중간 상태가 다른 곳에 남지 않도록 묶음 단위로 성공 아니면 실패를 만들어 줍니다.
또 하나의 이유는 기본값입니다. MySQL 과 MSSQL 은 문장마다 자동으로 커밋하고, Oracle 은 도구가 정합니다. 기본값을 모르고 "ROLLBACK 하면 되겠지" 하고 UPDATE 를 돌렸다가 이미 커밋된 것을 확인하는 사고가 흔합니다.
이 레슨은 중급 08 DDL 과 제약 조건(CHECK 로 잔액 부족을 막습니다), 고급 08 MERGE 를 알면 이해가 쉽습니다. 실무 프로젝트 "백엔드 03 서비스와 AOP 트랜잭션" 레슨의 @Transactional 이 이 레슨의 COMMIT 과 ROLLBACK 을 대신 호출합니다. 예제는 모두 가상의 계좌 데이터입니다.