개발 일지/Spring

[Spring] 트랜잭션 격리 레벨

미숫가루설탕많이 2023. 3. 2. 20:42

 트랜잭션 격리 레벨(Transaction Isolation Level)은 여러 개의 트랜잭션이 동시에 실행될 때, 각 트랜잭션들이 서로 영향을 미치지 않도록 하는 것을 의미한다.

 

 트랜잭션은 ACID 원칙 중에서 독립적으로 실행되어야 하는 격리성이 보장되어야 하며, Spring은 @Transactional 애너테이션의 isolation 애트리뷰트를 통해 격리성을 조정할 수 있는 옵션을 제공한다.

 

 적절한 격리 레벨을 선택하여 사용할 경우, 데이터 일관성을 보장하면서도 동시성 처리 성능을 향상시킬 수 있다.

 

 

 

 

Isolation Level

 

  • Isolation.DEFAULT
    : 데이터베이스에서 제공하는 기본값이다.

  • Isolation.READ_UNCOMMITTED (레벨 0)
    : 다른 트랜잭션에서 커밋하지 않은 데이터를 읽는 것을 허용한다. Dirty Read 현상이 발생할 수 있다.

  • Isolation.READ_COMMITED (레벨 1)
    : 다른 트랜잭션에 의해 커밋된 데이터를 읽는 것을 허용한다. Dirty Read 현상은 발생하지 않지만, Non-repeatable Read 현상이 발생할 수 있다.

  • Isolation.REPEATABLE_READ (레벨 2)
    : 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회되도록 한다. Non-repeatable Read 현상은 발생하지 않지만, Phantom Read 현상이 발생할 수 있다.

  • Isolation.SERIALIZABLE (레벨 3)
    : 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행되지 못하도록 한다. Phantom Read 현상이 발생하지 않지만, 다른 격리 레벨보다 성능이 떨어진다는 단점이 있다.