λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Spring/Spring Batch

Spring Batch (1) κ°œμš”

by 주발2 2022. 10. 28.
λ°˜μ‘ν˜•

νšŒμ‚¬μ—μ„œ Spring Batch ν”„λ‘œμ νŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, λŒ€μš©λŸ‰μ˜ 데이터 μ²˜λ¦¬κ°€ μ•„λ‹Œ, λ‹¨μˆœ 1νšŒμ„± μ„œλΉ„μŠ€λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ λ ˆκ±°μ‹œ ν”„λ‘œμ νŠΈλ₯Ό Spring Batch ν”„λ‘œμ νŠΈλ‘œ μ‘°κΈˆμ”© μ΄κ΄€ν•˜κ³  μžˆλŠ”λ°μš”, 기쑴에 μž‘μ„±λœ μ½”λ“œλ₯Ό μ°Έκ³ ν•˜μ—¬ ν•„μš”ν•œ λΆ€λΆ„λ§Œ νŒŒμ•…ν•œ ν›„ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€λ³΄λ‹ˆ Spring Batch의 μ‚¬μƒμ΄λ‚˜ κ°œλ…, μœ μš©ν•œ κΈ°λŠ₯(skip, retry, chunk, listener λ“±λ“±)듀에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ§€ λͺ»ν•œμ±„ κ°œλ°œν•˜κ³  μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

 

λ”°λΌμ„œ Spring Batch ν”„λ‘œμ νŠΈμ˜ λ°°κ²½λΆ€ν„° κ°œλ…, μš©μ–΄, λ‹€μ–‘ν•œ κΈ°λŠ₯ 등등에 λŒ€ν•΄ μ •λ¦¬ν•˜μ—¬ ν•™μŠ΅ν•˜κ³ μž ν•©λ‹ˆλ‹€.

 

ν•΄λ‹Ή ν¬μŠ€νŒ…μ˜ λͺ©ν‘œ

  • Spring Batch μ†Œκ°œ
  • Spring Batch λ°°κ²½
  • Spring Batch μ•„ν‚€ν…μ²˜
  • Spring Batch ꡬ성도

 

 

Spring Batch μ†Œκ°œ

  • Spring BatchλŠ” μ—”ν„°ν”„λΌμ΄μ¦ˆ μ‹œμŠ€ν…œμ˜ 일상적인 μš΄μ˜μ— ν•„μˆ˜μ μΈ κ°•λ ₯ν•œ Batch Application의 κ°œλ°œμ„ κ°€λŠ₯ν•˜κ²Œ ν•˜λ„λ‘ μ„€κ³„λœ κ²½λŸ‰κΈ‰ 포괄적인 배치 ν”„λ ˆμž„μ›Œν¬
  • Spring BatchλŠ” λ‘œκΉ…/좔적, νŠΈλžœμž­μ…˜ 관리, Job 처리 μ „λž΅, Job Restart, Skip, Retry, λ¦¬μ†ŒμŠ€ 관리 λ“± λŒ€μš©λŸ‰ 데이터 μ²˜λ¦¬μ— ν•„μˆ˜μ μΈ μž¬μ‚¬μš© κ°€λŠ₯ν•œ κΈ°λŠ₯을 제곡

μ—”ν„°ν”„λΌμ΄μ¦ˆ λ„λ©”μΈμ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ μš΄μ˜μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λŒ€λŸ‰ μ²˜λ¦¬λŠ” λ‹€μŒκ³Ό 같은 사항듀이 μžˆμŠ΅λ‹ˆλ‹€.

  • μ‚¬μš©μžμ˜ μƒν˜Έ μž‘μš© 없이 κ°€μž₯ 효율적으둜 μ²˜λ¦¬λ˜λŠ” λŒ€λŸ‰ μ •λ³΄μ˜ μžλ™ν™”λœ λ³΅μž‘ν•œ 처리 - μ‹œκ°„ 기반의 이벀트(월말 계산, 톡지 λ“±)
  • 맀우 λ§Žμ€ 데이터 μ…‹μ—μ„œ 반볡적으둜 μ²˜λ¦¬λ˜λŠ” λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ˜ 주기적인 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜
  • Batch μ²˜λ¦¬λŠ” μ—”ν„°ν”„λΌμ΄μ¦ˆ ν™˜κ²½μ—μ„œ 맀일 μˆ˜μ‹­μ–΅ 건의 νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©

 

 

