🧑💻
정산 시스템을 개발하는 과정에서 여러 사람들의 데이터를 활용해 정산을 진행해야 했다. 이 과정에서 Spring Batch를 활용하게 되었다.
그리하여 이번 포스팅에서는 Spring Batch가 무엇인지에 대해 알아보고자 학습하며 정리한 내용을 이야기해보고자 한다.
📚 Spring Batch
Spring Batch란 대용량의 데이터에 대한 일괄 처리 작업에 사용되는 프레임워크이다. 다시 말해, 한 번에 대량의 데이터를 처리하는 작업에 사용된다는 것이다.
예를 들어, DB나 파일에서 데이터를 가져와 모든 데이터에 동일한 연산을 수행하고, 이들을 다시 DB나 파일에 저장하는 경우에 유용하게 활용을 할 수 있다.
📚 Spring Batch의 구성 요소
Spring Batch의 구성 요소에 대해서 하나씩 간단히 이야기해 보며 설명해 보겠다.
💡 Job
배치 작업의 단위이다. 하나의 Job은 여러 Step으로 구성될 수 있다.
예를 들어, DB에서 모든 사용자 데이터를 읽어와 사용자들의 나이를 + 1 하고 저장하는 것과 사용자들의 통장잔고를 0으로 만들어버리는 것은 각각 별개의 Job이 될 수 있다.
💡 Step
Job을 구성하는 작은 단위의 작업이다. Job과 Step은 그들이 가진 의미는 불변하지만 어떠한 작업을 수행하게 할지는 정의하기 나름이다.
예를 들어, 위에서 정의한 2개의 Job인 사용자들의 나이 +1 하는 것과 사용자들의 통장잔고를 0으로 만드는 것 각각을 1개의 Step으로 만들 수도 있다는 것이다.
즉, 1개의 Job 내에 2개의 Step으로 구성을 할 수도 있다.
🧑💻
데이터를 읽는 작업, 처리하는 작업, 쓰는 작업 총 3가지는 각각의 Step으로 볼 수는 없고 무조건 하나의 Step 혹은 Job으로 보아야 된다고 한다.
💡 ItemReader
데이터를 읽어오는 인터페이스이다.
예를 들어, 데이터베이스에서 데이터를 읽어오거나 파일에서 데이터를 읽어올 때 사용된다.
💡 ItemProcessor
데이터를 처리하는 인터페이스이다.
ItemReader로 읽어온 데이터를 변환하거나 검증하는 작업을 수행한다.
💡 ItemWriter
데이터를 저장하는 인터페이스이다.
ItemProcessor에 의해 처리된 데이터를 데이터베이스에 저장하거나 파일에 기록할 때 사용된다.
💡 JobLauncher
Job을 시작하는 데 사용된다. JobLauncher에 의해 Job을 실행하면 이뤄지는 프로세스는 다음과 같다.
- ItemReader가 배치 작업할 데이터를 읽어온다.
- ItemProcessor가 ItemReader가 읽어온 데이터를 처리한다.
- ItemWriter가 ItemProcessor 처리한 데이터를 저장한다.
🧑💻
위의 Step에서 이야기했던 바와 같이, 각각을 Step으로 볼 수 없고 위의 3단계가 하나의 Step이 된다. 이러한 Step이 여러 개 모여 하나의 Job을 구성한다.
📌
하나의 Job 내에 여러 Step이 존재할 필요는 없기 때문에, Step이 하나라면 그 Step 자체가 Job이 될 수도 있다.
📌
💡 JobRepository
Job의 상태와 메타데이터를 저장한다.
✏️ Job의 상태
Job의 진행 상태를 나타낸다.
✏️ 메타데이터
Job 실행에 대한 추가적인 정보를 의미한다. 예를 들어, 실행 시간과 실행된 Step의 수 등을 나타낸다.
🧑💻
Spring Batch가 무엇인지에 대해서 알아보았다. 직접 적용은 이제 해봐야 하지만 사전 공부(?)를 하면서 알게 된 것은 Spring Batch 자체로는 대용량 데이터에 대한 일괄 처리에 유용하지만 이를 수동으로 해주어야 한다는 것이다.
때문에, 스케줄러가 무조건적으로 필요하다. Java에서 대표적으로 사용되는 스케줄러는 Quartz Scheduler나 Spring의 TaskScheduler가 있다고 하는데, 뭘 사용해야 할지는 스케줄러를 학습하면서 알아보기로 하겠다.
'TIL' 카테고리의 다른 글
함께 자라기 - 애자일로 가는 길 (2) | 2024.08.30 |
---|---|
즉시로딩 & 지연로딩 (0) | 2024.07.09 |
Annotation이란 무엇인가 (1) | 2024.06.30 |
MVC 모델이란? (0) | 2024.06.25 |
식별 관계 & 비식별 관계 (0) | 2024.06.19 |