트랜잭션과 롤백

트랜잭션

  1. 선언적 관리 : @Transactional과 같이 트랜잭션 경계를 줄 수 있습니다.
  2. 프로그래밍적 : PlatformTransasctionManager로 직접 과리하는 방법이다. 세밀한 제어를 제공할 수 있다. 그러나 많은 보일러플레이트 코드가 필요하다.

    롤백

  3. 기본 롤백 : UnCheckedException은 롤백을 발생시키고 CheckedException은 롤백을 유발하지 않는다.
  4. 사용자 정의 롤백 : RetryPolicy, SkipPolicy를 확장하여 사용자 정의 롤백을 구현할 수 있다.
  5. @Retryable, @Rollback사용 : 일시적인 실패에 대한 재시도 전략 정의, 비즈니스 논리 또는 발생 예외 유형을 지정하기 위해서 어노테이션을 제공한다.

    StepScope, JobScope

  6. StepScope:
    • 단계 범위로 선언된 빈은 각 단계 실행에 대해서 생성되고 관리된다.
    • 단계가 실행될 때마다 새로운 인스턴스가 생성된다.
    • 각 인스턴스는 고유한 상태를 포함한다는 것을 의마한다.
    • 트랜잭션이 단계 처리 내에서 수행되므로, 트랜잭션 컨텍스트는 단계 범위 내에서 설정되어 배치 작업이 다른 실행의 간섭 없이 데이터를 일관되게 관리할 수 있도록 한다.
  7. JobScope
    • 작업 범위로 표시된 빈은 전체 작업의 실행과 연결
    • 작업 실행 당 한 번 생성되며, 여러 단계에 걸쳐 상태를 유지할 수 있다.
    • 구성 또는 전체 작업에 공통 데이터를 보유하는 데 사용될 수 있다.
    • 단계별 인스턴스가 없기에 트랜잭션 컨텍스트에서 복잡성을 초래할 수 있다.

JobRepository

  1. Step 상태 관리 :
    1. Step은 고유 상태 값을 가지며 JobRepository는 이 상태를 추적하고 영속성을 이용하여 관리한다.
    2. 실패 발생 시 재시작 등과 같은 시나리오의 근거가 된다.
  2. 트랜잭션 관리 :
    1. 메타데이터가 제어된 방식으로 기록되도록 하여 트랜잭션 경계를 관리한다.
    2. 작업의 성공, 실패에 따라 상태를 커밋하거나 롤백할 수 있게 한다.
  3. 체크포인트 : 진행상황을 주기적으로 주기적으로 저장하여 마지막 체크포인트에서 재시작할 수 있게 한다.