Spring Batch Architecture

2024. 5. 10. 23:56Β·πŸ“‚ backend/spring

1. Spring Batch??

μŠ€ν”„λ§ λ°°μΉ˜λŠ” ν•œλ§ˆλ””λ‘œ 이야기 ν•˜μžλ©΄ κ°œλ°œμžκ°€ μ •μ˜ν•œ μž‘μ—…μ„ μΌκ΄„μ²˜λ¦¬λ₯Ό μ§€μ›ν•˜λŠ” λͺ¨λ“ˆμ„ μ˜λ―Έν•œλ‹€. 일정 주기둜 μ‹€ν–‰ν•˜λŠ” λ‘œμ§μ„ λ³„λ„μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ μš©ν•¨μœΌλ‘œμ¨ ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΆ€ν•˜λ₯Ό λΆ„μ‚°μ‹œν‚€κ³  λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— 집쀑할 수 μžˆλŠ” μž₯점이 μžˆλ‹€. 그리고 μŠ€ν”„λ§μ—μ„œ μ œκ³΅ν•˜λŠ” Spring-Batch-Docs μ—μ„œλŠ” μ•„λž˜μ™€ 같이 λ°°μΉ˜κ°€ ν•„μš”ν•œ κ²½μš°μ— λŒ€ν•œ μ˜ˆμ‹œλ₯Ό μ •μ˜ν•˜κ³  μžˆλ‹€.

 

좜처 : spring-batch-docs

 

  1. νŠΉμ • μœ μ €μ™€μ˜ μƒν˜Έμž‘μš©μ΄ μ—†λŠ” λŒ€μš©λŸ‰ μžλ™ν™” ν”„λ‘œμ„ΈμŠ€, 주둜 μ‹œκ°„ 기반 이벀트(월말 μ •μ‚° 처리)κ°€ ν•„μš”ν•œ 경우
  2. λŒ€μš©λŸ‰ 데이터 셋을  반볡, 주기적으둜 ν”„λ‘œμ„Έμ‹±ν•˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우 (λ³΄ν—˜ ν˜œνƒμ„ μ •ν•˜κ±°λ‚˜ λ³΄ν—˜λ£Œλ₯Ό μ‘°μ •ν•˜λŠ” 일)
  3. λ‚΄ / μ™ΈλΆ€ μ‹œμŠ€ν…œμœΌλ‘œ λΆ€ν„° 받은 정보λ₯Ό ν†΅ν•©ν•˜λŠ” 일. 이 λ‚΄μš©μ—λŠ” ν¬λ§·νŒ…, μœ νš¨μ„± 검사, νŠΈλžœμž­μ…˜ λ°©μ‹μ˜ 처리λ₯Ό ν•„μš”λ‘œ ν•˜λŠ” κ²½μš°λ„ ν¬ν•¨ν•œλ‹€

 

2. Batch? Schedular?

 

λ°°μΉ˜μ™€ μŠ€μΌ€μ€„λŸ¬λŠ” μƒν˜Έλ³΄μ™„μ μΈ 역할을 ν•œλ‹€. λ°°μΉ˜λŠ” λŒ€μš©λŸ‰ 데이터λ₯Ό μΌκ΄„μ²˜λ¦¬ν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ μœ„ν•œ λͺ©μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” λͺ¨λ“ˆμ΄κ³ , μŠ€μΌ€μ€„λŸ¬λŠ” 일정 μ‹œκ°„μ— μ§€μ •ν•œ λ™μž‘μ„ ν•˜λŠ” 것을 λ§ν•œλ‹€. μŠ€μΌ€μ€„λŸ¬ QuartzλŠ” 일정 μ‹œκ°„μ— νŠΉμ • λ™μž‘μ„ μˆ˜ν–‰ν•˜λ„λ‘ ν•˜μ§€λ§Œ λŒ€μš©λŸ‰ 배치 μ²˜λ¦¬μ— κ΄€ν•œ κΈ°λŠ₯은 μ—†λ‹€.

 

 

3. Spring Batch Architecture

