AI Briefing

[if kakao 2022] 배치 성능을 고려한 최선의 Reader

·2022.12.09 19:30

대량 데이터 배치 처리 시 성능을 좌우하는 Reader의 한계와 이를 극복하기 위한 최적화 방안을 설명한다.

배치 처리 성능의 80% 이상은 데이터를 읽어오는 ItemReader 단계에서 결정된다. 특히 수십억 건의 데이터 중 필요한 데이터만 골라내는 작업이 전체 성능의 핵심이다.

대량 데이터를 처리할 때는 메모리 한계와 시스템 부하를 방지하기 위해 데이터를 일정 단위로 나누어 처리하는 Chunk Processing이 필수적이다.

기존의 PageItemReader는 MySQL의 LIMIT OFFSET 방식을 사용하는데, 이는 Offset 값이 커질수록 조회 속도가 급격히 느려지는 성능 한계가 있다. 이를 해결하기 위해 마지막 ID 값을 기준으로 다음 데이터를 조회하는 ZeroOffsetItemReader를 사용하면 Offset을 0으로 유지하며 빠른 성능을 확보할 수 있다.

데이터를 조금씩 가져오는 Cursor 방식도 존재한다. 다만, JpaCursorItemReader는 모든 데이터를 메모리에 로드하여 **OOM(Out of Memory)**을 유발할 수 있으므로, JdbcCursorItemReaderHibernateCursorItemReader를 사용하는 것이 권장된다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.