λ°°κ²½

  • λ‹€λ₯Έ κΈ°μˆ μ— λΉ„ν•΄ Java 기반 ν‘œμ€€ 배치 기술의 λΆ€μž¬
  • Batch μ²˜λ¦¬μ—μ„œ μš”κ΅¬ν•˜λŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ μžλ°” 기반의 배치 μ•„ν‚€ν…μ²˜ ν‘œμ€€μ΄ ν•„μš”ν•¨
  • SpringSource(ν˜„μž¬ Pivotal)와 Accenture(경영 μ»¨μ„€νŒ… κΈ°μ—…)의 ν•©μž‘ν’ˆμœΌλ‘œ Spring Batchκ°€ 개발됨
    • Accenture : 배치 μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬ν˜„ν•˜λ©° μŒ“μ€ 기술적인 κ²½ν—˜κ³Ό λ…Έν•˜μš°
    • SpringSource : 깊이 μžˆλŠ” 기술 κ²½ν—˜ 및 μŠ€ν”„λ§ 기반 ν”„λ‘œκ·Έλž˜λ° λͺ¨λΈ 제곡
  • 두 νšŒμ‚¬λŠ” Spring 기반 Batch μ•„ν‚€ν…μ²˜ μ†”λ£¨μ…˜μ„ κ°œλ°œν•˜μ—¬ μœ μ‚¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ§Žμ€ ν΄λΌμ΄μ–ΈνŠΈμ™€ ν˜‘μ—…ν•¨
  • AccentureλŠ” 이전에 μ†Œμœ ν•œ 배치 처리 μ•„ν‚€ν…μ²˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό Spring Batch ν”„λ‘œμ νŠΈμ— 기여함

 

 

Batch Usage Scenarios

배치 핡심 νŒ¨ν„΄

  • Read : λ°μ΄ν„°λ² μ΄μŠ€, 파일, 큐 λ“±μ—μ„œ λ‹€λŸ‰μ˜ 데이터λ₯Ό 쑰회
  • Process : νŠΉμ • λ°©μ‹μœΌλ‘œ 데이터λ₯Ό 처리(가곡)
  • Write : 데이터λ₯Ό μˆ˜μ •λœ ν˜•μ‹μœΌλ‘œ μ €μž₯(Write)

Spring BatchλŠ” μœ„μ™€ 같은 κΈ°λ³Έ 배치 λ°˜λ³΅μ„ μžλ™ν™”ν•˜μ—¬ μ‚¬μš©μžμ˜ μƒν˜Έ μž‘μš© 없이 μ˜€ν”„λΌμΈ ν™˜κ²½μ—μ„œ μœ μ‚¬ν•œ νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” κΈ°λŠ₯을 제곡

 

λΉ„μ¦ˆλ‹ˆμŠ€ μ‹œλ‚˜λ¦¬μ˜€

  • 배치 ν”„λ‘œμ„ΈμŠ€λ₯Ό 주기적으둜 일괄 컀밋
  • λ™μ‹œ 일괄 처리: Job의 병렬 처리
  • λŒ€κ·œλͺ¨ 병렬 배치 처리
  • μ‹€νŒ¨ ν›„ μˆ˜λ™ λ˜λŠ” μŠ€μΌ€μ€„λ§μ— μ˜ν•œ μž¬μ‹œμž‘
  • 의쑴 관계가 μžˆλŠ” Step μ—¬λŸ¬ 개λ₯Ό 순차적으둜 처리
  • Repeat, Retry, Skip λ“±μ˜ 처리

 

Spring Batch Architecture