μŠ€ν”„λ§ 배치 μ•„ν‚€ν…μ²˜λŠ” Application, Batch Core, Batch Infrastructure 둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

  • Application : κ°œλ°œμžκ°€ Spring Batchλ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±ν•œ λͺ¨λ“  배치 μž‘μ—…κ³Ό μ‚¬μš©μž μ •μ˜ μ½”λ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.
  • Batch Core : 배치 μž‘μ—…μ„ μ‹œμž‘ν•˜κ³  μ œμ–΄ν•˜λŠ” 데 ν•„μš”ν•œ JobLauncher, Job 및 Step 와 같은 λŸ°νƒ€μž„ ν΄λž˜μŠ€κ°€ ν¬ν•¨ν•˜κ³  μžˆλ‹€.
  • Batch Infrastructure : κ°œλ°œμžκ°€ λͺ¨λ‘ μ‚¬μš©ν•˜λŠ” 곡톡 읽기 및 μ“°κΈ° 및 μ„œλΉ„μŠ€(e.g. RetryTemplate)λ₯Ό ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

spring-batch architecture

 

4. μŠ€ν”„λ§ 배치 메타 데이터

μŠ€ν”„λ§ 배치의 μ‹€ν–‰, 관리λ₯Ό μœ„ν•œ λͺ©μ μ˜ μ—¬λŸ¬ 도메인 정보듀을 μ €μž₯, μ—…λ°μ΄νŠΈ, μ‘°νšŒν•  수 μžˆλŠ” μŠ€ν‚€λ§ˆ μ œκ³΅ν•œλ‹€. λ³„λ„μ˜ μŠ€ν”„λ§ 배치 메타 데이터λ₯Ό DB μœ ν˜•λ³„λ‘œ μ œκ³΅ν•˜λ©°, ν”„λ‘œνΌν‹°λ₯Ό 톡해 μŠ€ν‚€λ§ˆ 생성을 μ„€μ •ν•  수 μžˆλ‹€.

  • μŠ€ν”„λ§ 배치 메타 데이터 μœ„μΉ˜
    • /org/springframework/batch/core/schema-*.sql
  • μŠ€ν‚€λ§ˆ 생성 μ„€μ • (spring.batch.jdbc.initialize-schema)
    • ALWAYS : 슀크립트 항상 μ‹€ν–‰
    • EMBEDDED : λ‚΄μž₯ DB 일 κ²½μš°μ—λ§Œ μ‹€ν–‰ (default)
    • NEVER : 슀크립트 항상 μ‹€ν–‰ μ•ˆν•¨ (운영 ν™˜κ²½μ—μ„œ ꢌμž₯)

좜처 : https://docs.spring.io/spring-batch/reference/schema-appendix.html#metaDataSchema

Job κ΄€λ ¨ ν…Œμ΄λΈ”

  1. BATCH_JOB_INSTANCE
    • Job 이 싀행될 λ•Œ JobInstance 정보λ₯Ό μ €μž₯ν•œλ‹€.
    • job_nameκ³Ό job_keyλ₯Ό ν‚€λ‘œ ν•˜μ—¬ ν•˜λ‚˜μ˜ 데이터가 μ €μž₯ν•˜λ―€λ‘œ λ™μΌν•œ job_name κ³Ό job_key 둜 쀑볡 μ €μž₯될 수 μ—†λ‹€.
  2. BATCH_JOB_EXECUTION_PARAMS
    • Jobκ³Ό ν•¨κ»˜ μ‹€ν–‰λ˜λŠ” JobParameter 정보λ₯Ό μ €μž₯ν•œλ‹€.
  3. BATCH_JOB_EXECUTION
    • JobExecution κ΄€λ ¨ 데이터가 μ €μž₯되며 Job 생성, μ‹œμž‘, μ’…λ£Œ μ‹œκ°„, μ‹€ν–‰μƒνƒœ, λ©”μ‹œμ§€ 등을 κ΄€λ¦¬ν•œλ‹€.
  4. BATCH_JOB_EXECUTION_CONTEXT
    • Job 의 μ‹€ν–‰λ™μ•ˆ μ—¬λŸ¬κ°€μ§€ μƒνƒœμ •λ³΄, 곡유 데이터λ₯Ό 직렬화 (Json ν˜•μ‹) ν•΄μ„œ μ €μž₯ν•œλ‹€.
    • Step κ°„ μ„œλ‘œ κ³΅μœ ν•  수 μžˆλ‹€.

 

