728x90
반응형
@Transactional 애노테이션의 주요 속성을 알아봅시다.
속성 | 타입 | 설명 |
value | String | 트랜잭션을 관리할 때 사용할 PlatformTransactionManager 빈의 이름을 지정합니다. 기본값 : "" |
propagation | Propagation | 트랜잭션 전파 타입을 지정합니다. 기본값 : Propagation.REQUIRED |
isolation | Isolation | 트랜잭션 격리 레벨을 지정합니다. 기본값 : ISolation.DEFAULT |
timeout | int | 트랜잭션 제한 시간을 지정합니다. 기본값은 -1로 이 경우 데이터베이스의 타임아웃 시간을 사용합니다. 초 단위 지정 |
* Propagation과 Isolation 열거 타입은 org.springframework.transaction.annotation 패키지에 정의
@Transational 애노테이션의 value 속성값이 없으면 등록된 빈 중에서 타입이 PlatformTransactionManager인 빈을 사용합니다.
@Bean
public PlatformTransactionManager transactionManager() {
DataSourceTransactionManager tm = new DataSourceTransactionManager();
tm.setDataSource(dataSource());
return tm;
}
Propagation 열거 타입에 정의되어 있는 값 목록은 다음과 같습니다. Propagation은 트랜잭션 전파와 관련되어 있습니다.
[Propagation 열거 타입의 주요 값]
값 | 설명 |
REQUIRED | 메서드를 수행하는 데 트랜잭션이 필요하다는 것을 의미한다. 현재 진행 중인 트랜잭션이 존재하면 해당 트랜잭션을 사용한다. 존재하지 않으면 새로운 트랜잭션을 생성한다. |
MANDATORY | 메서드를 수행하는 데 트랜잭션이 필요하다는 것을 의미한다. 하지만 REQUIRED와 달리 진행 중인 트랜잭션이 존재하지 않을 경우 익셉션이 발생한다. |
REQUIRES_NEW | 항상 새로운 트랜잭션을 시작한다. 진행 중인 트랜잭션이 존재하면 기존 트랜잭션을 일시 중지하고 새로운 트랜잭션을 시작한다. 새로 시작된 트랜잭션이 종료된 뒤에 기존 트랜잭션이 계속된다. |
SUPPORTS | 메서드가 트랜잭션을 필요로 하지는 않지만, 진행 중인 트랜잭션이 존재하면 트랜잭션을 사용한다는 것을 의미한다. 진행 중인 트랜잭션이 존재하지 않더라도 메서드는 정상적으로 동작한다. |
NOT_SUPPORTED | 메서드가 트랜잭션을 필요로 하지 않음을 의미한다. SUPPORTS와 달리 진행 중인 트랜잭션이 존재할 경우 메서드가 실행되는 동안 트랜잭션은 일시 중지되고 메서드 실행이 종료된 후에 트랜잭션을 계속 진행한다. |
NEVER | 메서드가 트랜잭션을 필요로 하지 않는다. 만약 진행 중인 트랜잭션이 존재하면 익셉션이 발생한다. |
NESTED | 진행 중인 트랜잭션이 존재하면 기존 트랜잭션에 중첩된 트랜잭션에서 메서드를 실행한다. 진행 중인 트랜잭션이 존재하지 않으면 REQUIRED와 동일하게 동작한다. 이 기능은 JDBC 3.0 드라이버를 사용할 때에만 적용된다.(JTA Provider가 이 기능을 지원할 경우에도 사용가능하다.) |
[Isolation 열거 타입에 정의된 값]
값 | 설명 |
DEFAULT | 기본 설정을 사용한다. |
READ_UNCOMMITTED | 다른 트랜잭션이 커밋하지 않은 데이터를 읽을 수 있다. |
READ_COMMITED | 다른 트랜잭션이 커밋한 데이터를 읽을 수 있다. |
REPEATABLE_READ | 처음에 읽어 온 데이터와 두 번째 읽어 온 데이터가 동일한 값을 갖는다. |
SERIALIZABLE | 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션을 수행할 수 없다. |
트랜잭션 격리 레벨은 동시에 DB에 접근할 때 그 접근을 어떻게 제어할지에 대한 설정을 다룹니다. 트랜잭션 격리 레벨을 SERIALIZABLE로 설정하면 동일 데이터에 100개 연결이 접근하면 한 번에 한 개의 연결만 처리합니다. 이는 마치 100명이 줄을 서서 차례대로 처리되는 것과 비슷하기 때문에 전반적인 응답 속도가 느려지는 문제가 발생할 수 있습니다.
728x90
반응형
'Spring' 카테고리의 다른 글
[Spring] Spring MVC (0) | 2024.03.20 |
---|---|
[Spring] @EnableTransactionManagement 주요속성과 트랜잭션 전파 (0) | 2024.03.06 |
[Spring] @Transactional 적용 메서드 롤백 처리 (0) | 2024.03.04 |
[Spring] @Transacational과 프록시 (1) | 2024.03.01 |
[Spring] Spring DB 트랜잭션 처리 (1) | 2024.02.28 |