트랜잭션 격리 레벨(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 현상이 발생하지 않지만, 다른 격리 레벨보다 성능이 떨어진다는 단점이 있다.
'개발 일지 > Spring' 카테고리의 다른 글
[Spring Data JPA] No default constructor for entity (0) | 2023.03.13 |
---|---|
[Spring Data JPA] Auditing 기능 (0) | 2023.03.13 |
[Spring] 트랜잭션 전파 (0) | 2023.03.02 |
Failed to configure a DataSource 에러 (0) | 2023.03.01 |
[Spring MVC] 트랜잭션 (0) | 2023.02.28 |