@Transactional 정리Spring에서 트랜잭션을 선언적으로 관리할 수 있도록 해주는 어노테이션.
DB 작업 중 오류가 발생하면 자동으로 rollback, 정상 완료 시 commit을 수행한다.
public void saveData() {
TransactionStatus status = txManager.getTransaction(new DefaultTransactionDefinition());
try {
repository.insertData1();
repository.insertData2();
txManager.commit(status);
} catch(Exception e) {
txManager.rollback(status);
}
}
👉 문제:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void registerUser(User user) {
userRepository.save(user); // 사용자 저장
userRepository.saveHistory(user); // 로그 저장
// 만약 예외 발생 시? 👉 두 작업 모두 rollback
}
}
@Transactional도 바로 이 AOP 기반으로 동작한다.Client
│
▼
[AOP Proxy] ← 트랜잭션 부가 기능 적용 (@Transactional)
│
├─ 트랜잭션 시작 (begin)
│
├─ UserService.registerUser() 실행
│
├─ 정상 종료 → commit
│
└─ 예외 발생 → rollback
👉 여기서 AOP Proxy가 프록시 패턴으로 동작하며, 트랜잭션 시작/종료를 알아서 처리해준다.
개발자는 오직 비즈니스 로직만 작성하면 된다.