inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 배치

DB - JpaCursorItemReader

커서와 페이징

239

mh.kim14

작성한 질문수 1

0

안녕하세요.
수업 관련 질의드립니다.

 

  1. 커서와 페이징 처리방식

     

    1. 전제:

      커서 기반 리더는 SQL을 한번 실행해 해당 커넥션을 이용해 스트림 처리를 하고, 페이징 기반 리더는 청크 단위로 SQL을 여러번 실행해 데이터를 페이징 단위로 처리합니다.

    2. 문제: 그러면 커서기반으로 처리되는 리더는 doRead() 를 호출할 때, 데이터를 하나가져오고, 매핑하고, 다시 iterate해서 데이터를 하나 가져오고 매핑하는 것인가요? 아니면 일단 청크사이즈만큼 가져오고 그 다음 iterate해서 매핑을 하는 것인가요?

    3. 질문이유: 저는 전자를 커서방식 후자를 페이징 방식이라고 생각하였는데, 수업 시간에 커서도 데이터를 청크사이즈만큼 가져온다음 Iterate한다고 이해하여 제 인식에 잘못된 것이 있는지, 파악에 오류가 있는지 질의드립니다.

감사합니다.

spring-boot spring-batch

답변 2

0

정수원

페이징 방식과 커서 방식은 데이터를 읽어오는 방식에서 엄연히 구분됩니다.

페이징은 가져올 데이터를 페이지 단위로 잘라서 가져오기 때문에 디비와의 커넥션이 매번 이루어지지만 커서는 데이터를 모두 읽어올 때까지 스트리밍 방식으로 계속 연결되어 있다는 점입니다.

여기서 커서 방식이 하나의 데이터를 하나씩 읽어오는 원리는 맞지만 성능을 위해 미리 일정양을 메모리에 로드하는 옵션을 줄 수 있습니다.

페이지 방식도 이 개념은 비슷하다 할 수 있습니다.

다만 커서와 페이징의 데이터 로딩 구조가 다르다고 보시면 됩니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

커서 기반 처리와 페이징 처리 방식에 대한 궁금증을 해결해 드리겠습니다.

  1. 커서 기반이란:

    • 한 번의 쿼리 실행 후, 데이터베이스 커넥션을 통하여 연속된 스트림으로 데이터를 읽어 들이는 방식입니다.
    • doRead() 메서드 호출 시, 한 번에 한 개의 데이터를 가져오고 매핑 후, 다음 데이터를 위해 다시 반복(iteration)하는 과정을 거칩니다.
  2. 페이징 처리란:

    • 각 청크마다 새로운 SQL 쿼리를 실행하여, 설정된 페이지 크기(PageSize)만큼 데이터를 분할하여 처리하는 방식입니다.
    • 각 페이지 단위로 데이터를 읽은 후, 해당 부분을 매핑하고, 다음 페이지로 넘어가 다시 데이터를 읽어 처리하는 구조입니다.

질문하신 내용에 기반해서 설명드리면, 커서 방식은 전자인 ‘한 번에 한 개의 데이터를 가져오는 방식’이 맞습니다. 따라서 귀하께서 커서 방식이라 이해한 바가 정확합니다. 반면, 페이짅 방식은 ‘페이지 단위로 데이터를 가져온 후, 해당 데이터를 한 번에 처리(iteration 없음)‘하는 방식을 말합니다.

따라서 수업 시간에 커서가 청크 사이즈만큼 데이터를 가져온다고 이해된 부분은 오해가 있을 수 있는데, 이를 다시 한 번 확인하시면 좋겠습니다.

참고로 스프링 배치에서는 대량의 데이터를 처리할 때 주로 커서 방식을 이용합니다. 커서 방식은 페이징 방식에 비해 메모리 사용은 적지만, 오픈된 커넥션을 유지해야할 필요가 있습니다. 반면, 페이징 방식은 메모리 사용량이 더 클 수 있지만 개별 페이지 처리가 완료되면 해당 리소스를 바로 반환할 수 있는 장점이 있습니다.

추가로 도움이 될 수 있는 Spring Data JPA의 문서 링크드립니다:

도움이 되셨기를 바랍니다. 다른 궁금한 사항이 있으시면 언제든지 질문해 주세요.
감사합니다.

스프링 배치 버전 질문

0

122

1

소스코드가 어디에 있나요?

0

96

2

트랜잭션 예외

0

92

1

질문이 있습니다.

0

130

2

ChunkListener 에서 beforeChunk 의 실행 시점 관련 질문

0

125

2

여러 JOB 설정하는법

0

150

2

강의 자료 다른 방법 있을까요?

0

154

1

JobExecution과 JobExecutionContext와의 관계

0

186

2

특정 job만 실행

1

252

1

Batch 성능 질문

0

153

1

ItemReaderAdapter 종료

0

80

1

[ 강좌 Git 브랜치 문의 ] 섹션 9 > JdbcCursorItemReader, JpaCursorItemReader

0

179

2

Spring Batch 배포 질문

0

245

2

spring batch 버전

0

236

2

retry count 관련 질문

0

172

2

StepExecutionListener 의 afterStep 에서 return ExitStatus.FAILED 에 의한 동작에 의문이 갑니다.

0

330

2

jdbc, jpa 커서방식 조회 방식 차이 질문 (강사님께 답변 받고 싶습니다)

0

235

2

Multithread step과 AsyncItemProcessor

0

203

2

job 재실행

0

251

2

bean 생명주기 문제 도와주세요(@Scope("step"), @Autowired)

0

183

1

Multi-threaded-step과 Partitioning 차이 확인

0

175

2

jdbcCursorReader, jdbcPagingReader 질문

0

146

1

step muti-thread 질문

0

110

1

itemSteam open update close 질문

0

112

1