학습 목표
- @Transactional 기본 의 핵심 개념을 안다
- @Transactional 의 동작을 안다
- 여러 DB 작업을 묶어야 할 때 어떤 어노테이션을 쓰는지 안다.
1. 문제
"송금" 같은 작업 — 출금만 됐는데 입금이 실패하면? 돈이 사라진다.
2. 새 도구
@Transactional: 메서드 내 모든 DB 작업을 하나의 단위로 묶음. 하나라도 실패하면 모두 롤백.
3. 코드
@Service
public class TransferService {
@Transactional
public void transfer(int from, int to, int amount) {
accountMapper.withdraw(from, amount); // 출금
accountMapper.deposit(to, amount); // 입금
// 둘 중 하나라도 예외 발생 → 자동 롤백
// 둘 다 성공 → 커밋
}
}
4. 정리
- @Transactional = 메서드의 모든 DB 작업을 한 단위로
- 하나 실패하면 전부 롤백
- Service 계층에 붙임
5. Before / After
전 차시
"송금" 같은 작업 — 출금만 됐는데 입금이 실패하면? 돈이 사라진다.
이번 차시
여러 DB 작업을 묶어야 할 때 어떤 어노테이션을 쓰는지 안다.
학습 확인 체크리스트
- @Transactional = 메서드의 모든 DB 작업을 한 단위로
- 하나 실패하면 전부 롤백
- Service 계층에 붙임