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

Aura님의 프로필 이미지
Aura

작성한 질문수

실전! 스프링 데이터 JPA

스프링 데이터 JPA 페이징과 정렬

무제한 스크롤 관련 질문 드립니다.

해결된 질문

작성

·

349

2

타임라인 형태 조회 API를 제공 하려다가

중복에 관한 문제에 직면하여  조언을 얻고 자 합니다.

 

데이터가 로드 된 후.

신규 데이터가 등록 / 삭제 등 프로세스가 일어 난 다음에

다음 페이지를 호출 할 때 생기는 이슈 입니다.

 

pageRequest, slice로 구현 시

신규 데이터가 입력 된 경우 중복으로 데이터가 보이는 케이스가 생기고, 삭제 된 경우 예상치 못하게 데이터가 빠지는 현상이 있습니다.

 

ex)

주어진 데이터 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 

size 5

1페이지에 10, 9, 8, 7, 6 이 뿌려 진 상태

 

조회 된 상태에서 신규 데이터 12, 11 이 추가 됩니다. 

이 상태에서 2페이지를 호출 합니다.

 

-> db에서는 12~8까지를 1페이지 7~3까지를 2페이지로 판단하여 7, 6, 5, 4, 3 을 더보기로 뿌려주며 

7, 6 번이 중복으로 리스트에 보이게 되고 있습니다.

 

이 강의는 들은지 4개월이 넘었는데 모바일 더보기 관한 내용을 말씀하셨던 것 같아서 오늘 다시 들어봤지만 Slice의 내용 이었고 제가 직면한 이슈는 아직 해결 되지 않았네요.

 

조사를 좀 해보니.

오라클의 rownum 같은..? 성격의 데이터로 어디까지 데이터를 불러 왔는지에 대한 값등으로 해결 한다고 찾긴 했는데요. 그 방향으로 native쿼리로 해결을 해볼까 고민하다가 영한님/배민에서는 어떻게 처리 할까 궁금해서 질문을 남깁니다.

제가 못 찾는건지 jpa에서 이러한 이슈 해결해주는 기능을 지원해주는지도 궁금합니다. (없는 것 같네요 ㅠ)

날씨 추운데 건강 챙기세요.

명강의 잘 보고 있습니다.

 

 

 

 

답변 1

1

Aura님의 프로필 이미지
Aura
질문자

자문자답..

답은 아니고 해결 책 중 하나 인것 같습니다.

 

복합키에 seq성 데이터가 있는데 

이 데이터를 커서로 삼아서 커서 기준 seq 하위로 size만큼 데이터 뿌리는 식으로 풀었습니다.

 

정리)

page 0, size 10 고정으로 page 요청하고..

변동은 기준 seq

 

lastSeq 값 없으면 long 맥스 값 > seq 10개

조회된 데이터 중 가장 하위 seq 던져 주면 param seq 기준 하위 10개 뿌려주니까 중복 현상은 없어 졌네요..

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

스스로 잘 해결하셨습니다^^

Aura님의 프로필 이미지
Aura
질문자

보통 저렇게 해결하는 부분이 맞는지 궁금합니다. 더 좋은 방법이 있는 지도요.ㅎ

주로 웹에 뿌려주는 페이징처리를 많이 하다보니 이번엔 당황을 좀 했네요 ㅠ

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

오프셋 페이징 커서 페이징으로 검색해보시면 원하는 답을 찾으실 수 있을거에요.

감사합니다.

Aura님의 프로필 이미지
Aura

작성한 질문수

질문하기