[스프링 배치] 청크 프로세스

조갱·3일 전
0

스프링 배치

목록 보기
9/9

Chunk 개념

  • 여러 개의 데이터를 특정 단위로 묶은 것
  • 대용량 처리를 위해 필요하다.
    • 많은 데이터를 한번에 처리하면 OOM 이 발생하기 때문
    • Chunk 단위로 쪼개서 여러번 처리함으로써 OOM 을 방지한다.
  • 스프링 배치는 Chunk 단위로 트랜잭션을 알아서 적용한다.
    • Chunk 단위의 commit 과 rollback 이 발생한다.
  • ItemReader (필수) 가 Chunk 에 설정한 특정 단위 가 될 때까지 데이터를 1개씩 읽는다.
    특정 단위까지 수집 된 데이터는 1개의 Chunk가 되어 ItemProcessor 에 전달된다.
  • ItemProcessor (선택) 가 데이터를 가공 (transform) 해서 Chunk Size 단위로 ItemWriter 에 전달한다.
  • ItemWriter (필수) 가 Chunk로 받은 데이터를 DB, File 등에 반영한다.
  • 이를 그림으로 나타내면 아래와 같다.

아키텍쳐

ChunkOrientedTasklet

SpringBatch 는 Chunk 기반 작업을 지원하는, Tasklet의 구현체인 ChunkOrientedTasklet 을 제공한다.

  • ItemReader, ItemProcessor, ItemWriter 를 통해 청크 기반 대용량 배치 처리를 지원한다.
  • 내부적으로는 ChunkProvider (ItemReader), ChunkProcessor (ItemProcessor, ItemWriter) 가 사용된다.
  • ChunkOrientedTasklet 의 execute 는 청크 단위로 실행된다.
  • TransactionTemplate 에 의해 실행되기 때문에 트랜잭션이 적용되며, 이는 곧 청크 단위의 트랜잭션 (Commit, Rollback) 이 보장된다.
    • 해당 내용은 다음 포스팅에서 자세히 다룬다.
    • 강의 보면서 이해가 잘 안됐던 부분이었다.

ChunkProvider

ItemReader 를 사용하여 Source 로부터 데이터를 Chunk Size 만큼 읽고, Chunk 를 반환하기 위한 인터페이스

  • 기본 구현체로 SimpleChunkProvider, FaultTolerantChunkProvider 가 있다.
    • SimpleChunkProvider
      • 일반적으로 chunk 처리를 위해 사용되는 Provider
    • FaultTolerantChunkProvider
      • 실패에 대한 처리를 별도로 설정할 수 있는 Provider
      • SimpleStepBuilder 에서 .faultTolerant() 메소드를 통해 생성할 수 있다.
      • 추후 자세히 포스팅 예정
  • SimpleChunkProvider 는 데이터를 읽기 위한 ItemReader와, 반복적으로 처리하기 위한 RepeatOperations 를 포함한다.
  • Chunk 의 Size 만큼 데이터를 읽거나, 더 이상 읽을 데이터가 없으면 읽기를 중단한다.
  • ChunkProvider 의 provide() 메소드가 호출될 때마다 매번 새로운 Chunk 객체가 생성된다.

ChunkProcessor

ItemProcessor 를 사용하여 데이터를 가공 (transform) 하고, ItemWriter 를 사용하여 데이터를 목적지에 저장하는 역할

  • 기본 구현체로 SimpleChunkProcessor, FaultTolerantChunkProcessor 가 있다.
  • SimpleChunkProcessor 는 데이터를 가공하기 위한 ItemProcessor (선택) 와, 데이터를 저장하기 위한 ItemWriter (필수) 를 필드로 가진다.

ItemReader

다양한 source 로부터 데이터를 읽기 위한 인터페이스.

  • Spring Batch 의 chunk 처리를 위해 필수적으로 존재해야한다.
  • Spring Batch 에서는 다양한 기본 구현체들을 제공한다.
  • 데이터를 1 건씩 읽어 Chunk 를 Chunk Size 만큼 채워서 생성한다.
  • 플랫 (txt, csv) 파일, XML, JSON, DB, MessageQueue 를 통한 Reader 구현체들을 기본 제공한다
  • ItemReader 를 상속하여 CustomItemReader 클래스를 직접 정의할 수도 있다.

ItemProcessor

  • Spring Batch 의 chunk 처리를 위해 필수적으로 존재하지 않아도 된다.
  • ItemProcessor 가 없으면 ItemReader 로부터 읽은 데이터를 그대로 ItemWriter 에 전달한다.
  • Chunk (리스트) 로 받은 데이터를 1 건씩 가공 (transform) 하여 ItemWriter 에 전달한다.

ItemWriter

  • Spring Batch 의 chunk 처리를 위해 필수적으로 존재해야한다.
  • Chunk (리스트) 로 받은 데이터를 벌크 (bulk) 로 목적지에 저장한다.
  • write 가 완료되면 commit 이 발생하고, 쓰는 도중 오류가 발생하면 rollback 이 발생한다.
    • 즉, 트랜잭션은 Chunk 단위로 이루어진다.

ItemStream

  • Spring Batch 가 기본 제공하는 ItemReader, ItemWriter 의 구현체들을 보면, ItemStream 인터페이스를 함께 구현하는 것을 확인할 수 있다.
  • ItemReader 와 ItemWriter 의 메타 데이터들을 저장하고, 작업 중 오류가 발생하면 해당 지점부터 재시작할 수 있도록 지원한다.
  • 리소스의 open, close 등 초기화(init)해제(release) 기능을 지원한다.
  • ExecutionContext 를 파라미터로 받아 상태 정보를 update 한다.
profile
A fast learner.

0개의 댓글