Tiny Star

SpringBatch 3

[Spring Batch] Cursor vs Paging

Spring Batch를 사용해 대용량 데이터를 처리할 때 가장 먼저 고민해야 할 것은 데이터를 어떻게 읽을 것인가라고 생각한다.이때 많이 사용되는 두 가지 방식이 바로 Cursor 기반과 Paging 기반인데, 두 방식의 동작 방식, 장단점을 정리해봤다. 1. Cursor 기반JDBC의 ResultSet을 활용하여, DB에서 쿼리 1번으로 결과셋을 열어두고, 그 결과를 한 줄씩 순차적으로 읽는 방식 동작 방식`JdbcCursorItemReader`가 쿼리를 단 1번 실행DB는 결과를 계산한 뒤 커서(cursor) 를 열고 기다림Spring Batch가 `read()`를 호출할 때마다 한 줄씩 커서를 통해 받아옴메모리에는 항상 1~2개의 row만 존재@Beanpublic JdbcCursorItemRea..

IT 2025.07.25

[대용량 이관] bookRatingStep 개선

[bookRatingStep]을 만들었다. 300만 데이터 넣는데에 211초가 걸렸고, 문득 성능 테스트하는데 노트북 사양을 full 로 쓰면 조금 아이러니한 느낌이 들어서 메모리를 제한해보고 테스트해보기로 했다. 수정사항1. 메모리 설정-Xms512m -Xmx1g -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log옵션설명-Xms512mJVM의 초기 힙 메모리 크기를 512MB로 설정-Xmx1gJVM의 최대 힙 메모리 크기를 1GB로 제한-XX:+PrintGCDetailsGC가 발생할 때 어떤 세대에서 얼마나 수집되었는지 상세하게 로그 출력-XX:+PrintGCDateStampsGC 로그에 날짜와 시간 정보 포함-Xloggc:gc.logGC 로그를 ..

[대용량 이관] Book Job/Step 구성

20만건 정도의 book 데이터를 이관하는 것부터 시작했다. 구성보다는 에러를 해결한 내용이 위주이다...ㅎ Book Job, Step 구성@RequiredArgsConstructor@Configurationpublic class BatchConfiguration { private final Step stepBook; @Bean public Job bookJob(JobRepository jobRepository) { return new JobBuilder("bookJob", jobRepository) .start(stepBook) .build(); }}@Configurationpublic class BookStep ..

top