[리팩토링]트랜잭션의 격리수준

 

트랜잭션의 격리

Transaction Isolation

  • ACID 속성 (원자성, 일관성, 격리, 지속성) 중 하나입니다.
  • 동시에 실행되는 트랜잭션 사이에서 변경사항이 어떻게 서로에게 보여지는지를 설명함

격리 수준에 따른 특징

  • DEFAULT
    • 데이터베이스의 기본 격리 수준을 준수합니다.
    • 기본값으로 설정되어있습니다.
  • READ_UNCOMMITTED (읽기 미수정)
    • 가장 낮은 수준의 격리
      • 다른 트랜잭션의 수정이 끝나지 않았어도, 그 변경 내용을 읽을 수 있음.
      • 장점
        • 높은 동시성 제공가능
      • 단점
        • 모든 3가지의 동시성 부작용에 대해 경험가능 ㅇ.ㅇ
          • 더티 리드, 비 반복 리드, 팬텀 리드
  • 더티 리드, 비 반복 리드, 팬텀리드란?

 

  • READ_COMMITTED (읽기 수정)
    • 커밋된 데이터만 읽을 수 있음
    • 대부분의 RDBMS 에서 기본적으로 사용되는 격리 수준이라고 함
    • 장점
      • Dirty Read 의 문제를 해결
    • 단점
      • 반복 불가능 리드가 발생한다.
      1번 주문 읽기 -> 좋아하는 숫자가 3임   // 다른 트랜잭션에서 커밋 -> 1번 업데이트   1번 주문 읽기 -> 좋아하는 숫자가 1로 조회됨 ;;
  • REPEATABLE READ (반복 읽기)
    • 트랜잭션이 시작될 때의 데이터를 반복해서 읽을 수 있음.
    • 한 트랜잭션 내에서 같은 데이터를 여러 번 읽을 때 일관성있는 데이터를 보장함.
    • 장점
      • 반복 불가능 읽기 문제를 해결
      • 다른 트랜잭션에서 변경되어도 데이터 영향을 받지 않음
    • 단점
      • 팬텀 리드 발생은 여전
  • SERIALIZABLE (직렬화 가능)
    • 트랜잭션들이 순차적으로 수행되어 다른 트랜잭션의 작업에 영향을 받지 않음.
    • 가장 엄격한 격리 수준임
    • 장점
      • 모든 동시성관련 읽기 문제를 해결가능
    • 단점
      • 데이터의 일관성을 최대한 보장할 수 있음.
      • 하지만, 성능에 뚜렷한 손실이 발생하는건 감안해야함

Uploaded by

N2T

 

 

[리팩토링]동시성 문제 - 읽기 3가지

더티 리드 (Dirty Read)트랙잭션 A 가 아직 커밋되지 않은 변경을 만든 경우,트랜잭션 B 가 해당 변경을 읽는 현상@Transactional(isolation = Isolation.READ_UNCOMMITTED) public void dirtyReadSimulation() { User user = userRepo

oth3410.tistory.com