아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
컬리 favicon컬리

MySQL Paging 시, MySqlPagingQueryProvider의 함정 조심!

by DD
2024-12-30
1년 전
조회수 28

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

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

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

MySqlPagingQueryProvider의 Pagination 원리

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

Group by 절 사용 시 주의사항

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

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

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

MySqlPagingQueryProvider 살펴보기
중급
아키텍처
Spring Batch
MySQL
Kotlin
Java
SQL
Backend
Data
원문 읽기
원문 읽기

관련 추천 글

멱등성, Kafka, Spring Batch 기반 정산 시스템 구축 노하우 공개

무신사 로고

Java Kotlin 전환, 성공적인 백엔드 리팩토링 사례

우아한형제들 로고

Java 개발자가 말하는 Kotlin, 왜 써야 할까?

올리브영 로고

Spring Batch 6.0.4 및 5.2.6 출시

스프링 로고

AI 에이전트와 함께 레거시 시스템 성능 개선, SQL Injection, N+1 문제 해결!

데보션 로고

SQL 기초부터 실전까지 마스터!

더 프라임아젠 로고

댓글 0

첫 번째 댓글을 남겨보세요!
컬리 favicon컬리
중급
아키텍처
Spring Batch
MySQL
Kotlin
Java
SQL
Backend
Data

관련 추천 글

멱등성, Kafka, Spring Batch 기반 정산 시스템 구축 노하우 공개

무신사 로고

Java Kotlin 전환, 성공적인 백엔드 리팩토링 사례

우아한형제들 로고

Java 개발자가 말하는 Kotlin, 왜 써야 할까?

올리브영 로고