스프링 배치 Step

스프링 배치 - Step

  • Job에 대한 순차적인 처리 단계를 의미

  • Step의 구현은 크게 두 가지로, 대부분 Chunk 기반을 수행하도록 구현한다.

  • Chunk 기반일 필요가 없거나 Reader-Processor-Writer의 처리단계를 거쳐야할 필요가 없다면, 별도의 Tasklet을 구현하여 수행할 수있다.


Step 구현

Tasklet

  • Tasklet은 Step에서 수행되는 로직을 의미한다.

1. Chunk-Oriented Processing

  • 일반적으로 많이 구현되는 Chunk 기반의 처리를 말한다.

    • 아이템(=데이터)을 하나씩 Read하고 Process한다.

    • 아이템들이 모여, 일정 수의 chunk가 되면(= commit interval에 도달하면) Write하고 트랜잭션이 Commit 된다.

      • 일정 수의 chunk(= commit interval) 개수는 설정할 수 있다.
      • 이처럼 원하는 단위로 트랜잭션을 묶을 수 있기때문에 대용량 데이터 처리를 쉽게 나눠서 처리할 수 있다.

2. Tasklet Step Oriented Processing

  • 개발자가 원하는 Custom Logic을 만들어 배치를 수행하는 방식이다.
  • 트랜잭션 단위가 TaskletStep 단위로 묶이므로, 대용량 데이터 처리를 하나의 트랜잭션에 묶지 않을 거라면 간단히 개발할 수 있다.

재시도와 스킵, 롤백

1. 재시도

  • retryable-exception-classes 속성으로 예외 클래스들을 정의하고 retry-limit 횟수를 설정하면, 해당 예외가 발생한 경우 지정한 횟수만큼 재시도한다.

2. 스킵

  • skippable-exception-classes 속성으로 예외 클래스들을 정의하고 skip-limit 횟수를 설정하면, 해당 예외가 발생한 경우 지정한 횟수 만큼 스킵하다가 넘어서면 예외를 전달하고 Step이 실패된다.

3. 롤백

  • 재시도와 스킵을 고려하지 않아서, Writer로 부터 예외가 발생하면 트랜잭션은 롤백이 수행된다. 특정 예외에는 롤백을 수행하지 않을 수 있다.

  • no-rollback-exception-classes 속성으로 예외 클래스들을 정의하면, 해당 예외들에 대해서는 롤백을 수행하지 않는다.

댓글