트랜잭션의 ACID 속성
1. 원자성(Atomicity)
- 트랜잭션 내의 모든 작업은 하나로 간주된다.
- 트랜잭션안의 작업은 모두 성공하거나, 모두 실패해야한다..
2. 일관성 (Consistency)
- 트랜잭션이 실행되기 전과 후에 DB 의 상태는 일관되어야 함.
- 예시
- 데이터베이스 무결성 제약조건이 항상 충족되어야 함.
3. 격리성 (Isolation)
- 동시에 수행되는 여러 트랜잭션이 서로 영향을 주지 않도록 격리
- 다른 트랜잭션이 중간 결과에 영향을 받지 않도록 한다.
- 예시
@Transcational
isolation 속성 ..
4. 지속성 (Durability)
- 트랜잭션이 성공적으로 완료되면,
- 이후에 발생하는 시스템 장애나 오류에도 영향을 받지 않고 영구적으로 저장된다.
ANSI 표준 4 가지 트랜잭션 격리 수준
- READ UNCOMMITTED( 커밋되지 않은 읽기 )
- 가장 낮은 격리
- 다른 트랜잭션이 커밋하지 않은 데이터를 읽을 수 있음.
- 더티 리드 문제 발생!
위 사진은 커밋되지 않은 읽기를 격리단계로 사용시의 케이스와 그에 따른 문제점이다
- READ_COMMITTED ( 커밋된 내역 읽기 )
- 커밋된 데이터만 읽을 수 있다.
더티 리드
방지
- 하지만, 논리피트 리드(Non-repeated Read) 는 여전히 발생한다.
위 사진은 커밋된 데이터를 읽는 격리단계의 경우의 케이스이다.
커밋된 데이터만 읽게 되는 것이다.
- REPEATABLE_READ ( 반복된 읽기가 가능한 격리 )
- 트랜잭션 내의 일관된 데이터의 읽기를 조회한다.
- 즉, 트랜잭션 내에서 동일한 쿼리를 반복해서 날리면,
- 결과가 항상 동일하게 조회된다.
- 금융 도메인의 경우 해당 격리단계가 매우 중요하다.
- 하지만,
팬텀 리드
는 발생할 수 있다.
위 사진은 반복된 읽기가 설정되지 않은 경우 어떤 DB 정합성위반이 발생할 수 있는지 그 위험에 대한 케이스이다.
반복 읽기를 설정한 경우
- 트랜잭션 내의 일관된 데이터의 읽기를 조회한다.
- SERIALIZABLE
- 모든 트랜잭션이 격리되어 수행된다.
- 트랜잭션이 순차적으로 수행되며 멀티스레드의 이점을 누릴 수 없게된다.
- 격리수준의 문제때문에 동시 처리 능력이 최악이다..
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA]@Version 어노테이션에 대해여 (0) | 2023.11.21 |
---|---|
[JPA] 두 번의 갱신 분실 문제 (Second Lost Updates Problem) (0) | 2023.11.19 |
[JPA] 읽기 전용 쿼리 최적화(미완성) (0) | 2023.11.19 |
[JPA] 쓰기 지연와 JDBC 의 배치 (0) | 2023.11.19 |
[JPA] 쓰기 지연의 장점 등 (0) | 2023.11.19 |