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

MySqlPagingQueryProvider 살펴보기

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

두줄요약

MySqlPagingQueryProvider의 sort key 기반 페이지 처리 방식으로 발생한 데이터 누락과 SQL 오류를 분석했습니다. 고유 sort key 사용과 group by 시 별칭 제거로 문제를 해결했습니다.

문제 상황

  • JdbcPagingItemReader와 MySqlPagingQueryProvider 기반 Outbox 배치에서 동일한 created_at 값을 가진 데이터 일부 미발행
  • group by와 테이블 별칭 포함 sort key 조합에서 두 번째 페이지부터 SQLSyntaxErrorException 발생

원인 분석

  • MySqlPagingQueryProvider의 다음 페이지 조회 방식에서 이전 Chunk 마지막 sort key보다 큰 행만 조회
  • created_at 중복으로 동일 시각의 나머지 행 필터링
  • group by 사용 시 MAIN_QRY 인라인 뷰 생성 후 외부 WHERE 절에서 원본 테이블 별칭 참조

해결 방법

  • Outbox 조회 sort key를 고유한 auto_increment id로 변경해 발행 순서와 페이지 누락 방지
  • group by 조회의 sort key에서 t1 별칭을 제거하고 컬럼명만 사용

주의할 점

  • JdbcPagingItemReader의 sort key에 고유 제약조건이 있는 컬럼 선택
  • group clause 사용 시 MySqlPagingQueryProvider의 인라인 뷰 생성과 sort key 참조 범위 확인

다음 읽기

#Spring Batch 주제를 이어서 읽기

MySqlPagingQueryProvider 살펴보기

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

마켓컬리
마켓컬리
백엔드

댓글 0개

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

댓글을 불러오는 중...