[Spring Batch] 메타 데이터 테이블 정리

2025. 4. 28. 23:59·Spring Framework/Spring
반응형
  • Spring Batch가 배치 작업의 실행 상태와 이력을 추적하기 위해 자동으로 생성하고 관리하는 테이블
  • 사용자가 직접 조작하지 않고, Spring Batch가 내부적으로 모든 배치 실행 정보를 기록
  • 해당 테이블을 사용해서 배치 작업 모니터링도 구현해볼 수 있다.
    • 실행 이력, 성공/실패 결과 등 다양한 정보를 제공

필요한 테이블의 DDL은 Spring Batch Github에서 확인할 수 있다. 여러 종류의 데이터 베이스에 대한 SQL 파일이 있어서 자신이 사용중인 데이터베이스에 맞는 쿼리를 가져와 사용하면 된다.

메타 테이블 목록

  • BATCH_JOB_INSTANCE : Job의 기본 정보(이름, hash key)
  • BATCH_JOB_EXECUTION : Job의 실행 이력 : job id, 실행시간, 상태, 실행결과
  • BATCH_JOB_EXECUTION_PARAMS : Job 실행 시 전달된 파라미터
  • BATCH_JOB_EXECUTION_CONTEXT : Job 실행 중 사용되는 상태, 정보
  • BATCH_STEP_EXECUTION : Step 실행 이력
  • BATCH_STEP_EXECUTION_CONTEXT : Step 실행 중 사용되는 상태, 정보

주요 정보

batch_job_instance

  • 등록된 Job을 식별하기 위한 정보를 저장한다.
  • Job Parameter와 조합해서 고유한 실행 인스턴스를 구별하는데 사용된다.
{
  "job_instance_id": 1,
  "version": 0,
  "job_name": "simpleProductUploadSkipJob",
  "job_key": "d4704a08e833f417e316a39fc4bd5896"
}

batch_job_execution_params

  • Job 실행 시 사용된 파라미터를 저장한다.
  • Job 실행마다 전달된 파라미터 값을 기록하며 실행 이력과 함께 파라미터 정보를 확인할 수 있다.
  • 실행 시 Job Instance와 조합해 중복 실행 여부를 판별한다.
  • 주요칼럼
    • 이름, 타입, 값 등 파라미터 정보
    • identifying : Job을 식별하기위 사용할지 말지
[
  {
    "job_execution_id": 1,
    "parameter_name": "chunkSize",
    "parameter_type": "java.lang.String",
    "parameter_value": "5",
    "identifying": "Y"
  },
  {
    "job_execution_id": 1,
    "parameter_name": "startedAt",
    "parameter_type": "java.time.LocalTime",
    "parameter_value": "22:10:20.8447863",
    "identifying": "Y"
  },
  {
    "job_execution_id": 1,
    "parameter_name": "maxSize",
    "parameter_type": "java.lang.String",
    "parameter_value": "20",
    "identifying": "Y"
  }
]

batch_job_execution

  • 실제 실행된 Job의 이력(실행 정보, 상태, 시간 등)을 저장
  • 한 Job 인스턴스가 여러 번 실행될 수 있으며 그때마다 execution이 만들어진다.
    • 실패 후 재실행 가능
  • 각각의 실행(예: 재시작, 실패 후 재실행) 정보를 관리
[
  {
    "job_execution_id": 1,
    "version": 2,
    "job_instance_id": 1,
    "create_time": "2025-07-11 22:10:20.876453",
    "start_time": "2025-07-11 22:10:20.906415",
    "end_time": "2025-07-11 22:10:21.122292",
    "status": "COMPLETED",
    "exit_code": "COMPLETED",
    "exit_message": "",
    "last_updated": "2025-07-11 22:10:21.122292"
  }
]

batch_job_execution_context

  • Job 레벨에서 사용하는 Context 정보를 저장
  • Job 전체에서 공유하거나 관리해야 할 임시 데이터, 상태 정보 등을 직렬화하여 저장
[
  {
    "job_execution_id": 1,
    "short_context": "rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABdAANYmF0Y2gudmVyc2lvbnQABTUuMi4xeA==",
    "serialized_context": null
  }
]

