Spring Batch Architecture

숭맹이·2025년 4월 24일

🧱 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 같은 표준 처리 유틸리티 활용

📦 입력 소스에 따른 분류

  • DB 기반 / 파일 기반 / 메시지 기반

⚙️ 배치 처리 전략

1. 일반 배치 처리

  • 단순 배치 윈도우에서 실행
  • 단일 커밋, 락 고려 필요 없음

2. 온라인과 동시 처리

  • 락을 최소화하는 Optimistic Locking 또는 Pessimistic Locking 전략 필요
// Optimistic 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) 신중 설계

✔ 파라미터 자동 전달 구조 구축

  • 실행 전 파라미터 유효성 검증 포함
  • 파티션 간 격리 및 실패 시 재시도 처리 설계 포함
profile
👨🏻‍💻 Backend Developer

0개의 댓글