트랜잭션의 격리
Transaction Isolation
- ACID 속성 (원자성, 일관성, 격리, 지속성) 중 하나입니다.
- 동시에 실행되는 트랜잭션 사이에서 변경사항이 어떻게 서로에게 보여지는지를 설명함
격리 수준에 따른 특징
DEFAULT
- 데이터베이스의 기본 격리 수준을 준수합니다.
- 기본값으로 설정되어있습니다.
READ_UNCOMMITTED
(읽기 미수정)- 가장 낮은 수준의 격리
- 다른 트랜잭션의 수정이 끝나지 않았어도, 그 변경 내용을 읽을 수 있음.
- 장점
- 높은 동시성 제공가능
- 단점
- 모든 3가지의 동시성 부작용에 대해 경험가능 ㅇ.ㅇ
- 더티 리드, 비 반복 리드, 팬텀 리드
- 모든 3가지의 동시성 부작용에 대해 경험가능 ㅇ.ㅇ
- 가장 낮은 수준의 격리
- 더티 리드, 비 반복 리드, 팬텀리드란?
READ_COMMITTED
(읽기 수정)- 커밋된 데이터만 읽을 수 있음
- 대부분의 RDBMS 에서 기본적으로 사용되는 격리 수준이라고 함
- 장점
- Dirty Read 의 문제를 해결
- 단점
- 반복 불가능 리드가 발생한다.
1번 주문 읽기 -> 좋아하는 숫자가 3임 // 다른 트랜잭션에서 커밋 -> 1번 업데이트 1번 주문 읽기 -> 좋아하는 숫자가 1로 조회됨 ;;
REPEATABLE READ
(반복 읽기)- 트랜잭션이 시작될 때의 데이터를 반복해서 읽을 수 있음.
- 한 트랜잭션 내에서 같은 데이터를 여러 번 읽을 때 일관성있는 데이터를 보장함.
- 장점
반복 불가능 읽기
문제를 해결
- 다른 트랜잭션에서 변경되어도 데이터 영향을 받지 않음
- 단점
- 팬텀 리드 발생은 여전
SERIALIZABLE
(직렬화 가능)- 트랜잭션들이 순차적으로 수행되어 다른 트랜잭션의 작업에 영향을 받지 않음.
- 가장 엄격한 격리 수준임
- 장점
모든 동시성관련 읽기 문제를 해결가능
- 단점
- 데이터의 일관성을 최대한 보장할 수 있음.
- 하지만, 성능에 뚜렷한 손실이 발생하는건 감안해야함
Uploaded by
N2T
'자바 > 리팩토링' 카테고리의 다른 글
[리팩토링]Junit5 에서의 컨트롤러 테스트시 어노테이션 종류 등 (0) | 2023.10.26 |
---|---|
[리팩토링]동시성 문제 - 읽기 3가지 (0) | 2023.10.24 |
[DB락] MYSQL INNODB 락 관련 게시물 참고 (0) | 2023.10.24 |
[테스트코드] Mockito API (0) | 2023.10.22 |
[리팩토링]동시성을 가지는 서비스에 대한 테스팅 - ExecutorService 와 Future (0) | 2023.10.10 |