batch_step_execution

  • Job 내부의 각 Step 실행 정보를 저장
  • Job을 구성하는 각 Step의 실행 이력, 처리 건수, 상태 등을 관리
    • skip/retry 결과 추적 가능
  • 주요 칼럼
    • commit_count : Step 실행 중 트랜잭션이 커밋된 횟수
      • 청크 단위로 데이터를 처리할 때마다 커밋이 발생
    • read_count : ****읽은 ****총 아이템 개수
      • 데이터 소스에서 실제로 읽은 레코드 수.
    • filter_count : Processor에서 필터링된 아이템의 개수
      • Processor에서 null을 반환하거나 특정 조건으로 걸러진 아이템 수
    • write_count : Writer에서 처리한 아이템의 개수
    • read_skip_count : Reader에서 스킵된 아이템 개수
    • write_skip_count : Writer에서 스킵된 아이템 개수
    • process_skip_count : Processor 단계에서 스킵된 아이템 개수
    • rollback_count : Step 실행 중 트랜잭션이 롤백된 횟수
[
  {
    "step_execution_id": 1,
    "version": 10,
    "step_name": "simpleProductUploadSkipJobStep",
    "job_execution_id": 1,
    "create_time": "2025-07-11 22:10:20.986432",
    "start_time": "2025-07-11 22:10:20.999824",
    "end_time": "2025-07-11 22:10:21.111868",
    "status": "COMPLETED",
    "commit_count": 8,
    "read_count": 20,
    "filter_count": 0,
    "write_count": 18,
    "read_skip_count": 0,
    "write_skip_count": 1,
    "process_skip_count": 1,
    "rollback_count": 3,
    "exit_code": "COMPLETED",
    "exit_message": "",
    "last_updated": "2025-07-11 22:10:21.115693"
  }
]

batch_step_execution_context

  • 각 Step에서 사용하는 Context(상태, 체크포인트 등) 정보를 저장
  • Step 실행 중 유지해야 하는 데이터를 직렬화해서 저장
[
  {
    "step_execution_id": 1,
    "short_context": "rO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAADdAARYmF0Y2gudGFza2xldFR5cGV0AD1vcmcuc3ByaW5nZnJhbWV3b3JrLmJhdGNoLmNvcmUuc3RlcC5pdGVtLkNodW5rT3JpZW50ZWRUYXNrbGV0dAANYmF0Y2gudmVyc2lvbnQABTUuMi4xdAAOYmF0Y2guc3RlcFR5cGV0ADdvcmcuc3ByaW5nZnJhbWV3b3JrLmJhdGNoLmNvcmUuc3RlcC50YXNrbGV0LlRhc2tsZXRTdGVweA==",
    "serialized_context": null
  }
]

  • 이 메타 데이터 테이블들은 단순히 배치 작업의 실행 결과만 저장하는 것이 아니라, 장애 발생 시 재시작, 이력 관리, 그리고 운영 중 모니터링까지 다양한 영역에서 핵심적인 역할을 수행한다. 앞으로 배치 관련 작업을 할 때 문제가 발생하더라도 이번에 공부한 내용을 바탕으로 빠르게 해결할 수 있을 것 같다.
  • 본 포스팅에서는 생략했지만 각 테이블에 version 이라는 칼럼이 존재한다. 이는 낙관적 락을 위해 사용하는 칼럼인데, 이전에 공부했던 내용을 만나니 뭔가 반가운 기분이었다.
  • 처음 Spring Batch를 공부할 때는 모르는 도메인 용어가 많아서 어려웠다. 하지만 하나씩 어떤 역할을 하는지 따라가보니 구조에 대해서 어느정도 이해하게 되는 것 같다.
반응형
저작자표시 비영리 변경금지 (새창열림)
'Spring Framework/Spring' 카테고리의 다른 글
  • [Spring Batch] skip / retry
  • [Spring Boot] 자동 설정(Auto Configuration)
  • [JPA] 연관 관계
  • Interceptor
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (123)
      • Spring Framework (10)
        • Spring (5)
        • JPA (3)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    map
    C
    php
    자바
    웹
    파이썬
    memcached
    C++
    게임 개발
    딥러닝
    JS
    pytorch
    Unreal Engine
    FPS
    Unreal
    클래스
    언리얼엔진4
    NUXT
    PS
    select
    JavaScript
    MySQL
    알고리즘
    redis
    mscoco
    CPP
    게임
    Python
    블루프린트
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[Spring Batch] 메타 데이터 테이블 정리
상단으로

티스토리툴바