목록 보기
MySqlPagingQueryProvider 살펴보기
백엔드

MySqlPagingQueryProvider 살펴보기

마켓컬리
마켓컬리
2024년 12월 30일

두줄요약

JdbcPagingItemReader와 MySqlPagingQueryProvider의 페이지네이션 동작과 주의사항을 정리했습니다.\nsort key와 group clause 설정에 따라 데이터 누락과 SQL 오류가 발생할 수 있어 조심해야 했습니다.

문제 상황

  • Spring Batch의 JdbcPagingItemReader와 MySqlPagingQueryProvider 사용 중 페이지네이션 동작이 기대와 다르게 나타난 사례
  • 첫 번째 이슈: sort key를 created_at으로 둔 경우 동일 시각 데이터가 많은 구간에서 일부만 발행
  • 두 번째 이슈: group clause와 table alias 조합에서 remaining page 조회 시 SQL 오류 발생

원인 분석

  • MySqlPagingQueryProvider가 offset/limit이 아니라 sort key를 기준으로 WHERE 조건을 추가하는 방식으로 페이지를 구분
  • JdbcPagingItemReader가 이전 페이지의 마지막 sort key 값을 startAfterValues에 저장해 다음 페이지 조건에 활용
  • group clause가 있으면 inline view(MAIN_QRY)를 만들기 때문에 table alias가 포함된 sort key가 깨질 수 있음

해결 방법

  • unique하고 순서를 보장하는 컬럼을 sort key로 사용해 페이지 누락 방지
  • group clause 사용 시 sort key에서 table alias를 제거하고 컬럼명만 사용
  • MySqlPagingQueryProvider의 remaining query 생성 방식과 내부 동작을 이해한 뒤 쿼리 구성

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...