이 글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다. Spring Batch : SynchronizedItemStreamReader Spring Batch는 여러 멀티 쓰레드 환경에 Chunk 흐름을 제공한다. 멀티 쓰레드 환경에서 가장 조심해야 할 부분은 각 쓰레드가 서로에 영향을 미치지 않고 동작을 해야한다는 것이다. 먼저 데이터를 전달하는 관점에서 살펴본다. 위의 이미지는 ChunkOrientedTasklet의 Provider의 Provide 메서드다. Provide 메서드는 시작하자마자 새로운 Chunk를 만드는 것을 볼 수 있다. 이것은 Input Chunk인데, Input Chunk에 값을 채워서 Processor에 넘겨주고, Processor는 또 새로운 Chunk를 만들어서 전달해준..
이 게시글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다. Step Skip → Chunk에서 사용됨. Step을 실행하다보면, 실행 중에 Exception이 발생하는 경우가 있다. 그런데 이 Step의 데이터가 중요하지 않은 경우, 예를 들어 Log를 찍는 상황이라면 무시해도 충분할 것이다. 이처럼 중요하지 않은 Step에서 Exception이 발생했을 때, 이 부분을 무시하고 실행할 수 있는 것이 Step Skip이다. Skip Step 선언 Skip Step을 선언하기 위해서는 FaultTolerantBuilder를 만들어야한다. 이것은 Chunk 상태에서만 사용할 수 있는데, Chunk를 해서 ChunkStepBuilder로 만든 후 FaultTolerant() API를 이용하면 FaultT..
이 포스팅은 인프런 정수원님의 강의를 복습하며 작성한 글입니다. Partition Step 파티셔닝 Step은 멀티 쓰레드 환경을 이용해 보다 빠른 Batch Job 처리를 위해 스프링 배치가 지원하는 Step이다. 위의 그림으로 Partitioning Step을 이해할 수 있다. 메인 쓰레드는 Job을 실행시키고, 이 Job은 Master Step을 가진다. Master Step은 내부적으로 Slave Step을 하나 가지는데, 이 Slave Step을 멀티 쓰레드에서 분산처리 하도록 처리한다. 즉, 하나의 Slave Step이 있는데, 쓰레드 갯수만큼 Slave Step을 생성해서 동시에 처리하는 것으로 이해할 수 있다. 기본개념은 아래에서 확인할 수 있다. 기본개념 MasterStep이 Slave ..
이 게시글은 인프런 정수원님의 강의를 복습하며 작성한 글입니다 JobExplorer, JobRegistry, JobOperation Spring Batch는 Batch 처리 도움을 주기 위해 위의 객체를 제공한다. 위의 객체에 대한 정리는 아래에서 살펴보자. JobExplorer JobExplorer는 JobRepository의 읽기전용 모드임. 실행 중인 Job의 실행 정보인 JobExecution, StepExecution을 조회할 수 있음. → 꺼내서 Stop하는데 도움됨. JobRegistry 생성된 Job을 자동으로 등록, 추적 및 관리하며 여러 곳에서 Job을 생성한 경우 스프링 컨테이너에서 Job을 수집해서 사용할 수 있음. Job Registry의 기본 구현체는 MapJobRegistry임..
이 글은 인프런 정수원님의 강의를 보고 복습하며 정리한 글입니다. Listener 리스너는 배치 흐름 중에 Job, Step, Chunk 실행 전후에 어떤 일을 하도록 하는 Interceptor 개념의 클래스다. 스프링 MVC의 Interceptor가 실제로 HandlerAdapater 호출 전후로 Interceptor가 호출되는 것처럼 Job, Step, Chunk 전후로 오버라이딩된 메서드가 호출된다. 주로 각 단계별로 로그 기록을 남기거나, 진행된 시간, 실행 상태 정보들을 참조 및 조회하는데 도움이 된다. SpringBatch에서 Listener를 사용하기 위해서는 API 리스너에 리스너를 지정해주면 된다. Listener 종류 Job JobExecutionListener : Job 실행 전/후 ..