지나공 : 지식을 나누는 공간

[0] Spring Batch, Scheduler 카테고리를 여는 글 본문

Tech/Batch

[0] Spring Batch, Scheduler 카테고리를 여는 글

해리리_ 2022. 3. 16. 01:16

신입 과제에서 Scheduler를 사용할 것 같다. 주된 과제가 이건 아니고 Open API 데이터 매핑이 중요한거라 이걸 고민하는게 우선이긴 한데, 그래도 Scheduler를 조금이라도 다루고 있어서 배치 카테고리를 열었다. 게다가 해당 프로젝트를 나중에 Spring Boot Batch로 옮길 예정이라 하셨다. (이 업무가 나중에 내 업무가 될지는 모르겠지만)

 

암튼 내가 해당 업무를 맡지 않더라도 예전에 Spring Batch 공부를 아주 잠깐 했었으니 Scheduler 보는 김에 같이 보려 한다. 전에 급해서 아무 레포에나 Spring Batch를 정리해둔 적이 있는데 다시 볼 겸 첨부...! 관련 업무도 적혀있는 추억의 이슈ㅋㅋㅋ

 

https://github.com/Hae-Riri/today-alcohol/issues/16

 

스프링배치 · Issue #16 · Hae-Riri/today-alcohol

Spring Batch 일련의 작업을 정해진 로직으로 수행(일괄처리) 정해진 시간에 자동으로 진행되는 것들이 batch이고, 프로그래밍에서 function과 비슷하다. 어떻게 input/output을 정의하느냐에 따라 거의 모

github.com

https://github.com/Hae-Riri/today-alcohol/issues/17

 

Spring Batch 만들기 · Issue #17 · Hae-Riri/today-alcohol

Batch 목록 Job 생성하기 메타테이블 알아보기 BATCH_JOB_FLOW SCOPE CHUNK READER WRITER PROCESSOR Job 생성하기 spring-boot-starter-batch 를 추가해서 만들기 BatchApplication.java에 @EnableBatchProcessing을 추가해서 Spring Batch

github.com

 

서버에서 일괄 처리하는 방법에는 Spring Batch, Quartz, Scheduler가 있다. 오늘은 내가 참고할 Spring Batch 강의의 목차를 훑는 첫 강의를 통해 예전에 정리한 용어들을 가볍게 떠올리는 시간을 가졌다. 어렴풋한 기억들...ㅋㅋㅋㅋ

 

1. 2. Spring Batch 소개, 시작

Spring Batch 프로젝트를 만들고 간단하게 job을 구성해서 이걸 실행시키고 결과를 확인하는 일련의 과정을 알아본다.

 

3. Spring Batch 도메인 이해

Spring Batch는 여러 종류의 도메인을 제공한다. 도메인 하나하나가 Spring Batch를 구성하는 단위가 되고, Job, Step, Flow, Tasklet 등의 도메인이 있으며, Job에는 또 Job Instance, Job Execution 등의 도메인들이 또 있다. 그래서 이러한 도메인들을 알아보고 각각의 특징과 정의, 각각의 역할을 알아본다.

 

4. Spring Batch 실행

도메인에 대한 이해를 바탕으로 실제 각각의 도메인들을 실행시킨다. 하나의 완성된 Job을 실행시키는 것인데 이걸 간단히 구성할 수도 있고 복잡하게 구성할 수도 있다. 아무튼 이 Job을 실행시키면서 각각의 도메인들이 어떤 관계를 가지고 어떻게 진행되는지 흐름을 파악한다. Spring Batch를 실행했을 때 시작부터 종료까지 관계가 어떻게 이루어지고 DB가 어떻게 되는지 살펴본다.

 

5. 6. Spring Batch 청크 프로세스

데이터를 읽어들이고 가공해서 처리할 때 데이터가 대용량이라면 한번에 메모리에 올려서 처리하지 않는다. 메모리 용량에 리스크가 있으니까. 그래서 이런걸 chunk 기반으로 실행한다. 일정한 크기로 쪼개서 청크 단위로 데이터를 읽고 처리하고 저장하고 쓴다. 이를 통해 성능에 이점을 갖고 처리도 빠르게 할 수 있다. 이런 청크 기반의 프로세스가 어떻게 이루어지는지 알아본다.

 

