Spring Batch는 대용량 작업을 처리할 수 있는 오픈소스 프레임 워크입니다. 그러나 많은 데이터를 처리할 때 처리 속도가 느려질 수 있습니다. 이번 글에서는 이러한 속도 저하를 해결하기 위한 3가지 방법을 제시하고자 합니다.
첫 번째 방법 - 적절한 트랜잭션 범위 설정
처리해야 할 데이터 양이 많을 때, 트랜잭션 범위를 너무 작게 설정하면 오히려 처리 속도가 느려질 수 있습니다. 반대로, 트랜잭션 범위를 너무 크게 설정하면 메모리 점유율이 높아져 OutOfMemoryError가 발생할 가능성이 있습니다. 이를 해결하기 위해서는 적절한 트랜잭션 범위를 찾아야 합니다.
예를 들어, 만약 데이터베이스에서 1000만 건의 데이터를 조회해야 한다면, 한 번에 1000건 혹은 10000건씩 조회하는 것이 적절한 범위일 수 있습니다. 이는 데이터베이스의 성능과 메모리 사용량을 고려하여 적절한 범위를 찾아내는 것이 중요합니다.
두 번째 방법 - 적절한 쓰레드 수 설정
Spring Batch는 멀티 쓰레드를 지원합니다. 쓰레드 수를 적절하게 설정하면 처리 속도를 높일 수 있습니다. 그러나 쓰레드 수가 너무 많으면 오히려 처리 속도가 느려질 수 있습니다. 따라서, 적절한 쓰레드 수를 찾아야 합니다.
Spring Batch에서 적절한 쓰레드 수를 설정하는 방법은 다음과 같습니다.
- 작업을 수행할 서버의 코어 수를 파악합니다.
- 코어 수에 따라 쓰레드 수를 설정합니다.
- 코어 수 이하의 쓰레드 수: 코어 수와 동일하게 설정합니다.
- 코어 수 이상의 쓰레드 수: 코어 수의 1.5배 이하로 설정합니다.
이를 통해 적절한 쓰레드 수를 설정하여 처리 속도를 높일 수 있습니다.
세 번째 방법 - 적절한 페이징 설정
Spring Batch는 페이징 기능을 제공합니다. 페이징 크기를 적절하게 설정하면 처리 속도를 높일 수 있습니다. 하지만 페이징 크기가 너무 크면 메모리 점유율이 높아져 OutOfMemoryError가 발생할 가능성이 있습니다. 따라서, 적절한 페이징 크기를 찾아야 합니다.
Spring Batch에서 적절한 페이징 크기를 설정하는 방법은 다음과 같습니다.
- 먼저 처리해야 할 데이터의 총 양을 파악합니다.
- 메모리 사용량을 고려하여 페이징 크기를 설정합니다.
- 메모리 사용량 = (페이징 크기) x (최대 쓰레드 수) x (1 + 조회 대기 시간 / 처리 대기 시간)
- 최대 쓰레드 수는 작업을 수행할 서버의 코어 수와 동일합니다.
- 조회 대기 시간 / 처리 대기 시간은 데이터베이스 응답 시간과 애플리케이션 처리 시간을 고려하여 설정합니다.
예를 들어, 만약 데이터베이스에서 1000만 건의 데이터를 페이징 처리해야 한다면, 한 번에 1000건 혹은 10000건씩 처리하는 것이 적절한 크기일 수 있습니다. 이는 메모리 사용량을 고려하여 적절한 크기를 찾아내는 것이 중요합니다.
결론
이상의 방법을 적절하게 적용하면 Spring Batch의 처리 속도를 향상시킬 수 있습니다. 이를 통해 대용량 데이터를 처리하는 시스템에서 더욱 빠른 처리 속도를 구현할 수 있습니다.
'Backend > Spring' 카테고리의 다른 글
[기술면접]Spring Batch 예상 질문 리스트 (0) | 2023.12.12 |
---|---|
Spring에서 컴포넌트 스캔과 의존관계 자동 주입 해보기 (0) | 2023.10.29 |
Spring Batch TransactionManager 개념, 구현체 종류와 특징 (0) | 2023.02.28 |
테스트 케이스 돌리니 TestEngine with ID 'junit-vintage' failed to discover tests 오류가 뜨는 경우 (0) | 2021.11.06 |
[Spring] HTTP Range Requests 를 이용한 비디오 스트리밍 만들기(Video Streaming) (0) | 2021.02.07 |