김지팡의 저장소
article thumbnail
Published 2024. 7. 1. 14:35
Spring Batch란? TIL
728x90

 

🧑‍💻

정산 시스템을 개발하는 과정에서 여러 사람들의 데이터를 활용해 정산을 진행해야 했다. 이 과정에서 Spring Batch를 활용하게 되었다.

 

그리하여 이번 포스팅에서는 Spring Batch가 무엇인지에 대해 알아보고자 학습하며 정리한 내용을 이야기해보고자 한다.

 

 

📚 Spring Batch

Spring Batch란 대용량의 데이터에 대한 일괄 처리 작업에 사용되는 프레임워크이다. 다시 말해, 한 번에 대량의 데이터를 처리하는 작업에 사용된다는 것이다.

 

예를 들어, DB나 파일에서 데이터를 가져와 모든 데이터에 동일한 연산을 수행하고, 이들을 다시 DB나 파일에 저장하는 경우에 유용하게 활용을 할 수 있다.

 

 

📚 Spring Batch의 구성 요소

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을 실행하면 이뤄지는 프로세스는 다음과 같다.

  1. ItemReader가 배치 작업할 데이터를 읽어온다.
  2. ItemProcessor가 ItemReader가 읽어온 데이터를 처리한다.
  3. 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가 있다고 하는데, 뭘 사용해야 할지는 스케줄러를 학습하면서 알아보기로 하겠다.

 

 

 

 

 

 

 

이미지 출처 : https://medium.com/@itsinil/spring-batch%EB%A5%BC-%ED%86%B5%ED%95%9C-%EB%8C%80%EC%9A%A9%EB%9F%89-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0-d4940e71824b

728x90

'TIL' 카테고리의 다른 글

함께 자라기 - 애자일로 가는 길  (2) 2024.08.30
즉시로딩 & 지연로딩  (0) 2024.07.09
Annotation이란 무엇인가  (1) 2024.06.30
MVC 모델이란?  (0) 2024.06.25
식별 관계 & 비식별 관계  (0) 2024.06.19
profile

김지팡의 저장소

@김지팡

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!