Skip to content

Commit

Permalink
2024-12-03_Spring_Batch
Browse files Browse the repository at this point in the history
  • Loading branch information
devnine-codes committed Dec 3, 2024
1 parent 96f9dbe commit 23e8f73
Showing 1 changed file with 108 additions and 0 deletions.
108 changes: 108 additions & 0 deletions 2024/12/2024-12-03_Spring_Batch/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Spring Batch

오늘은 **Spring Batch**에 대해 작성해보려 한다.
Spring Batch는 대용량 데이터 처리에 특화된 Spring Framework의 하위 프로젝트로, 안정적이고 효율적인 배치 처리 기능을 제공한다.
특히, 데이터 읽기, 처리, 쓰기 과정을 정의하고 실행할 수 있는 유연한 구조를 제공하여, 다양한 데이터 처리 요구사항을 만족시킬 수 있다.

---

## 1. Spring Batch란?

Spring Batch는 **대량 데이터 처리**를 위해 설계된 프레임워크로, 정기적인 데이터 처리 작업을 자동화하거나 반복적으로 실행할 수 있는 배치 애플리케이션 개발을 지원한다.
다음과 같은 주요 기능을 제공한다:

- **데이터 읽기, 처리, 쓰기 기능**
파일, 데이터베이스, API 등 다양한 데이터 소스로부터 데이터를 읽고, 처리한 후 다른 데이터 소스에 저장할 수 있다.

- **스케줄링 지원**
Cron 표현식 등을 사용하여 정기적으로 작업을 실행할 수 있다.
(Spring Batch 자체에는 스케줄링 기능이 없으나, Spring Scheduler나 Quartz와 연동 가능)

- **체계적인 오류 처리 및 재시작 기능**
작업 중 오류가 발생한 경우 특정 단계부터 다시 시작할 수 있는 기능을 제공한다.

---

## 2. Spring Batch의 주요 구성 요소

### **1) Job**
- 배치 프로세스의 논리적인 컨테이너.
- 하나 이상의 Step으로 구성된다.

### **2) Step**
- Job 내에서 실행되는 개별적인 처리 단위.
- 각 Step은 **ItemReader**, **ItemProcessor**, **ItemWriter**로 구성된다.

### **3) ItemReader**
- 데이터를 읽어오는 역할.
- 예: CSV 파일, 데이터베이스, API 등을 소스로 사용 가능.

### **4) ItemProcessor**
- 데이터를 변환하거나 필터링하는 역할.
- 예: 데이터의 유효성을 검사하고, 포맷을 변환.

### **5) ItemWriter**
- 처리된 데이터를 최종적으로 저장하는 역할.
- 예: 다른 데이터베이스로 저장하거나 파일에 기록.

---

## 3. Spring Batch의 동작 흐름

1. **JobLauncher**가 Job을 실행한다.
2. Job은 순차적으로 여러 Step을 실행한다.
3. 각 Step은 데이터를 읽고(ItemReader), 처리하고(ItemProcessor), 저장(ItemWriter)한다.
4. 작업 상태(성공, 실패 등)가 JobRepository에 기록된다.
5. 작업 중 문제가 발생하면 오류를 처리하거나, 필요한 경우 작업을 재시작할 수 있다.

---

## 4. Spring Batch의 장점

### **1) 대용량 데이터 처리**
Spring Batch는 수백만 건 이상의 데이터를 효율적으로 처리할 수 있는 구조를 제공한다.
Chunk 기반 처리를 통해 메모리 사용량을 최소화하면서 대량 데이터를 처리할 수 있다.

### **2) 유연한 설정**
Spring Batch는 XML 또는 Java Config를 통해 유연하게 작업 흐름을 설정할 수 있다.
Job과 Step을 분리하여 재사용성과 유지보수성을 높일 수 있다.

### **3) 트랜잭션 관리**
각 Step 또는 Chunk 단위로 트랜잭션을 관리하여 데이터의 무결성을 보장한다.

### **4) 강력한 오류 처리**
Spring Batch는 작업 중 발생한 오류를 체계적으로 관리하고, 필요한 경우 특정 지점부터 재시작할 수 있는 기능을 제공한다.

---

## 5. Spring Batch 적용 시 주의사항

### **1) 적절한 Chunk 크기 설정**
- Chunk 크기는 데이터 소스와 처리 속도에 따라 달라질 수 있다.
- 너무 작은 Chunk 크기는 성능 저하를, 너무 큰 크기는 메모리 사용량 증가를 초래할 수 있다.

### **2) 리소스 관리**
- 배치 작업은 대량 데이터를 처리하기 때문에 CPU, 메모리, 네트워크 리소스를 적절히 관리해야 한다.

### **3) 로그와 모니터링**
- 배치 작업 중 발생하는 상태와 오류를 추적하기 위해, 로깅과 모니터링 시스템을 통합하는 것이 중요하다.

### **4) 재시작과 복구 전략**
- 오류 발생 시 작업을 다시 실행할 수 있도록 적절한 복구 전략을 수립해야 한다.

---

## 6. Spring Batch의 활용 예시

- **ETL 작업**: 대량 데이터를 읽어와 변환한 뒤 데이터 웨어하우스에 저장.
- **정산 작업**: 금융 데이터를 처리하여 정산 보고서를 생성.
- **데이터 마이그레이션**: 한 데이터베이스에서 다른 데이터베이스로 데이터 이동.
- **주기적 리포트 생성**: 매일의 데이터를 기반으로 리포트를 자동 생성.

---

## 결론

Spring Batch는 대규모 데이터 처리가 필요한 환경에서 신뢰성과 유연성을 제공하는 강력한 도구다.
특히, 데이터를 읽고 처리하고 저장하는 구조가 체계적이고 재사용성이 높아 유지보수에 유리하다.
다만, 대량 데이터 처리의 특성상 리소스 관리와 Chunk 크기 설정 등 세부적인 조율이 필요하며, 이를 통해 최적의 성능을 발휘할 수 있다.

0 comments on commit 23e8f73

Please sign in to comment.