Transaction
Atomicity 원자성
Consistency 일관성
Isolation 독립성(격리성)
Durability 영속성(지속성)
선언형 방식 트랜잭션 적용
@Service
@Transactional
public class MemberService {
...
}
@Service
@Transactional
public class MemberService {
...
@Transactional(readOnly = true) // 읽기전용 트랜잭션
public Member findMember(long memberId) {
return findVerifiedMember(memberId)l
}
...
}
@Configuration
@RequiredArgsConstructor
public class TxConfig {
private final TransactionManager transactionManager;
@Bean
public TransactionInterceptor txAdvice() {
NameMatchTransactionAttributeSource txAttributeSource =
new NameMatchTransactionAttributeSource();
RuleBasedTransactionAttribute txAttribute =
new RuleBasedTransactionAttribute();
txAttribute.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
RuleBasedTransactionAttribute txFindAttribute =
new RuleBasedTransactionAttribute();
txFindAttribute.setPropagationBehavior(
TransactionDefinition.PROPAGATION_REQUIRED);
txFindAttribute.setReadOnly(true);
Map<String, TransactionAttribute> txMethods = new HashMap<>();
txMethods.put("find*", txFindAttribute);
txMethods.put("*", txAttribute);
txAttributeSource.setNameMap(txMethods);
return new TransactionInterceptor(transactionManager, txAttributeSource);
}
@Bean
public Advisor txAdvisor() {
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
pointcut.setExpression("execution(* com.codestates.coffee.service." +
"CoffeeService.*(..))");
return new DefaultPointcutAdvisor(pointcut, txAdvice());
}
}
Transaction 설정
조회 메서드에 @Transaction(readOnly = true)
여러 작업이 하나의 트랜잭션으로 묶이는 경우
트랜잭션 전파(Transaction Propagation) : 트랜잭션의 경계에서 진행 중인 트랜잭션이 존재할 때 또는 존재하지 않을 때, 어떻게 동작할 것인지 결정하는 방식
트랜잭션 격리 레벨(Isolation Level) : 특정 트랜잭션이 다른 트랜잭션에서 변경/조회하는 데이터를 볼 수 있도록 허용할지 말지 결정하는 방식