5회차는 Spring Batch의 JdbcPagingItemReader/JdbcBatchItemWriter에 대해 공부했습니다.
스터디 진행 전 교안을 공부하며 정리한 내용은 이곳에서 볼 수 있습니다.
이번 스터디 시간에는 주로 Paging과 Cursor의 차이점에 대해 이야기 나누는 시간을 가졌습니다.
스터디에 참여하신 김XX님께서 Cursor 방식과 Paging 방식의 성능 차이가 궁금하셔서 비교해보셨는데,
예상과 다르게 Cursor 방식이 더 빠르게 실행되었다고 하셨습니다.
이에 대해 스터디 멤버들끼리 이야기를 나눈 결과, 몇 가지 결론을 내게 되었습니다.
Cursor vs Paging
Cursor 방식 vs Paging 방식: 비교 요약
1. 데이터베이스 연결
- Cursor: 단일 연결을 유지하며 데이터를 스트리밍 방식으로 가져오므로, 한 번의 연결로 전체 데이터를 지속적으로 불러옴
- Paging: 각 페이지마다 별도의 쿼리를 실행하여 데이터를 가져오므로, 페이지별로 새 연결이 이루어질 수 있음
2. 메모리 사용
- Cursor: 전체 결과셋을 메모리에 저장하므로, 대용량 데이터 처리 시 메모리 사용량이 높아짐
- Paging: 페이지 단위로 메모리에 불러와 필요한 만큼만 사용하여 상대적으로 메모리 효율적
3. 스레드 안전성
- Cursor: 스레드 안전하지 않으며, 멀티스레드 환경에서 비효율적
- Paging: 스레드 안전하여 멀티스레드 환경에서 적합하게 사용할 수 있음
4. 데이터 정렬
- Cursor: 특별한 정렬 없이 데이터를 순차적으로 가져옴 (특별한 정렬이 필요 없음)
- Paging: 일관된 결과를 위해 정렬을 필수 설정해야함
5. 사용 추천 상황
- Cursor
- 단일 스레드 환경
- 메모리가 충분할 때
- 빠르게 전체 데이터를 순차적으로 처리할 때
- Paging
- 멀티스레드 환경
- 메모리 제약이 있는 경우
- 대용량 데이터 처리 시
6. 구현 복잡성
- Cursor: 구현이 간단하며, 별도의 설정 없이 바로 사용할 수 있음.
- Paging: 페이지 크기, 정렬 설정 등이 필요하여 구현이 다소 복잡.
7. 주의사항
- Cursor: 긴 실행 시간 동안 연결을 유지해야 하므로 네트워크 불안정성에 영향을 받을 수 있음.
- Paging: 데이터가 자주 변경되는 환경에서는 페이지 간 데이터 일관성을 유지하기 어려울 수 있음.
8. 결론
일반적으로 Paging 방식이 더 안전하고 범용적이므로 기본 선택으로 고려하는 것이 좋을 것 같습니다.
Cursor 방식은 단일 스레드 환경이나 전체 데이터를 빠르게 처리해야 할 때, 또는 메모리가 충분할 경우에 적합합니다.
보통 Paging 방식을 많이 사용한다고 알고 있었지만
역시 코딩에는 정답이 없듯이, 각 환경에 맞는 방식을 비교해 보고 최적의 방법을 선택하는 것이 중요하다는 생각이 들었습니다.
'알아두면 좋은 개발 지식 > Spring Batch 스터디' 카테고리의 다른 글
[6회차] Spring Batch 스터디: 후기 및 추가 학습 내용 (2) | 2024.11.16 |
---|---|
[6회차] JpaPagingItemReader로 DB내용을 읽고, JpaItemWriter로 DB에 쓰기 (2) | 2024.11.08 |
[5회차] JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기 (1) | 2024.11.02 |
[4회차] Spring Batch 스터디: 후기 및 추가 학습 내용 (2) | 2024.10.30 |
[4회차] FlatFileItemReader로 단순 파일 읽고, FlatFileItemWriter로 파일에 쓰기 (1) | 2024.10.26 |