ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Batch] Job, ExecutionContext
    카테고리 없음 2021. 5. 15. 22:29

    Job

    애플리케이션이 사용자에게 비즈니스 가치를 제공할 때 어떠한 논리 흐름이 필요하다.

    예를 들어, 어떤 웹 애플리케이션은 사용자가 장바구니에 품목을 추가하고, 배송 주소를 입력하며, 지불 정보를 선택한 후에, 최종적으로 주문 내역을 확인 하는 것과 같은 장바구니 흐름을 가지고 있다. 

    잡은 이러한 흐름과 유사하다. 이 책(스프링 배치 완벽 가이드)에서는 잡을 처음부터 끝까지 독립적으로 실행할 수 있는 고유하며 순서가 지정된 여러 스텝의 목록이라고 정의한다. 

    • 유일하다
      • 스프링 배치의 잡은 코어 스프링 프레임워크를 사용한 빈 구성 방식과 동일하게 자바나 XML을 사용해 구성하며, 구성한 내용을 재사용 할 수 있다. 동일한 구성으로 필요한 만큼 잡을 실행할 수 있다. 잡을 여러 번 실행하려고 동일한 잡을 여러번 정의할 필요가 없다. 
    • 순서를 가진 여러 스텝의 목록이다. 
      • 장바구니 흐름의 예제로 돌아가보면 스텝의 순서가 중요하다는 것을 알 수 있다. 사용자가 배송지 주소를 적지 않았다면 주문 내역을 확인할 수 없다. 모든 스텝을 논리적인 순서대로 실행할 수 있도록 잡을 구성한다.
    • 처음부터 끝까지 실행 가능하다. 
      • 외부 의존성 없이 실행할 수 있는 일련의 스텝이다. 
    • 독립적이다.
      • 각 배치 잡은 외부 의존성의 영향을 받지 않고 실행할 수 있어야 한다. 그렇다고 잡이 의존성을 가질 수 없다는 것을 의미하지는 않는다. "Hello World"만을 프린트하는 것 같은 단순한 잡을 제외하면 실제 잡 중에 외부 의존성이 없는 잡은 많지 않다. 그러나 잡은 이러한 의존성을 관리할 수 있어야 한다. 만약 파일이 없다면 오류를 자연스럽게 처리할 것이며 파일이 전달될 때까지 기다리지 않는다. 잡의 실행은 스케쥴러와 같은 것이 책임진다. 

     

    ExecutionContext

    배치 잡이 실행되면 org.srpingframework.batch.core.JobInstace가 생성된다.

    JobInstace는 잡의 논리적 실행을 나타낸다. 각 JobInstance는 성공적으로 완료된 JobExcecution이 있다면 완료된 것으로 간주된다.

    JobExcecition은 잡 실행의 실제 시도를 의미한다. 잡이 처음부터 끝까지 단번에 실행 완료 됐다면 JobInstance와 JobExcetion은 단 하나씩만 존재한다. 하지만 첫 번째 잡 실행 후 오류 상태로 종료됐다면, 해당 JobInstance를 실행하려고 시도할 때마다 새로운 JobExcecution이 생성된다. 

     

    잡(Job), JobInstace, JobExcecition의 관계

     

    배치 처리는 특성상 상태를 가지고 있다. 현재 어떤 스텝이 실행되고 있는지 알아야 한다. 

    해당 스텝이 처리한 레코드 개수도 알아야 한다. 이를 비롯해 상태와 관련된 여러 다른 요소는 배치에서 진행 중인 처리뿐만 아니라 이전에 실패한 처리를 다시 시작하는데 필수적이다.

     

    예를 들어 밤새 1,000,000건의 트랜잭션을 처리하는 배치 처리가 900,000개의 레코드를 처리한 후에 멈춰버렸다고 가정해보자. 주기적으로 커밋을 했더라도 몇 번째 레코드에서부터 재시작하면 되는지 알아낼 수 있을까? 사용자가 실행 상태를 재설정하는 일은 매우 어려운 일이므로 스플이 배치가 이를 대신 처리해준다. 

     

    JobExectution은 잡이나 스텝이 진행될 때 변경된다. 잡 상태는 JobExcecution의 ExcecutionContext에 저장된다. 

    ExcecutionContext는 기본적으로 배치 잡의 세션이다. ExcecutionContext는 간단한 키-값 쌍을 보관하는 도구에 불과하다. 그러나 ExcecutionContext는 잡의 상태를 안전하게 보관하는 방법을 제공한다. 

     

    ExcecutionContext 사이의 관계

     

     

     


    스프링배치 완벽가이드, 마이클 미넬라 지음

     

    댓글

Designed by Tistory.