Step κ΄€λ ¨ ν…Œμ΄λΈ” 

  1. BATCH_STEP_EXECUTION
    • Step 의 싀행정보가 μ €μž₯되며 생성, μ‹œμž‘, μ’…λ£Œ μ‹œκ°„, μ‹€ν–‰μƒνƒœ, λ©”μ‹œμ§€ 등을 κ΄€λ¦¬ν•œλ‹€.
  2. BATCH_STEP_EXECUTION_CONTEXT
    • Step 의 μ‹€ν–‰λ™μ•ˆ μ—¬λŸ¬κ°€μ§€ μƒνƒœμ •λ³΄, 곡유 데이터λ₯Ό 직렬화 (Json ν˜•μ‹) ν•΄μ„œ μ €μž₯ν•œλ‹€.
    • Step λ³„λ‘œ μ €μž₯되며 Step κ°„ μ„œλ‘œ κ³΅μœ ν•  수 μ—†λ‹€.

 



 

 

Reference

  • https://docs.spring.io/spring-batch/docs/current/reference/html/spring-batch-intro.html#spring-batch-intro
  • https://docs.spring.io/spring-batch/reference/schema-appendix.html#metaDataSchema
  • https://docs.spring.io/spring-batch/reference/spring-batch-architecture.html
  • https://docs.spring.io/spring-batch/reference/spring-batch-architecture.html
  • https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B0%B0%EC%B9%98/dashboard

'πŸ“‚ backend > spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

Spring Batch 기반 νšŒμ› μ‚­μ œ 배치 μ‚½μ§ˆ 기둝  (0) 2024.09.03
[Spring Batch] Job μ‹€ν–‰ ν”„λ‘œνΌν‹°, JobParameter, Scope  (0) 2024.08.26
hibernate.query.in_clause_parameter_padding = true ?  (1) 2024.03.06
JPA 에 UUID version 7 μ μš©ν•˜κΈ°  (0) 2024.03.04
[Spring] Spring AOP λ™μž‘ μ•Œμ•„λ³΄κΈ°  (0) 2024.03.04
'πŸ“‚ backend/spring' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • Spring Batch 기반 νšŒμ› μ‚­μ œ 배치 μ‚½μ§ˆ 기둝
  • [Spring Batch] Job μ‹€ν–‰ ν”„λ‘œνΌν‹°, JobParameter, Scope
  • hibernate.query.in_clause_parameter_padding = true ?
  • JPA 에 UUID version 7 μ μš©ν•˜κΈ°
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (84)
      • πŸ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • πŸ“‚ computer-science (5)
      • πŸ“‚ programming-language (12)
        • java (12)
      • πŸ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • πŸ“‚ cloud (2)
        • aws (2)
      • πŸ“‚ frontend (1)
        • react (0)
      • πŸ“‚ education & lecture (16)
        • 인프라 곡방 (11)
        • ν•­ν”Œ λ°±μ—”λ“œ 7κΈ° (5)
      • πŸ“‚ ai (1)
        • claude (1)
      • πŸ“‚ etc (2)
        • 회고 (1)
        • 컨퍼런슀 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    ν•­ν•΄ν”ŒλŸ¬μŠ€
    인프라곡방
    spring
    spring AOP
    spring camp 2025
    mysql
    AWS
    데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계
    nGrinder
    gof
    UUID
    λ™μ‹œμ„±
    회고
    kafka
    가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ 섀계
    JPA
    μŠ€ν”„λ§μΊ ν”„ ν›„κΈ°
    react
    Redisson
    spring-batch
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
cooper25
Spring Batch Architecture
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”