AI Briefing

Spring Batch MySqlPagingQueryProvider의 페이징 이슈와 해결책

·2024.12.30 17:00

핵심 내용

Spring Batch 5.2.0에서 MySqlPagingQueryProvider의 sortKey 처리 방식이 원인인 페이징 누락 및 SQL 오류를 분석하고 해결책을 제시했다.

자세히 보기

컬리 핀테크개발팀 이경훈 개발자가 Spring Batch 5.2.0 환경에서 MySqlPagingQueryProvider 사용 시 발생한 두 가지 주요 이슈와 해결 방법을 공유했다. JdbcPagingItemReader는 DBMS 의존성을 제거하기 위해 PagingQueryProvider를 사용하며, MySQL의 경우 MySqlPagingQueryProvider가 페이징 쿼리를 생성한다.

Transactional Outbox Pattern 적용 시 데이터 누락

지류 상품권 프로젝트에서 Transactional Outbox Pattern을 적용하는 과정에서 페이징 데이터 누락 문제가 발생했다. sortKey로 created_at을 설정했을 때, 동일 시간대에 생성된 데이터 중 일부가 Chunk 처리 후 다음 페이지에서 누락되는 현상이 나타났다. 이는 MySqlPagingQueryProvider가 Remaining Query 생성 시 LIMIT 절과 함께 sortKey > lastValue 조건만 추가하기 때문이다. 동일 created_at 값을 가진 레코드가 필터링되어 조회되지 않는 구조적 한계였다. 해결책으로 MySQL auto_increment인 id 컬럼을 sortKey로 변경하여 순서 보장을 확보했다.

Group By와 Table Alias 혼용 시 SQL 오류

AML 프로젝트에서 Group By 절과 Table Alias가 포함된 sortKey를 사용할 때 SQL 구문 오류가 발생했다. 첫 페이지는 정상 동작했으나, 두 번째 페이지부터 SQLSyntaxErrorException이 발생하며 t1 컬럼을 찾을 수 없다는 오류가 나타났다. MySqlPagingQueryProvider가 생성하는 Remaining Query에서 서브쿼리 외부의 WHERE 절이 내부의 alias(t1)를 참조하지 못해 발생하는 문제였다. group clause가 포함된 복잡한 쿼리에서는 alias 사용을 지양하거나 쿼리 구조를 재설계해야 함을 시사한다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.