트랜잭션 격리 수준은 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭셕이 다른 트랜잭션으로부터 얼마나 격리될지를 설정하는 기준이다. 이 격리 수준은 데이터 충돌을 방지하면서도 성능을 조율하는 역할을 한다.
격리 수준이 높아질수록 데이터의 안정성은 높아지지만 동시성(성능)은 낮아질 수 있다.
Read Uncommitted
커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있다.
가장 낮은 수준으로, 동시성이 높지만 데이터 일관성 문제가 발생할 수 있다.
Read Committed
커밋된 데이터만 읽을 수 있다. (대부분의 DBMS에서 기본 설정)
Repeatable Read
트랜잭션 내에서 동일 데이터를 반복해서 읽으면 항상 같은 값을 반환한다.
Serializable
트랜잭션이 마치 하나씩 차례대로 실행되는 것처럼 보이도록 보장한다.
가장 높은 수준으로, 데이터 정확성이 완벽히 보장된다.
성능이 중요하고 데이터 불일치가 큰 문제가 안 된다면 ->
Read Uncommitted 또는 Read Committed
읽기 작업의 안정성이 중요하다면 ->
Repeatable Read
데이터의 정확성이 최우선이라면 ->
Serializable
spring에서는 @Transactional 어노테이션으로 트랜잭션 격리 수준을 설정할 수 있다.
@Service
public class StoreService {
@Transactional(isolation = Isolation.SERIALIZABLE)
public void performTransaction() {
// 트랜잭션 코드
}
}