이전 블로그에서 Spring Scheduler를 사용하며 간단하게 스케줄링 작업을 하고 스케줄링 작업에 대해서 간단하게 로직을 컨트롤 할 수 있음을 배웠다.
해당 블로그 -> Spring Scheduler
스케줄링 작업하는데 작업이 100만개 이상의 예약 작업이 있다고 생각해보자.
예를 들어서 은행의 이자 시스템같은 경우 수 많은 계좌에 특정 시간에 이자를 넣어줘야하는데 이럴 경우 대규모 트랜잭션이 발생하는데 이러한 경우 Spring Scheduler만으로는 복잡한 트랜잭션 로직을 처리하기 까다로워보였고 기능이 부족해보였다.
이러한 부족함을 개선하기 위해 Spring Batch와 분산 작업 스케줄링 시스템의 조합 사용을 고려해야 하는게 좋아보였습니다.
Spring Scheduler부터 시작하여서 Spring Batch, Kafka를 알아보고 심화로 Quartz Scheduler와 Apache Spark까지 알아보겠습니다.
🥝 Spring Batch는 Java로 대규모 배치 처리 애플리케이션을 개발하기 위한 프레임워크입니다.
복잡한 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기/재시도 로직 등 대량의 레코드를 처리하는 데 필수적인 재사용 가능한 기능을 효율적으로 처리할 수 있도록 제공합니다.
등 다양한 상황에서 사용 할 수 있다.
이제 Spring Batch에서 사용되는 개념에 대해서 알아보도록 하자!
Spring Batch의 작업은 일괄 처리 작업을 관리하고 조정하는 기본 컨테이너입니다.
단계는 일괄 작업의 단일 단계를 나타냅니다. 여기에는 데이터 읽기, 처리 및 쓰기가 포함될 수 있습니다.
JobRepository는 Job 상태, Step 실행 상태 및 기타 관련 정보를 포함하여 배치 작업과 관련된 메타데이터를 저장하는 데 사용되는 데이터베이스(일반적으로 관계형)입니다.
JobLauncher는 Job 실행을 담당합니다.
일괄 작업에서 함께 처리되는 데이터 처리 단위
아래 부터는 Spring Batch의 트랜잭션 작업에 사용 되는 클래스나 인터페이스들에 대해서 알아 볼 것이다.
ItemReader는 데이터베이스, 파일 또는 기타 데이터 저장소와 같은 지정된 소스에서 데이터를 읽는 역할을 합니다.
ItemProcessor는 ItemWriter가 쓰기 전에 ItemReader가 읽은 데이터 항목을 처리합니다.
ItemWriter는 ItemProcessor에 의해 처리된 데이터 항목을 데이터베이스, 파일 또는 기타 데이터 저장소와 같은 지정된 대상에 씁니다.
Spring Batch는 Job 또는 Step 실행의 라이프사이클을 가로채는 리스너를 제공합니다.
- 리스너를 사용하면 작업이나 단계가 시작, 완료 또는 실패하기 전이나 후에 사용자 정의 코드를 실행할 수 있습니다.
아래에서는 위에서 배운 개념들을 어떻게 구성하고 사용되는지 대략적으로 알아 볼 것이다. 🧐
이 정도 이론적인 내용을 보았다면 충분하다! 이제 Spring batch의 세계로 들어가도 될 충분한 이론을 갖추었습니다.
만약 내용이 머리에 잘 와 닿지 않다면 Spring Batch를 사용한 코드를 보고 다시와도 늦지 않습니다!! 😊