DevBoi

[JPA] JPA 격리수준 본문

Develop/[JPA]

[JPA] JPA 격리수준

HiSmith 2022. 3. 21. 20:12
반응형

격리성은 동시에 실행되는 트랜잭션이 서로에게 영향을 미치지 않도록 격리한다.

격리 수준에는 다음과 같다

 

* READ UNCOMMITED(커밋되지 않는 읽기)

트랜잭션 A가 특정 컬럼 데이터를 변경하고 있는 중에, 트랜잭션 B가 read하면, 

A가 변경한 데이터를 읽어온다.

-문제 : dirty read, 트랜잭션 A가 특정 컬럼 데이터를 변경하고 rollback했을때 발생한다.

 

 

 

* READ COMMITED(커밋된 읽기)

트랜잭션 A가 특정 컬럼 데이터를 변경하고 있는 중에, 트랜잭션 B가 read하면 트랜잭션 A가 변경하기 전 데이터를 읽어온다.

만약 트랜잭션 A가 데이터 변경후, 커밋하게되면 트랜잭션 B는 변경된 데이터를 읽어온다.

-> 즉, 한트랜잭션 내에서 외부 요인의 데이터 변경 커밋이 반영되어 일관된 데이터를 가져오지 못한다.

-문제 

(Dirty read는 방지, Nonrepeatable read는 방지 x)

 

 


* REPEATABLE READ(반복 가능한 읽기)

트랜잭션 동안에는 한번 조회한 데이터를 계속 조회해도 같은 데이터가 나온다.

다른 트랜잭션에서 데이터를 추가한경우, 

-문제

Dirty read,Nonrepeatable read는 방지, Phantom read는 발생

 


* SERIALIZABLE(직렬화 기능)

트랜잭션이 완료될때까지 select 문장이 사용하는 모든데이터에 lock이 걸리므로, 그 영역에 해당되는 데이터에

수정 및 입력이 불가능하다.

 

 

Dirty read : 변경된 데이터가 아직 미정인데, 다른 트랜잭션에서 읽어가는것

Nonrepeatble Read : 트랜잭션이 수행중인데, 다른 트랜잭션이 읽고 있는 데이터를 수정해서 데이터가 달라지는 것

Phantom Read : 동일한 쿼리가 다른 값을 반환하는 것

반응형

'Develop > [JPA]' 카테고리의 다른 글

[JPA] 비관적 락 과 낙관적 락  (0) 2022.03.21
[JPA] JPA 플러시란  (0) 2022.03.21
[JPA] JPA 와 하이버네이트의 차이  (0) 2022.03.21
[JPA] Dto 사용이유  (0) 2022.03.21
[JPA] 엔티티 설계시 주의사항  (0) 2022.03.21