AI Briefing

Querydsl 대량 데이터 처리 최적화: 커서 페이지네이션과 Batch Insert/Update 적용기

·2026.09.16 09:00

핵심 내용

Querydsl 기반 커서 페이지네이션과 Batch 처리로 대량 데이터 읽기·쓰기 성능을 극대화하는 방법을 정리했다.

1 / 2

자세히 보기

기존 Querydsl 페이징은 Count 쿼리 병목과 offset 기반 조회의 성능 저하 문제를 안고 있었다. 이를 해결하기 위해 Slice를 활용해 Count를 생략하거나, Content와 Count 쿼리를 코루틴으로 병렬 실행해 지연 시간을 단축할 수 있다. 테스트 결과, 순차 실행 시 1,500ms 걸리던 작업이 병렬 실행 시 1,037ms로 감소했다.

읽기 성능: 커서 기반 페이지네이션

offset 방식은 데이터가 증가할수록 풀 스캔 비용이 누적되어 선형적으로 성능이 저하된다. 반면 커서 기반 페이지네이션은 PK 인덱스를 활용하여 데이터 양과 무관하게 일정한 성능을 유지한다. 100만 건 데이터 기준, offset 방식은 마지막 페이지에서 3.3배의 지연이 발생하지만 커서 방식은 1.0배로 일정하다.

쓰기 성능: Batch Insert 및 Update

JPA의 IDENTITY 전략은 getGeneratedKeys() 호출로 인해 JDBC Batch를 차단하여 건별 INSERT가 발생한다. 이를 해결하기 위해 Querydsl-SQL의 addBatch를 사용하거나 MySQL의 rewriteBatchedStatements=true 옵션을 적용해야 한다. 10,000건 기준 saveAll(약 7.5초) 대비 addBatch(약 0.26초)로 **96.5%**의 성능 개선이 확인되었다. Update 역시 Dirty Checking의 건별 쿼리 대신 Batch 처리를 통해 약 **87.5~89.3%**의 성능 향상을 기대할 수 있다.

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

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