🧱 Spring Batch 아키텍처 이해하기
Spring Batch는 대용량 데이터 처리에 특화된 프레임워크로, 다양한 사용자 니즈를 만족시키기 위해 계층화된 구조를 갖습니다. 아래는 핵심 구성 요소입니다.
✅ 주요 계층
- Application Layer: 사용자가 작성하는 Job, Step, 커스텀 리더/라이터 등
- Batch Core Layer:
JobLauncher, Job, Step 등의 핵심 런타임 컴포넌트 포함
- Infrastructure Layer:
ItemReader, ItemWriter, RetryTemplate 등 공통 유틸리티 제공
이러한 구조는 확장성, 테스트 용이성, 재사용성 측면에서 유리합니다.
📐 배치 시스템 설계 원칙
1. 온라인/배치 공존 고려
- 데이터 공유 및 락 전략을 함께 고려해야 함
- 커먼 컴포넌트 활용 권장
2. I/O 최소화
- 가능하면 메모리 내에서 처리
- 불필요한 SQL 쿼리 제거 (불필요한 재조회, 테이블 스캔 등)
3. 데이터 무결성 보장
- 체크섬, 레코드 수, 논리 검증 포함
- 재처리 방지 (처리 중에 합산 등을 같이 수행)
4. 스트레스 테스트 및 백업 고려
- 실제 운영량 수준에서 테스트 필요
- Flat 파일 기반일 경우, 파일 백업 절차도 중요
🧩 실무 배치 패턴 및 애플리케이션 유형
💡 애플리케이션 유형
- 변환(Conversion)
- 검증(Validation)
- 추출/업데이트(Extract/Update)
- 처리/포맷(Output/Format)
🧰 유틸리티 단계
- Sort / Split / Merge 같은 표준 처리 유틸리티 활용
📦 입력 소스에 따른 분류
⚙️ 배치 처리 전략
1. 일반 배치 처리
- 단순 배치 윈도우에서 실행
- 단일 커밋, 락 고려 필요 없음
2. 온라인과 동시 처리
- 락을 최소화하는 Optimistic Locking 또는 Pessimistic Locking 전략 필요
UPDATE customer
SET status = 'PROCESSED'
WHERE id = ? AND last_updated = ?
3. 병렬 처리
- 병렬 실행 시, 공유 리소스 락 관리 필요
- Control Table 방식 사용 가능
4. 파티셔닝 (Partitioning)
- 대용량 데이터를 여러 인스턴스로 분할 처리
- Spring Batch의
PartitionHandler 활용 가능
🔀 파티셔닝 전략 심층 분석
전략 1. 고정 분할
- 레코드를 일정 수로 나누어 처리 (pre-processing overhead 존재)
전략 2. 키 컬럼 기반 분할
location_code 등 특정 키 컬럼 기준 분할
전략 3. View 기반
전략 4. 처리 인디케이터 추가
- 상태 컬럼(예:
status) 기반 동시 실행 보장
전략 5. 테이블 → Flat File 추출 후 분할
전략 6. Hash 컬럼 추가
hash_key 로 구간 분배, 분산 제어 용이
🧠 실전 설계 팁
✔ 중앙 파티션 테이블 설계
CREATE TABLE partition_meta (
program_id VARCHAR(20),
partition_no INT,
key_low VARCHAR(100),
key_high VARCHAR(100),
PRIMARY KEY (program_id, partition_no)
);
✔ 데드락 방지
- 테이블 설계 시 인덱싱 전략 주의
- 핫스팟 테이블(예: log, control, lock table) 신중 설계
✔ 파라미터 자동 전달 구조 구축
- 실행 전 파라미터 유효성 검증 포함
- 파티션 간 격리 및 실패 시 재시도 처리 설계 포함