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

명아주님의 프로필 이미지

작성한 질문수

실전! Querydsl

스프링 데이터 페이징 활용3 - 컨트롤러 개발

JPA, Querdsl 환경에서 팬텀리드는 어떻게 방지하나요?

해결된 질문

22.01.30 15:33 작성

·

365

0

안녕하세요. 초보개발자 명아주입니다.
 
새해복많이 받으세요!
 
이번에 QueryDSL 를 이용한 페이징 기능을 공부하면서 느꼈던 의문점이 있습니다.
일반적인 경우 쿼리가 2번 나가게 되는데,
그 사이에 팬텀리드가 발생한다면 어떻게 막을수 있을지 입니다.
어디서 언뜻 보기로, JPA 가 어플리케이션 레벨에서 Repeatable Read를 보장해준다고 봤었던것 같습니다. 물론 Repeatable Read더라도 phantom Read가 발생하는 걸로 알고 있지만요.
그래서 실무에서 이런 phantom read가 발생하는 걸 겪으신 경험이나 어떻게 해결하셨었는지 궁금합니다!
 
감사합니다!

답변 1

1

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

2022. 01. 30. 19:03

안녕하세요. 명아주님

JPA 사용과 무관하게, 애플리케이션에서 phantom Read를 막을 수는 없습니다.

(데이터베이스 옵션을 사용해서 해결해야 합니다. 하지만 성능이 매우 느려질 수 있기 때문에 사용하지 않습니다.)

그리고 페이징에서 데이터 조회 쿼리와, 페이징 전체 수 조회 카운트를 위해서 2가지 쿼리가 필요한데요.

이 경우에도 아주 짧은 순간이기 때문에 일반적으로 문제가 발생하지는 않습니다.

감사합니다.

명아주님의 프로필 이미지
명아주
질문자

2022. 01. 30. 19:22

안녕하세요 초보개발자 명아주입니다.

답변 감사합니다!

찾아본 바로는 비관적 잠금 처리하거나 격리수준을 Serializable 까지 변경해야될 것 같은데 말씀하신 것처럼 성능이 매우 느려질 것 같습니다.

약간 어쩔수 없는 부분으로 생각하겠습니다!

 

감사합니다.