MySQL Paging 시, MySqlPagingQueryProvider의 함정 조심!

by DD
1년 전
조회수 26

Spring Batch 기반 배치 애플리케이션 개발 중 MySqlPagingQueryProvider의 Pagination 전략 문제 발생

created_at 컬럼을 sort key로 사용 시, 동일 시간 데이터로 인해 데이터 유실 문제 발생

Group by 절 사용 시, Inline View 생성으로 인한 Alias 문제 발생, 해결 방법 제시

MySqlPagingQueryProvider의 Pagination 원리

JdbcPagingItemReaderMySqlPagingQueryProvider를 사용하여 페이지네이션을 수행한다. 구체적으로, sort key를 기준으로 WHERE 절에 조건을 추가하여 다음 페이지 데이터를 조회한다. 따라서, sort key 선택 시 데이터 유실을 방지하기 위해 Unique 제약 조건을 고려해야 한다.

Group by 절 사용 시 주의사항

MySqlPagingQueryProvider는 group by 절 사용 시 MAIN_QRY라는 이름의 Inline View를 생성한다. 따라서, sort keytable alias를 포함하면 Alias 문제가 발생한다. 반면, column name만 사용하면 문제를 해결할 수 있다. 결과적으로, 데이터 무결성을 확보할 수 있다.

실전 적용 가이드: Outbox 패턴과 Paging

Transactional Outbox Pattern 적용 시, created_atsort key로 사용하면 데이터 유실 위험이 있다. 따라서, id와 같이 Unique 컬럼을 사용하거나, sort key를 신중하게 선택해야 한다. 또한, group by 절 사용 시 Alias 문제를 인지하고, 적절한 설정을 적용하여 서비스 안정성을 확보해야 한다.

MySqlPagingQueryProvider 살펴보기

댓글 0

첫 번째 댓글을 남겨보세요!