인프런 커뮤니티 질문&답변

송인철님의 프로필 이미지
송인철

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성 컨텍스트 2

트랜잭션 격리수준

작성

·

381

0

안녕하세요 영한님 질문있습니다!

영속성 컨텍스트의 이점 중 하나가

1차 캐시로 REPEATABLE_READ 격리 수준을 애플리케이션 차원에서 제공해준다고 했는데요.

그럼 JPA에서 내부적으로 REPEATABLE_READ 격리수준을 보장하기 위해 락(Lock)이 걸려 있는건가요?

그리고 혹시 추가적으로 어떻게 REPEATABLE READ를 보장해주는 지 알 수 있는지에 대한 자료는 hibernate 공식문서에 가면 있을까요?

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 인철님

REPEATABLE_READ라는 격리 수준은 한번 읽은 내용을 동일하게 계속 읽을 수 있다는 뜻입니다. 별도의 락을 사용하는 것은 아니고 영속성 컨텍스트의 개념 덕분에 이것이 자동으로 적용됩니다.

Q: 그리고 혹시 추가적으로 어떻게 REPEATABLE READ를 보장해주는 지 알 수 있는지에 대한 자료는 hibernate 공식문서에 가면 있을까요?

A: https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch13.html

감사합니다.

0

송인철님의 프로필 이미지
송인철
질문자

답변 정말 감사드립니다!!

근데 REPEATABLE READ는 원래 읽기 연산에 공유 락(Shared Lock)을 걸고 트랜젹션을 끝까지 유지하고 쓰기 연산에 배타 락(Exclusive Lock)을 설정하는 개념 아닌가요?

김영한님의 프로필 이미지
김영한
지식공유자

REPEATABLE READ의 핵심은 락이라기 보다는 하나의 트랜잭션 안에서 읽은 데이터를 계속 같은 데이터 값으로 읽을 수 있다는 점입니다. 이것을 데이터베이스에 따라서 어떻게 구현하는가가 달라집니다. 생각하신 것 처럼 락으로 주로 구현하겠지요?

그런데 JPA는 1차 캐시가 있기 때문에 락을 걸지 않고도 1차 캐시 덕분에 REPEATABLE READ의 효과를 볼 수 있습니다.

감사합니다.

송인철님의 프로필 이미지
송인철
질문자

아 한 번에 이해됐습니다 감사합니다!

송인철님의 프로필 이미지
송인철

작성한 질문수

질문하기