[java] MyBatis에서 트랜잭션 격리 수준 설정하기
트랜잭션 격리 수준은 데이터베이스에서 동시에 실행되는 여러 트랜잭션 간에 데이터의 일관성과 격리 정도를 관리하는 중요한 개념입니다. MyBatis는 자체적으로 트랜잭션을 관리하고, 트랜잭션 격리 수준을 설정할 수 있는 다양한 옵션을 제공합니다.
기본적인 트랜잭션 격리 수준 설정
MyBatis에서 트랜잭션 격리 수준을 설정하려면 TransactionIsolationLevel
열거형 상수 중 하나를 사용해야 합니다. 다음은 MyBatis에서 지원하는 트랜잭션 격리 수준 상수들입니다.
NONE
: 트랜잭션 격리 수준을 설정하지 않습니다.READ_UNCOMMITTED
: 커밋되지 않은 데이터를 다른 트랜잭션에서 읽을 수 있습니다.READ_COMMITTED
: 커밋된 데이터만 다른 트랜잭션에서 읽을 수 있습니다. (기본값)REPEATABLE_READ
: 처음에 읽은 데이터를 트랜잭션이 종료될 때까지 일관된 상태로 유지합니다.SERIALIZABLE
: 동시에 실행되는 트랜잭션이 순차적으로 실행되는 것처럼 격리합니다.
아래는 MyBatis에서 트랜잭션 격리 수준을 설정하는 예제 코드입니다.
import org.apache.ibatis.session.TransactionIsolationLevel;
// 트랜잭션 격리 수준을 설정하는 예제
TransactionIsolationLevel isolationLevel = TransactionIsolationLevel.REPEATABLE_READ;
TransactionDefinition definition = new DefaultTransactionDefinition();
definition.setIsolationLevel(isolationLevel);
// 트랜잭션 매니저를 사용하여 트랜잭션을 시작합니다.
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
def.setIsolationLevel(isolationLevel);
TransactionStatus status = transactionManager.getTransaction(def);
// 트랜잭션 처리 로직...
// 트랜잭션을 커밋하거나 롤백합니다.
if (success) {
transactionManager.commit(status);
} else {
transactionManager.rollback(status);
}