[SPRING] JPA - Isolation Level

RuiN·2022년 8월 1일
0
post-thumbnail

ISOLATION ( 격리 )

격리성은 동시에 실행되는 Transaction 이 서로에게 영향을 미치지 않도록 격리합니다.
Ex ) 동시에 같은 데이터를 수정하지 못하도록 하는 것

  • Isolation Level ( 아래로 갈수록 수준 上 )
    • READ_UNCOMMITTED ( 커밋되지 않는 읽기 )
    • READ_COMMITTED ( 커밋된 읽기 )
    • REPEATABLE_READ ( 반복 가능한 읽기 )
    • SERIALIZABLE ( 직렬화 기능 )

READ_UNCOMMITTED

A 트랜잭션이 한 데이터를 변경 하고 있는 도중에 B 트랜잭션이 데이터를 읽으려하면 A가 변경한 데이터를 읽어온다.

하지만 Dirty Read 라는 문제점이 있다.
이것은 A가 한 데이터를 변경한 후 Rollback 했을때 발생한다.

현업에서는 자주 사용되는 Isolation Level은 아니다.
만약 사용하게 된다면, Service에 @DynamicUpdate 어노테이션을
추가하여 실제로 업데이트된 데이터만 반영되게 할 수 는 있다.

하지만 굳이....???


READ_COMMITTED

A 트랜잭션이 한 데이터를 변경 하고 있는 도중에 B 트랜잭션이 데이터를 읽으려하면 A가 변경하기 전 데이터를 읽어온다.
만약, A가 데이터 변경후 COMMIT 하게 되면 B는 변경된 데이터를 읽어온다.


REAPETABLE_READ

항상 일관성 있게 데이터를 읽는다.

다른 TRANSACTION 에서 데이터를 변경하여도 영향을 받지 않는다.


SERIALIZABLE

가장 높은 격리 수준...

TRANSACTION 이 완료 될때까지 SELECT 문장을 사용하는 모든 데이터에 Shared Lock 이 걸리므로 다른 User는 그 영역에 해당되는 데이터에 수정 및 입력이 불가하다.

profile
어디까지 올라갈지 궁금한 하루

0개의 댓글