안녕하세요. IT 교육 전문가입니다.
로컬에서 H2 DB로 개발을 마쳤다면, 이제 실제 운영 서버인 MySQL이나 Oracle에 연결할 차례입니다.
하지만 인메모리 DB와 달리, 실제 RDBMS를 붙일 때는 드라이버 설정부터 스키마 초기화 전략까지 신경 써야 할 부분이 많습니다.
오늘은 실무에서 가장 많이 쓰이는 MySQL과 Oracle 데이터베이스 연동 가이드를 정리해 드립니다.
1. JDBC 드라이버 의존성 추가
먼저 build.gradle에 각 DB에 맞는 드라이버를 추가해야 합니다.
MySQL (Connector/J)
runtimeOnly 'com.mysql:mysql-connector-j'
Oracle (OJDBC)
runtimeOnly 'com.oracle.database.jdbc:ojdbc11'
2. application.yml 설정 (MySQL 편)
MySQL 8.0 이상을 기준으로 한 설정입니다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/batch_db?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username: root
password: password1234
driver-class-name: com.mysql.cj.jdbc.Driver
batch:
jdbc:
# 초기 1회만 always로 실행하여 테이블 생성 후, 운영 시 never로 변경 권장
initialize-schema: always
# DDL 스크립트 위치 명시 (필요시)
schema: classpath:org/springframework/batch/core/schema-mysql.sql
jpa:
database: mysql
database-platform: org.hibernate.dialect.MySQL8Dialect
주의할 점: 메타 테이블 생성
Spring Batch는 자신이 사용할 테이블(BATCH_JOB_INSTANCE 등)이 없으면 에러를 뱉습니다.
* 최초 실행 시: initialize-schema: always로 설정하면 Spring Boot가 알아서 schema-mysql.sql을 찾아 실행해 줍니다.
* 운영 배포 시: 테이블이 이미 존재하므로 never로 바꾸거나, validate 모드를 사용하는 것이 안전합니다.
3. application.yml 설정 (Oracle 편)
오라클은 설정이 약간 다릅니다.
spring:
datasource:
url: jdbc:oracle:thin:@localhost:1521:XE
username: batch_user
password: password1234
driver-class-name: oracle.jdbc.OracleDriver
batch:
jdbc:
initialize-schema: always
# 오라클용 스키마 스크립트 지정
schema: classpath:org/springframework/batch/core/schema-oracle.sql
jpa:
database: oracle
database-platform: org.hibernate.dialect.OracleDialect
4. 다중 데이터베이스 설정 (Advanced)
실무에서는 배치 메타 데이터는 MySQL에 저장하고, 비즈니스 데이터는 Oracle에서 읽어오는 경우가 많습니다. 이때는 DataSource를 2개 등록해야 합니다.
@Configuration
public class DataSourceConfig {
// 1. 메타 데이터용 DB (Primary)
@Primary
@Bean
@ConfigurationProperties(prefix = "spring.datasource.meta")
public DataSource metaDataSource() {
return DataSourceBuilder.create().build();
}
// 2. 비즈니스 데이터용 DB
@Bean
@ConfigurationProperties(prefix = "spring.datasource.biz")
public DataSource bizDataSource() {
return DataSourceBuilder.create().build();
}
}
이후 JobConfig나 Reader에서 @Qualifier("bizDataSource") 등을 통해 원하는 DB를 주입받아 사용하면 됩니다.
5. 트러블슈팅 가이드
Q1. “Table doesn’t exist” 에러가 나요!
- 원인: 메타 테이블이 생성되지 않았습니다.
- 해결:
spring.batch.jdbc.initialize-schema: always로 설정하고 한 번 실행하세요. 혹은org/springframework/batch/core/schema-*.sql파일을 찾아 DB 툴에서 직접 실행하세요.
Q2. MySQL에서 “Public Key Retrieval is not allowed” 에러
- 해결: JDBC URL에
&allowPublicKeyRetrieval=true&useSSL=false옵션을 추가하세요.
6. 결론
H2에서 실제 DB로의 전환은 배치 애플리케이션이 ‘장난감’에서 ‘제품’으로 넘어가는 순간입니다.
데이터베이스별 특성(방언, 드라이버)을 잘 이해하고 설정을 분리하여 관리한다면, 어떤 환경에서도 안정적으로 돌아가는 배치를 만들 수 있습니다.






