2020. 7. 2. 19:01ㆍJava/Spring
Batch Application
Batch는 일괄처리 라는 뜻을 가지고 있습니다. 만약 하루 전 날의 데이터를 집계해야한다고 가정해보겠습니다. 하루 전 날의 데이터들을 모으면 상당히 많은 양의 데이터가 모입니다. 이렇게 큰 데이터를 읽고 가공하고 저장한다면 해당 서버는 순식간에 CPU, I/O등의 자원을 다 써버려서 다른 Request를 처리하지 못합니다. 그리고 이 기능은 하루에 1번 수행됩니다. 이를 위해 API를 구성하는 것은 많은 낭비입니다.이렇게 단발성으로 대용량의 데이터를 처리하는 Application을 Batch Application이라고 합니다. Batch Application은 다음의 조건들을 만족해야만 합니다.
- 대용량 데이터: Batch Application은 대량의 데이터를 가져오거나 전달하거나 계산하는 등의 처리를 할 수 있어야 합니다.
- 자동화: Batch Application은 심각한 문제 해결을 제외하고는 사용자 개입 없이 실행되어야 합니다.
- 견고성: Batch Application은 잘못된 데이터를 충돌 / 중단 없이 처리할 수 있어야 합니다.
- 신뢰성: Batch Application은 무엇이 잘못되었는지를 추적할 수 있어야 합니다.(로깅, 알림)
- 성능: Batch Application은 지정한 시간 안에 처리를 완료하거나 동시에 실행되는 다른 Application을 방해하지 않도록 수행되어야 합니다.
Spring Batch
Spring Batch란 Spring MVC 모델을 기반으로 개발자가 최대한 비즈니스 로직에 집중해 개발할 수 있도록 만든 오픈 소스 프레임워크입니다.
Spring Batch의 구성
Job
Job은 배치 처리 과정을 하나의 단위로 만들어 표현한 객체입닌다. 또한 전체 배치 처리에 있어 항상 최상단 계층에 있습니다. 위의 그림을 보면 Job과 Step은 1:M의 관계를 가지고 있습니다. 이처럼 하나의 Job(작업) 안에는 여러 Step(단계)가 있습니다. Spring Batch에서 Job 객체는 여러 Step 인스턴스를 포함하는 컨테이너입니다.
JobInstance
JobInstance는 Batch 처리에서 Job이 실행될 때 Job 실행 단위입니다. 만약 하루에 한 번씩 Batch의 Job이 실행된다면 어제와 오늘 각각 Job을 JobInstance라고 할 수 있습니다.
JobExecution
JobExcution은 JobInstance에 대한 한 번의 실행을 나타내는 객체입니다.
Step
Step은 실직적인 배치 처리를 정의하고 제어하는데 필요한 모든 정보가 있는 도메인 객체입니다. Job을 처리하는 실질적인 단위입니다. 참고로 모든 Job에는 1개 이상의 Stpe이 있어야 합니다.
JobRepository
JobRepository는 배치 처리 정보를 담고 있는 매커니즘입니다. 어떤 Job이 실행되었으면 몇번 실행되었고 언제 끝났는지 등 배치 처리에 대한 메타 데이터를 저장합니다.
Spring Batch vs Quartz
Spring Batch는 대용랑 데이터의 일괄 처리에 대한 기능을 수행할 수 있습니다. 하지만 언제, 어느 시간에 배치 처리를 수행할지 결정하는 스케줄러를 포함하고 있지 않습니다. 그래서 Quartz와 같은 스케줄러를 함께 사용해 정해진 스케줄마다 Quartz가 Spring Batch를 실행할 수 있도록 도와줍니다.
'Java > Spring' 카테고리의 다른 글
Spring WebFlux (0) | 2020.09.13 |
---|---|
Spring boot 와 Spring Legacy 비교 (0) | 2020.09.10 |
Spring Boot (0) | 2020.06.09 |
Transaction Template (1) | 2020.05.07 |
Spring Singleton (0) | 2020.05.01 |