Application 

  • μŠ€ν”„λ§ 배치 ν”„λ ˆμž„μ›Œν¬λ₯Ό 톡해 κ°œλ°œμžκ°€ λ§Œλ“  λͺ¨λ“  Batch Job, μ»€μŠ€ν…€ μ½”λ“œλ₯Ό 포함
  • κ°œλ°œμžλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 κ΅¬ν˜„μ—λ§Œ μ§‘μ€‘ν•˜κ³ , 곡톡적인 κΈ°μˆ μ€ ν”„λ ˆμž„μ›Œν¬κ°€ λ‹΄λ‹Ή

Batch Core

  • Job의 μ‹€ν–‰, λͺ¨λ‹ˆν„°λ§, 관리 API둜 ꡬ성
  • JobLauncher, Job, Step, Flow λ“±
  • Job의 λͺ…μ„Έμ„œ

Batch Infrastructure

  • Application, Core λͺ¨λ‘ 곡톡 Infrastructure μœ„μ—μ„œ λΉŒλ“œλ¨
  • Job μ‹€ν–‰μ˜ 흐름과 처리λ₯Ό μœ„ν•œ ν‹€ 제곡
  • Reader, Processor, Writer, Skip, Retry 등이 속함

 

Spring Batch ꡬ성도

  • JobLauncher : Job을 μ‹€ν–‰μ‹œν‚€λŠ” μ»΄ν¬λ„ŒνŠΈ
  • JobRepository : Job의 μ‹€ν–‰ 및 Job, Step 등을 μ €μž₯
  • Job : Batch Processing
  • Step : Batch Job의 μ—¬λŸ¬ 단계 (Jobκ³Ό 1 : N)
  • Item-Reader, Processor, Writer : 데이터λ₯Ό 읽고, μ²˜λ¦¬ν•˜κ³ , μ“°λŠ” ꡬ성 (Stepκ³Ό 1:1)

 

Job

  • Job은 전체 배치 ν”„λ‘œμ„ΈμŠ€λ₯Ό μΊ‘μŠν™”ν•œ 도메인
  • Step의 μˆœμ„œ μ •μ˜
  • Batch μž‘μ—…μ„ μ‹€ν–‰ν•  λ•Œ ν•„μš”ν•œ 데이터λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„(JobParameters) μˆ˜ν–‰μ΄ 됨 (Optional)

 

Step

  • Step은 배치 μž‘μ—…μ˜ 독립적이고 순차적인 단계λ₯Ό μΊ‘μŠν™”ν•˜κ³ , μ‹€μ œ 배치 μ²˜λ¦¬μ— λŒ€ν•œ μ •μ˜ 및 μ œμ–΄ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό ν¬ν•¨ν•˜λŠ” 도메인 객체
  • Chunk-oriented 처리 및 Tasklet 처리 방법이 μ‘΄μž¬ν•¨

 

Chunk Step 

  • Chunkλž€, 데이터λ₯Ό λ©μ–΄λ¦¬λ‘œ μž‘μ—…ν•  λ•Œ 각 컀밋 사이에 μ²˜λ¦¬λ˜λŠ” row 수λ₯Ό μ˜λ―Έν•¨
  • Chunk SizeλŠ” ν•œ λ²ˆμ— 처리될 νŠΈλžœμž­μ…˜μ˜ λ‹¨μœ„
  • Reader-Processor-Writer κ°€ ν•˜λ‚˜μ˜ Chunk의 νŠΈλžœμž­μ…˜ λ‹¨μœ„μ—μ„œ 싀행됨
  • 일반적으둜 Spring BatchλŠ” Chunk 지ν–₯ 처리λ₯Ό μ‚¬μš©ν•¨

Tasklet Step

  • ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ—μ„œ 데이터λ₯Ό 처리
  • λ‹¨μˆœν•œ 처리λ₯Ό ν•  λ•Œ μ‚¬μš©

 

 

μ°Έκ³  λ¬Έμ„œ

λ°˜μ‘ν˜•

λŒ“κΈ€