1. @Transactional
- 트랜잭션 경계를 선언적으로 설정하는데 사용됨 (메서드나 클래스)
- public 메서드만 트랜잭션 대상으로 간주 (class-based proxy 사용 시, protected or package-private 메소드도 적용 가능)
Setting
- transactionManager
- propagation
- isolation
- readonly
- timeout
- rollbackfor
- noRollbackfor
2. Transaction with AOP
- Spring의 선언적 트랜잭션 관리는 AOP를 기반으로 함
- 이 프록시는 TransactionInterceptor를 통해 트랜잭션 작업을 수행 (시작, 커밋, 롤백)
AspectJ Mode
- AOP 프록시를 사용하므로 자기 호출에는 트랜잭션 적용 X (인스턴스가 자신의 메서드 내에서 또 다른 자신의 메서드 호출)
- AspectJ 모드를 사용하면 자기 호출에도 트랜잭션 적용됨 (바이트코드 수준에서 트랜잭션 처리)
출처