7. Spring Batch 반복 및 오류 제어

Spring Batch는 Job을 구성하고 Job 안에 여러 단위를 구성해서 실행시키는데 각각의 단위가 내부적으로 반복 수행된다. 그래서 이 반복을 계속 할 건지 아니면 정리해서 반복을 이제는 끝낼 것인지 등을 설정한다. 이런 반복과 관련된 기능들을 어떻게 Spring Batch가 제공하고 있는지 알아보고 나름대로 커스터마이징해서 사용할 것이다. 그리고 Spring Batch에서 Job을 실행하다가 오류가 발생했을 때 그 오류를 확실하게 skip할 수도 있고 아니면 Job을 재실행할 수도 있는데 이러한 기능들을 알아본다.

 

8. Spring Batch 멀티 스레드 프로세싱

지금까지의 목차에서 말한건 기본적으로 싱글스레드다. 일반적으론느 싱글 스레드로 Spring Batch에 대한 Job을 하는 것도 무리가 없지만 용량이 매우 큰 데이터이거나 시간이 많이 소요되는 작업을 한다면 멀티스레드를 쓰는 게 좋겠지? 동시적으로 병렬적으로 배치를 처리한다면 더 많은 데이터를 처리할 수 있을테니까 이런 내용들을 알아본다.

 

9. Spring Batch 리스너

어떤 이벤트를 발생시키는 주체자가 있고 이걸 구독하는 구독자가 있을 때 여기서 구독자가 리스너다. 주체자 쪽에 어느 시점에 이벤트가 발생하면 자신에게 등록된 자신의 모든 리스너들에게 해당 이벤트 발생을 전달하고, 구독자는 처리하게 된다. Job이라는 단위가 있고 Step이 있으면 Job이 실행되기 전과 후에 리스너에게 이벤트를 통보한다. 그래서 Job에 해당되는 리스너를 등록하고 Step에 대한 리스너도 등록해두면 각각이 실행되는 시점에 리스너에들에게 이벤트 발생을 알리게 되고 그때 리스너들이 비즈니스 로직을 수행할 수 있다.

 

10. Spring Batch 테스트 및 운영

Spring Batch에도 TDD가 있다. 각 task 별로 테스트를 진행할 수 있다. 그리고 운영에 있어서는 간단하게 API를 제공한다. Job이 실행되는 도중에 Stop 해야 한다고 할 때, 혹은 중단된 배치를 다시 재실행해야 한다고 할 때 사용할 수 있는 API들이 있다. Spring Batch의 운영적인 관점에서 어떤 기능을 제공하는지 알아본다.

 

11. 번외편 -Spring Batchd와 Scheduler

Scheduler를 연동해서 실제 정해진 시간에 Spring Batch가 이뤄지는 걸 알아본다. Spring Batch는 혼자만으로는 스케줄러의 기능을 갖지 않는다. 사용자가 얘에 대한 액션을 해야만 한다. 즉, 어떤 시스템이 정해진 시간과 날짜에 Spring Batch가 실행되도록 만들어야 하는거지, Spring Batch만 있으면 스스로 스케줄링을 해서 일이 실행되는 게 아니다. 그래서 반드시 Scheduler와의 연동을 통해 만들어둔 Spring Batch가 잘 실행되게 해야 하고, 이 예제를 다룬다.

 

Spring Batch는 여러가지 Job들을 순차적으로 처리하는 것, Quartz와 Scheduler는 특정한 시간에 특정한 Job을 처리하는 것.

 

 

내용 출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard

728x90

'Tech > Batch' 카테고리의 다른 글

Spring Batch의 도메인 이해  (0) 2023.12.24
[2] Spring Batch 프로젝트 구성  (0) 2022.03.20
[1] Spring Batch 개요와 아키텍처  (1) 2022.03.17
Comments