트랜잭션 관련 포스팅
- [Spring] 트랜잭션 추상화 정리
- [Spring] 트랜잭션 동기화 정리
- [Spring] 트랜잭션 AOP 동작 흐름
- [Spring] 트랜잭션 AOP 사용 시 주의점 (ft. Spring AOP self-invocation)
- [Spring] 스프링 트랜잭션 전파와 롤백
- [Spring] 트랜잭션 전파 옵션
트랜잭션 전파 옵션
- 스프링은 다양한 트랜잭션 전파 옵션을 제공한다
- 전파 옵션에 별도의 설정을 하지 않으면 REQUIRED가 기본으로 사용된다
- 실무에서는 대부분 REQUIRED 옵션을 사용하고(+아주 가끔 REQUIRES_NEW), 나머지는 거의 사용하지 않는다
- 나머지 옵션은 이렇게 있다는 사실만 알아두고, 필요할 때마다 찾아보자
1) REQUIRED (default)
- 트랜잭션이 필수라는 뜻이다
- 필수이기 때문에 없으면 만들고, 있으면 참여한다.
- 가장 많이 사용하는 기본 설정으로서 기존 트랜잭션이 없으면 생성하고, 있으면 참여한다
- 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다
- 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다
2) REQUIRES_NEW
- 항상 새로운 트랜잭션을 생성한다
- 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다
- 기존 트랜잭션 있음: 새로운 트랜잭션을 생성한다
3) SUPPORT
- 트랜잭션을 지원한다는 뜻이다
- 기존 트랜잭션이 없으면 없는대로 진행하고, 있으면 참여한다
- 기존 트랜잭션 없음: 트랜잭션 없이 진행한다
- 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다
4) NOT_SUPPORT
- 트랜잭션을 지원하지 않는다는 뜻이다
- 지원하지 않을 뿐 기존 트랜잭션이 있다고 해서 예외를 발생시키진 않는다
- 기존 트랜잭션 없음: 트랜잭션 없이 진행한다
- 기존 트랜잭션 있음: 트랜잭션 없이 진행한다(기존 트랜잭션은 보류한다)
5) MANDATORY
- 트랜잭션이 반드시 있어야 한다
- 말 그대로 트랜잭션이 의무사항이다
- 기존 트랜잭션이 없으면 예외가 발생한다
- 기존 트랜잭션 없음: IllegalTransactionStateException 예외 발생
- 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다
6) NEVER
- 트랜잭션을 사용하지 않는다는 의미이다
- 기존 트랜잭션도 허용하지 않는 강한 부정의 의미로 이해하면 된다
- 기존 트랜잭션이 있으면 예외가 발생한다
- 기존 트랜잭션 없음: 트랜잭션 없이 진행한다
- 기존 트랜잭션 있음: IllegalTransactionStateException 예외 발생
7) NESTED
- 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다
- 기존 트랜잭션 있음: 중첩 트랜잭션을 만든다
- 중첩 트랜잭션은 외부 트랜잭션의 영향을 받지만, 중첩 트랜잭션은 외부에 영향을 주지 않는다
- 중첩 트랜잭션은 롤백되어도 외부 트랜잭션은 커밋할 수 있다
- 외부 트랜잭션이 롤백되면 중첩 트랜잭션도 함께 롤백된다
- 참고
- JDBC savepoint 기능을 사용한다(DB 드라이버에서 해당 기능을 지원하는지 확인이 필요하다)
- 중첩 트랜잭션은 JPA에서 사용할 수 없다
트랜잭션 전파와 옵션
- isolation, timeout, readOnly 옵션은 트랜잭션이 처음 시작될 때만 적용되고, 트랜잭션에 참여하는 경우에는 적용되지 않는다
- 예를 들어 REQUIRED를 통한 트랜잭션 시작, REQUIRES_NEW를 통한 트랜잭션 시작 시점에만 적용된다
참고
'Spring > Spring' 카테고리의 다른 글
[Spring] @Bean 애너테이션의 name 속성과 value 속성 (0) | 2023.03.07 |
---|---|
[Spring] 빈 중복 시 해결방법(@Autowired, @Qualifier, @Primary) (0) | 2022.12.19 |
[Spring] 스프링 트랜잭션 전파와 롤백 (0) | 2022.09.07 |
[Spring] 트랜잭션 AOP 사용 시 주의점 (ft. Spring AOP self-invocation) (0) | 2022.09.01 |
[Spring] 테스트 코드를 작성할 때 @Transactional을 주의하라 (4) | 2022.08.17 |