• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

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

22.01.30 15:33 작성 조회수 307

0

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

답변 1

답변을 작성해보세요.

1

안녕하세요. 명아주님

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

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

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

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

감사합니다.

명아주님의 프로필

명아주

질문자

2022.01.30

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

답변 감사합니다!

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

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

 

감사합니다.