Spring Batch application.yml 설정 옵션 총정리 (프로퍼티 마스터하기)

안녕하세요.

Spring Batch를 사용하다 보면 “이 설정이 뭐였더라?” 하고 구글링을 하게 되는 순간이 옵니다. application.yml(또는 .properties)에는 배치의 동작 방식을 결정하는 매우 중요한 스위치들이 숨어 있습니다.

오늘은 Spring Boot 환경에서 Spring Batch를 제어하는 핵심 프로퍼티들을 완벽하게 정리해 드리겠습니다. 이 글 하나만 즐겨찾기 해두시면 설정 때문에 헤매는 일은 없을 겁니다.


1. 스키마 초기화 설정 (initialize-schema)

배치 실행에 필요한 메타 테이블(BATCH_JOB_INSTANCE 등)을 어떻게 생성할지 결정합니다.

spring:
  batch:
    jdbc:
      initialize-schema: always # [always, embedded, never]
  • always: 애플리케이션 시작 시 무조건 스키마 생성 스크립트를 실행합니다. (이미 존재하면 에러가 날 수 있으니 주의)
  • embedded: H2, HSQL 같은 내장 DB를 사용할 때만 생성합니다. (기본값)
  • never: 절대 생성하지 않습니다. 운영 환경에서는 DBA가 미리 테이블을 생성해 두므로 보통 이 옵션을 사용합니다.

Tip: 운영 배포 시 always로 되어 있으면, 애플리케이션 재기동마다 테이블 생성 쿼리가 날아가서 에러 로그가 남거나, 최악의 경우 데이터가 초기화될 위험(drop 옵션이 있을 경우)이 있습니다. 운영은 never 또는 validate가 국룰입니다.


2. 자동 실행 설정 (job.enabled)

애플리케이션이 뜰 때 등록된 Job들을 자동으로 실행할지 여부입니다.

spring:
  batch:
    job:
      enabled: true # [true, false]
  • true (기본값): 앱 구동 시 모든 Job을 실행합니다.
  • false: 자동 실행을 끕니다. API 요청이나 스케줄러(Jenkins, Quartz)를 통해 명시적으로 실행할 때 사용합니다.

3. 특정 Job만 실행하기 (job.names)

프로젝트에 Job이 10개 있는데, 개발 중에는 A_Job만 테스트하고 싶을 때 유용합니다.

spring:
  batch:
    job:
      names: myFirstJob, mySecondJob
  • 이 옵션이 설정되면, 앱 구동 시 여기에 명시된 Job들만 찾아서 실행합니다.
  • 콤마(,)로 구분하여 여러 개를 지정할 수 있습니다.
  • 비워두면 모든 Job이 실행 대상이 됩니다.

4. 테이블 접두사 변경 (table-prefix)

만약 회사 정책상 모든 테이블 앞에 SYSTEM_을 붙여야 한다면? 혹은 한 DB에서 여러 배치 프로젝트가 메타 테이블을 분리해서 써야 한다면?

spring:
  batch:
    jdbc:
      table-prefix: SYSTEM_BATCH_ # 기본값은 BATCH_

이렇게 설정하면 Spring Batch는 BATCH_JOB_INSTANCE 대신 SYSTEM_BATCH_JOB_INSTANCE 테이블을 찾습니다. 물론 테이블도 그 이름으로 생성되어 있어야 합니다.


5. JPA 관련 설정

Batch에서 JPA(JpaPagingItemReader 등)를 쓴다면 JPA 설정도 중요합니다.

spring:
  jpa:
    show-sql: true # 실행되는 SQL 콘솔 출력
    properties:
      hibernate:
        default_batch_fetch_size: 100 # N+1 문제 완화를 위한 배치 페치 사이즈
        jdbc:
          batch_size: 100 # Bulk Insert 성능 향상을 위한 JDBC 배치 사이즈
  • batch_size: 매우 중요합니다. ItemWriter가 1000개를 저장할 때, 이 옵션이 없으면 1000번의 Insert 쿼리가 나갑니다. 설정하면 100개씩 묶어서(Bulk) 10번만 나갑니다. 성능 차이가 큽니다.

6. 결론

application.yml은 배치의 운전대와 같습니다.
개발 환경(application-dev.yml)과 운영 환경(application-prod.yml)에서 이 옵션들을 적절히 다르게 가져가는 것이 실무 노하우의 핵심입니다.

  • 개발: initialize-schema: always, job.enabled: true
  • 운영: initialize-schema: never, job.enabled: false

이 규칙만 기억하셔도 큰 사고를 예방할 수 있습니다.

관련 글 보기