스프링에서 트랜잭션을 관리하는 방법은 크게 세 가지로 나누어진다. 애너테이션 @Transactional을 사용하는 방법, AOP를 이용하여 트랜잭션을 관리하는 방법, 프로그래밍으로 직접 제어하는 방법 등이다. 애너테이션 @Transactional의 경우 기본 동작을 재정의하는 데 사용할 수 있는 여러 애트리뷰트를 제공하고 있다.
propagation
트랜잭션의 전파를 의미하는 propagation은 값으로 Propagation enum에 정의된 REQUIRED, SUPPORTS, MANDATORY, REQUIRES_NEW, NOT_SUPPORTED, NEVER, NESTED 등을 입력받을 수 있다. 이 값들이 의미하는 바는 다음과 같다.
전파유형 | 설명 |
REQUIRED | 이미 존재하는 트랜잭션을 지원. 트랜잭션이 없으면 새 트랜잭션을 시작. |
SUPPORTS | 이미 존재하는 트랜잭션을 지원. 트랜잭션이 없으면 비트랜잭션으로 실행. |
MANDATORY | 이미 존재하는 트랜잭션을 지원. 진행 중인 트랜잭션이 없으면 예외를 던짐. |
REQUIRES_NEW | 항상 새로운 트랜잭션을 시작. 진행 중인 트랜잭션이 있다면 해당 트랜잭션은 일시적으로 중단. |
NOT_SUPPORTED | 진행 중인 트랜잭션과 함께 실행 불가. 항상 비트랜잭션으로 실행하고 기존 트랜잭션은 일시 중단. |
NEVER | 진행 중인 트랜잭션이 있더라도 항상 비트랜잭션으로 실행. 진행 중인 트랜잭션이 있는 경우 예외 던짐. |
NESTED | 진행 중인 트랜잭션이 있는 경우 중첩으로 실행. 진행중인 것이 없으면 REQUIRES_NEW와 동일. |
isolation
격리수준을 의미하는 isolation은 Isolation enum에 정의된 DEFAULT, READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE 등을 값으로 받을 수 있다. DEFAULT는 사용하고 있는 DBMS에서 갖고 있는 기본적인 격리 수준을 의미하며, 나머지는 일반적으로 이해하고 있는 격리 수준에서 벗어나지 않는다.
timeout
timeout은 트랜잭션을 실행하는데 허용되는 최대 시간을 의미하는 것으로 지정된 시간보다 오랜 시간동안 트랜잭션이 유지되는 경우 롤백된다. DEFAULT 값은 -1로 타임아웃을 적용하지 않는 것을 의미한다.
readOnly
트랜잭션이 읽기 전용으로 작동할 것인지 쓰기도 가능한지를 설정한다. 값으로 true, false의 boolean 타입을 갖는다.
rollbackFor
트랜잭션을 롤백하는 예외 클래스를 값으로 받으며, 트랜잭션 내에서 해당 exception이 발생하는 경우 rollback 된다.
rollbackForClassName
위와 동일하게 작동하는 설정이지만 값으로 클래스 이름을 받는다.
noRollbackFor
위의 rollbackFor와 반대로 트랜잭션이 롤백되지 않는 예외 클래스를 의미한다.
norollbackForClassName
norollbackFor와 동일한 역할을 하지만 클래스 이름을 값으로 받는다.
value
지정된 트랜잭션의 한정자(qualifier) 값을 의미하며, 트랜잭션 매니저가 여러 개 존재하는 경우 어떤 트랜잭션 매니저를 사용할 것인지 나타낸다.
@Transactional을 선언하고 설정 값을 선택하지 않는 경우 기본적으로 propagation은 REQUIRED, isolation은 DEFAULT, timeout은 DEFAULT, readOnly는 false가 되어 read-wrtite를 모두 허용한다.
참고자료
전문가를 위한 스프링 5
'Java > Spring' 카테고리의 다른 글
Spring AOP: Aspect Oriented Programming with Spring (0) | 2020.07.15 |
---|---|
Custom Constraint (0) | 2020.07.07 |
Spring StopWatch (0) | 2020.04.28 |
Spring에서 Annotation으로 정의된 Validation 확인 (0) | 2020.04.12 |
Spring 프로젝트 생성시 maven CoreException issue (4) | 2018.09.16 |