[자바 ORM 표준 JPA 프로그래밍] 16장_트랜잭션과 락,2차 캐시
Transaction
트랜잭션이란 논리적인 작업의 단위이다. 이 트랜잭션은 ACID 를 보장해야한다.
- Atomicity
트랜잭션 내에서 실행한 작업들은 하나의 작업 처럼, 모두 성공하거나 모두 실패해야한다. - Consistency
트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야한다.
예를 들면, 데이터베이스의 무결성 제약 조건을 항상 만족해야한다. - Isolation
동시에 실행되는 트랜잭션은 서로 영향을 미치지 않아야한다. - Durability
트랜잭션을 성공적으로 끝내면, 그 결과가 데이터베이스에 항상 기록되어야한다.
문제는 격리성이다. 트랜잭션간에 완벽하게 격리성을 보장하기 위해서는 어떻게 해야할까 ?
트랜잭션을 차례대로 실행해야한다. 그러면, 동시성이 처리 기능이 떨어진다.
그래서 트랜잭션 격리 수준이 등장한다.
Isolation Level
격리 수준이 낮을 수록 더 많은 문제가 발생한다.
READ UNCOMMITTED, READ COMMITTED , REPEATABLE READ, SERIALIZABLE 으로 격리 수준이 높아진다.
애플리케이션은 대부분 동시성 처리가 중요하기 때문에, 데이터베이스들은 보통 READ COMMITTED 격리 수준이 기본이다.
READ UNCOMMITTED
커밋하지 않은 데이터를 읽을 수 있다. DIRTY READ 문제가 발생할 수 있다.
- 트랜잭션 1 이 데이터를 수정하고 있다.
- 트랜잭션 2 가 수정 중인 데이터를 조회한다.
- 트랜잭션 1 이 롤백을 하게 되면 데이터 정합성에 문제가 생긴다.