# 소스 실습 환경
- java : 21
- Spring Boot : 3.4.3
- DB : h2
!! 이제 실제 시나리오를 구성하고 코드 작성 후 실행시켜보자 !!
시나리오:
- User1 테이블에서 사용자들을 조회 후 User2 테이블에 마이그레이션 할 것이다.
- 이때 User2 에 이미 해당 사용자가 존재하면 해당 사용자는 마이그레이션 대상에서 제외된다.
- User1 에서 User2 로 마이그레이션 될 때, User2 테이블의 memo 라는 컬럼에 마이그레이션 된 시점이 기록되게 한다.
작업 시작 전 개인 메모
스프링 배치에서
reader > processor > writer 의 과정에서는
stepBulder 가 각 step 에서 사용한 데이터를 연계시키기 때문에
파라미터를 항상 비어있는 형태로 생성되며 따라서, 제네릭 선언부가 중요하다.
각 step 별 파일은 대규모 데이터를 처리하는 경우에는
각각의 파일에서 처리하여야 한데
나는 소규모의 경우이므로 reader, processor, writer 를 하나의 파일로 작성하였다.
- spring batch > step > reader 에서 pageSize 와 chunk
pageSize : 한 번에 읽어올 데이터의 배치 단위 크기
데이터가 적고 빠르게 처리 가능 | 10~100 |
대량 데이터 + DB 부하 고려 | 100~1000 |
네트워크 지연이 크거나 외부 API 연동 | 1~10 |
chunk()와 pageSize()는 같이 맞춰주는 게 일반적 >> 예: chunk(100)이면 pageSize(100)
너무 작으면 DB 호출 횟수 증가, 너무 크면 메모리 사용량 증가.
step 에서 각 작업 별 처리 단위량
read, process : 객체 하나 당
write : 미리 설정해둔 chunk 단위 묶음으로
코드 작성 시작 !!~
# 스프링 부트 3.x.x 버전 기준으로 작성한 소스
프로젝트 구조 : 이전 스케줄러 관련 프로젝트가 같은 패키지에 있는 상태에서 진행했음
소스 git 주소 : https://github.com/ljbok/schedulerbatch/tree/main
GitHub - ljbok/schedulerbatch: study of spring scheduler and batch
study of spring scheduler and batch. Contribute to ljbok/schedulerbatch development by creating an account on GitHub.
github.com
- 막상 공부하면서 소스 작성하다보니 바빠서 User1Dto, User2Dto 는 사용하지 않았다 그래서 깃허브에는 올렸지만, 아래 소스 기록에는 없음
# SchedulerbatchApplication (boot run application)
package com.study.schedulerbatch;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class SchedulerbatchApplication {
public static void main(String[] args) {
SpringApplication.run(SchedulerbatchApplication.class, args);
}
}
# User1
package com.study.schedulerbatch.domain.entity;
import jakarta.persistence.*;
import lombok.*;
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Entity
@Table(name = "user1")
public class User1 {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private int age;
private String username;
private String email;
private String password;
}
# User2
package com.study.schedulerbatch.domain.entity;
import jakarta.persistence.*;
import lombok.*;
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Entity
@Table(name = "user2")
public class User2 {
@Id
private Long id;
private int age;
private String username;
private String email;
private String password;
private String memo;
}
# UserBatchStep (step 정의 규모가 큰 경우 원래 Read, Process, Write 파일을 각각 분리해주는 것이 좋다.)
package com.study.schedulerbatch.batch.step;
import com.study.schedulerbatch.batch.listener.UserBatchListener;
import com.study.schedulerbatch.domain.entity.User1;
import com.study.schedulerbatch.domain.entity.User2;
import com.study.schedulerbatch.domain.repository.User1Repository;
import com.study.schedulerbatch.domain.repository.User2Repository;
import jakarta.annotation.PostConstruct;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.*;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.database.JpaPagingItemReader;
import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder;
import org.springframework.batch.item.validator.ValidationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.dao.TransientDataAccessException;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Optional;
@Slf4j
@Configuration
@RequiredArgsConstructor
public class UserBatchStep {
private final EntityManagerFactory entityManagerFactory;
private final JobRepository jobRepository;
private final PlatformTransactionManager transactionManager;
private final User1Repository user1Repository;
private final User2Repository user2Repository;
private final UserBatchListener userBatchListener;
public JobRepository getJobRepository() {
return jobRepository;
}
public PlatformTransactionManager getTransactionManager() {
return transactionManager;
}
// reader, processor, writer 정의 //////////////////////////////////////////////////////////////////////
// role : 데이터 읽어오기
private JpaPagingItemReader<User1> user1ListReader () {
return new JpaPagingItemReaderBuilder<User1>()
.name("userPrintReader")
.entityManagerFactory(entityManagerFactory)
.queryString("SELECT u FROM User1 u ORDER BY u.id ASC")// 여기서 주의 : SQL 문법 X , JPQL 문법 O
.pageSize(10)
.build();
}
// role : 데이터 변환하기
private ItemProcessor<User1, User2> user1to2MigrationProcessor () {
return user1 -> {
// 마이그레이션 할 데이터가 이미 User2 에 존재한다면 migration 대상에서 제외한다.
Optional<User2> exist = user2Repository.findById(user1.getId());
if (exist.isPresent()) {
log.info("이미 값이 있어서 배치 로직 중단 !! ");
return null;
}
String migratedAt = LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return User2.builder()
.id(user1.getId())
.age(user1.getAge())
.username(user1.getUsername())
.email(user1.getEmail())
.password(user1.getPassword())
.memo(migratedAt)
.build();
};
}
// role : 데이터 실제로 저장시키기
private ItemWriter<User2> user2ItemWriter () {
return user2 -> {
user2Repository.saveAll(user2);
};
}
// 위에서 정의한 reader, processor, writer 를 step 으로 정의하는 부분 ////////////////////////////////////////////
@Bean
public Step user1To2MigrationStep(JobRepository jobRepository,
PlatformTransactionManager transactionManager) {
log.info("user1To2MigrationStep 스텝 실행 !!!! ");
return new StepBuilder("user1To2MigrationStep", jobRepository)
.<User1, User2>chunk(10, transactionManager)
.reader(user1ListReader())
.processor(user1to2MigrationProcessor())
.writer(user2ItemWriter())
.faultTolerant()
.retry(TransientDataAccessException.class) // 일시적인 DB 접근 오류 발생 시 재시도
.retryLimit(3) // 청크당 3 회가 아니라 한 step 기준
.skip(NullPointerException.class) // null point exception 발생 시 스킵
.skipLimit(10) // 청크당 10 회가 아니라 한 step 기준
// .listener(userBatchListener) // 하나의 공통 리스터 클래스에 implements 여러개 해서 썼더니 프레임워크가 어느 인터페이스로 가지고 와야 하는지 몰라서 컴파일 에러남
.listener((ItemReadListener<? super User1>) userBatchListener)
.listener((ItemProcessListener<? super User1, ? super User2>) userBatchListener)
.listener((ItemWriteListener<? super User2>) userBatchListener)
.listener((SkipListener<? super User1, ? super User2>) userBatchListener)
.listener((StepExecutionListener) userBatchListener)
.build();
}
}
# UserBatchListener
- 원래 listener 타입 별로 파일을 나누는게 맞으나 테스트 편의성을 위해 stepExcuttion 리스너에만 stepName 으로 분기처리 하였고,
- 나머지 행위에 대한 lietener 는 별로도 분기처리하지 않았다.
- implements 에 여러개의 listener 를 상속받아 하나의 listener 클래스 파일로 관리하기 위함
- 단 이렇게 작성하는 경우 위 step configuration 에서 .listener 부분에서 하나의 listener 파일을 다른 타입으로 바꿔가며 사용해줘야함, 원래는 각자 다른_ 역할에 맞게 분리된 리스너 클래스가 들어가는게 적절할 수 있음
package com.study.schedulerbatch.batch.listener;
import com.study.schedulerbatch.domain.entity.User1;
import com.study.schedulerbatch.domain.entity.User2;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.*;
import org.springframework.batch.core.ItemProcessListener;
import org.springframework.batch.core.ItemReadListener;
import org.springframework.batch.core.ItemWriteListener;
import org.springframework.batch.core.SkipListener;
import org.springframework.batch.item.Chunk;
import org.springframework.stereotype.Component;
import java.util.List;
@Slf4j
@Component
public class UserBatchListener implements
JobExecutionListener,
StepExecutionListener,
ItemReadListener<User1>,
ItemProcessListener<User1, User2>,
ItemWriteListener<User2>,
SkipListener<User1, User2> {
private static final String USER_1TO2_MIGRATION = "user1To2MigrationStep";
// 🔹 StepExecutionListener
@Override
public void beforeStep(StepExecution stepExecution) {
String stepName = stepExecution.getStepName();
log.info("[STEP START] stepName={}", stepName);
if (USER_1TO2_MIGRATION.equals(stepName)) {
log.info("[beforeStep] 아직 데이터 접근 전 단계입니다.");
}
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
String stepName = stepExecution.getStepName();
long readCount = stepExecution.getReadCount();
long writeCount = stepExecution.getWriteCount();
long skipCount = stepExecution.getSkipCount();
if (USER_1TO2_MIGRATION.equals(stepName)) {
log.info("[STEP END] stepName={}", stepName);
log.info("읽은 USER1 수: {}", readCount);
log.info("마이그레이션된 USER2 수: {}", writeCount);
log.info("스킵된 수: {}", skipCount);
}
return ExitStatus.COMPLETED;
}
// 🔹 JobExecutionListener
@Override
public void beforeJob(JobExecution jobExecution) {
log.info("[JOB START] jobName={}", jobExecution.getJobInstance().getJobName());
}
@Override
public void afterJob(JobExecution jobExecution) {
log.info("[JOB END] status={}", jobExecution.getStatus());
}
// 🔹 ItemReadListener
@Override
public void beforeRead() {
log.info("[READ START]");
}
@Override
public void afterRead(User1 item) {
log.info("[READ END] ID={}, DATA={}", item.getId(), item);
}
@Override
public void onReadError(Exception ex) {
log.error("[READ ERROR] {}", ex.getMessage());
}
// 🔹 ItemProcessListener
@Override
public void beforeProcess(User1 item) {
log.info("[PROCESS START] USERNAME={}", item.getUsername());
}
@Override
public void afterProcess(User1 item, User2 result) {
if (result != null) {
log.info("[PROCESS END] USERNAME={} → {}", item.getUsername(), result.getUsername());
} else {
log.info("[PROCESS SKIPPED] USERNAME={} → result=null", item.getUsername());
}
}
@Override
public void onProcessError(User1 item, Exception e) {
log.error("[PROCESS ERROR] USERNAME={}, reason={}", item.getUsername(), e.getMessage());
}
// 🔹 ItemWriteListener
@Override
public void beforeWrite(Chunk<? extends User2> items) {
log.info("[WRITE START] 대상 수={}건, 리스트={}", items.size(), items);
}
@Override
public void afterWrite(Chunk<? extends User2> items) {
log.info("[WRITE END] 마이그레이션 완료: {}건", items.size());
}
@Override
public void onWriteError(Exception exception, Chunk<? extends User2> items) {
log.error("[WRITE ERROR] reason={}, 대상 수={}", exception.getMessage(), items.size());
}
// 🔹 SkipListener
@Override
public void onSkipInRead(Throwable t) {
log.warn("[SKIP READ] reason={}", t.getMessage());
}
@Override
public void onSkipInProcess(User1 item, Throwable t) {
log.warn("[SKIP PROCESS] ID={}, USERNAME={}, reason={}", item.getId(), item.getUsername(), t.getMessage());
}
@Override
public void onSkipInWrite(User2 item, Throwable t) {
log.warn("[SKIP WRITE] ID={}, USERNAME={}, reason={}", item.getId(), item.getUsername(), t.getMessage());
}
}
# UserBatchJob
package com.study.schedulerbatch.batch.job;
import com.study.schedulerbatch.batch.step.UserBatchStep;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@RequiredArgsConstructor
public class UseBatchJob {
private final JobRepository jobRepository;
private final UserBatchStep userBatchStep; // Step을 정의한 클래스
@Bean
public Job userMigrationJob() {
return new JobBuilder("userMigrationJob", jobRepository)
.start(userBatchStep.user1To2MigrationStep(jobRepository, userBatchStep.getTransactionManager()))
.build();
}
}
# UserBatchRunner (배치 로직 실행시키는 곳)
package com.study.schedulerbatch.batch.runner;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class UserBatchRunner {
private final JobLauncher jobLauncher;
private final Job userMigrationJob;
@PostConstruct
public void runJob() {
try {
JobParameters jobParameters = new JobParametersBuilder()
.addLong("timestamp", System.currentTimeMillis()) // 유니크 파라미터
.toJobParameters();
jobLauncher.run(userMigrationJob, jobParameters);
} catch (Exception e) {
e.printStackTrace();
}
}
}
# UserBatchConfig
package com.study.schedulerbatch.batch.configuration;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
@Slf4j
@RequiredArgsConstructor
@Configuration
public class UserBatchConfig {
private final JobRepository jobRepository;
private final PlatformTransactionManager transactionManager;
}
# applicaion.yml (배치 관련 세팅하는데 애 좀 먹어서 기록 ,,,)
spring:
application:
name: schedulerbatch
# JPA가 먼저 초기화되도록 설정
jpa:
defer-datasource-initialization: true
hibernate:
# ddl-auto: create # 애플리케이션 시작 시 테이블 생성
ddl-auto: update # 기존 테이블 유지
show-sql: true # SQL 로그 출력
database-platform: org.hibernate.dialect.H2Dialect # H2 전용 Dialect
datasource:
# 파일 기반 H2 DB 인메모리 방식 - > url: jdbc:h2:mem:testdb
# url: jdbc:h2:file:~/testdb // 이거 이렇게 embede 로 로그인 하면 브라우저 h2 디비 접속이 안됨 embeded 는 단일 연결 원칙이라
url: jdbc:h2:tcp://localhost/~/testdb # 이렇게 tcp(server) 로 해야 다중 연결 가능
driver-class-name: org.h2.Driver
username: sa
password: "" # H2 기본 비밀번호 없음
hikari:
pool-name: HikariCP # 커넥션 풀 이름
h2:
console:
enabled: true # H2 콘솔 활성화
path: /h2-console # 콘솔 경로
batch:
job:
enabled: true # 애플리케이션 시작 시 Job 자동 실행
jdbc:
initialize-schema: always # Spring Batch 메타 테이블 자동 생성
# build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.3'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.study'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.batch:spring-batch-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
mavenCentral()
}
tasks.named('test') {
useJUnitPlatform()
}
# 결과 기록 ~~!
# 최초 배치(마이그레이션) 돌렸을 때 로그
"C:\Program Files\Java\jdk-21\bin\java.exe" -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.4\lib\idea_rt.jar=49796:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.4\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\study\schedulerbatch\build\classes\java\main;C:\study\schedulerbatch\build\resources\main;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.18.36\5a30490a6e14977d97d9c73c924c1f1b5311ea95\lombok-1.18.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-batch\3.4.3\d1b03c79c70a4c4f8cc78ebc5df103c8787ea005\spring-boot-starter-batch-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\3.4.3\29c90fec6e887dc01df09ea4c3548b5a04b7afb4\spring-boot-starter-data-jpa-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\3.4.3\87e7a401e7d249fefc7f372f5681e8620234624c\spring-boot-starter-web-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\3.4.3\87c09bd67ea27fcd30d6413fdbc5bfa1f688e5e8\spring-boot-starter-jdbc-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\3.4.3\247fdc05cd6de013c3fd26628fa221dd095b391\spring-boot-starter-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.batch\spring-batch-core\5.2.1\bd95751e5b5481c311649bc525d06f0d39798680\spring-batch-core-5.2.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.hibernate.orm\hibernate-core\6.6.8.Final\2738c642d5e505249faa2f923e03541aa6b96916\hibernate-core-6.6.8.Final.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\3.4.3\7e4c0e9c14f4d971a9de6aff3c9beece2001480b\spring-data-jpa-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\6.2.3\f90a794dd3f81a1addc0552bc091e3f85b2428de\spring-aspects-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\3.4.3\7a4d63165404da67ed3802678994c21a0763723\spring-boot-starter-json-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\3.4.3\40246b02bf8bf905dd5fb3d57f48bfc2c9b49bb9\spring-boot-starter-tomcat-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\6.2.3\485f6e351bba471fc8f841f39eaf6488896369ff\spring-webmvc-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\6.2.3\662ac5ee41af27d183f97032b2fec2b652d379f5\spring-web-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jdbc\6.2.3\37a5f7fd424fe555a556138c8ac4f8d6dd312c19\spring-jdbc-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.zaxxer\HikariCP\5.1.0\8c96e36c14461fc436bb02b264b96ef3ca5dca8c\HikariCP-5.1.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\3.4.3\6172c599082196b340910d67c5c790c32f10e417\spring-boot-autoconfigure-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\3.4.3\a7138bcecd59ed27660b3894a7812d65db4951e6\spring-boot-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\3.4.3\e5aee6af32c2dbcc9fb379bcd6c5e5b931db93f1\spring-boot-starter-logging-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\2.1.1\48b9bda22b091b1f48b13af03fe36db3be6e1ae3\jakarta.annotation-api-2.1.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\6.2.3\13ec11e345b915d7ceea37446f1b1eefdcaad62c\spring-core-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\2.3\936b36210e27320f920536f695cf1af210c44586\snakeyaml-2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.batch\spring-batch-infrastructure\5.2.1\f436a3adee3d8f93cf3e9cc2679481ad08981c34\spring-batch-infrastructure-5.2.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\6.2.3\35acadc000b8aaff77e3412dd9acb51aa70c8515\spring-context-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\6.2.3\7983418fa64505d144b60826fb1352ad336c60a0\spring-aop-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-tx\6.2.3\29c8703a756f9a41bc8e14e2aae7890658c54abf\spring-tx-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-commons\3.4.3\2b61ff4aef4a81071ce7eaf1ec29ef9e553bf930\spring-data-commons-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\6.2.3\de660324c90e9b015886d85c746860478fa7d99c\spring-beans-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-core\1.14.4\5686f90bba1d2f7ba0d3adb14f90b95659a6461\micrometer-core-1.14.4.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-observation\1.14.4\c17efe9e6695a0a849a95d0e77422516a345e779\micrometer-observation-1.14.4.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.persistence\jakarta.persistence-api\3.1.0\66901fa1c373c6aff65c13791cc11da72060a8d6\jakarta.persistence-api-3.1.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.transaction\jakarta.transaction-api\2.0.1\51a520e3fae406abb84e2e1148e6746ce3f80a1a\jakarta.transaction-api-2.0.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-orm\6.2.3\b99b9917702591c2ef0cfa7a9bff6bf757015437\spring-orm-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4-runtime\4.13.0\5a02e48521624faaf5ff4d99afc88b01686af655\antlr4-runtime-4.13.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\2.0.16\172931663a09a1fa515567af5fbef00897d3c04\slf4j-api-2.0.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjweaver\1.9.22.1\bca243d0af0db4758fbae45c5f4995cb5dabb612\aspectjweaver-1.9.22.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.18.2\7b6ff96adf421f4c6edbd694e797dd8fe434510a\jackson-datatype-jsr310-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.18.2\72960cb3277347a748911d100c3302d60e8a616a\jackson-module-parameter-names-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.18.2\9ed6d538ebcc66864e114a7040953dce6ab6ea53\jackson-datatype-jdk8-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.18.2\deef8697b92141fb6caf7aa86966cff4eec9b04f\jackson-databind-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\10.1.36\222960bc8895aa543e405382094c7fb118544d0d\tomcat-embed-websocket-10.1.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\10.1.36\3ccaa558e32e317e35d6674d65d7d9aa182e082f\tomcat-embed-core-10.1.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\10.1.36\4e4235a18244af30bb32d9b5a9400fb8edb3bc20\tomcat-embed-el-10.1.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\6.2.3\bda43c7be1bb69cce2a380c2bbaf05062631d42d\spring-expression-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.5.16\113979db51dfad6dc895b34460d7b7ff64ffe7d2\logback-classic-1.5.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.24.3\da1143e2a2531ee1c2d90baa98eb50a28a39d5a7\log4j-to-slf4j-2.24.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\2.0.16\6d57da3e961daac65bcca0dd3def6cd11e48a24a\jul-to-slf4j-2.0.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\6.2.3\ce8bf55aa240fdeab07b3da1f462c79112a33aff\spring-jcl-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.retry\spring-retry\2.0.11\bd4fae67445baf330b69b6b786748a308ab31f6\spring-retry-2.0.11.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-commons\1.14.4\3664f95586514d8f9adc81a5f7a5ef9f66b65599\micrometer-commons-1.14.4.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.18.2\985d77751ebc7fce5db115a986bc9aa82f973f4a\jackson-annotations-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.18.2\fb64ccac5c27dca8819418eb4e443a9f496d9ee7\jackson-core-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.5.16\4f17700f046900aea2fadf115e2d67fec921f7fd\logback-core-1.5.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.24.3\b02c125db8b6d295adf72ae6e71af5d83bce2370\log4j-api-2.24.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.h2database\h2\2.3.232\4fcc05d966ccdb2812ae8b9a718f69226c0cf4e2\h2-2.3.232.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.jboss.logging\jboss-logging\3.6.1.Final\886afbb445b4016a37c8960a7aef6ebd769ce7e5\jboss-logging-3.6.1.Final.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.hibernate.common\hibernate-commons-annotations\7.0.3.Final\e183c4be8bb41d12e9f19b374e00c34a0a85f439\hibernate-commons-annotations-7.0.3.Final.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.smallrye\jandex\3.2.0\f17ad860f62a08487b9edabde608f8ac55c62fa7\jandex-3.2.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml\classmate\1.7.0\e98374da1f2143ac8e6e0a95036994bb19137a3\classmate-1.7.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy\1.15.11\f61886478e0f9ee4c21d09574736f0ff45e0a46c\byte-buddy-1.15.11.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\4.0.5\ca84c2a7169b5293e232b9d00d1e4e36d4c3914a\jaxb-runtime-4.0.5.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.xml.bind\jakarta.xml.bind-api\4.0.2\6cd5a999b834b63238005b7144136379dc36cad2\jakarta.xml.bind-api-4.0.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.inject\jakarta.inject-api\2.0.1\4c28afe1991a941d7702fe1362c365f0a8641d1e\jakarta.inject-api-2.0.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.hdrhistogram\HdrHistogram\2.2.2\7959933ebcc0f05b2eaa5af0a0c8689fa257b15c\HdrHistogram-2.2.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.latencyutils\LatencyUtils\2.0.3\769c0b82cb2421c8256300e907298a9410a2a3d3\LatencyUtils-2.0.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-core\4.0.5\7b4b11ea5542eea4ad55e1080b23be436795b3\jaxb-core-4.0.5.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.activation\jakarta.activation-api\2.1.3\fa165bd70cda600368eee31555222776a46b881f\jakarta.activation-api-2.1.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.eclipse.angus\angus-activation\2.0.2\41f1e0ddd157c856926ed149ab837d110955a9fc\angus-activation-2.0.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\4.0.5\f36a4ef12120a9bb06d766d6a0e54b144fd7ed98\txw2-4.0.5.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\4.1.2\18ec117c85f3ba0ac65409136afa8e42bc74e739\istack-commons-runtime-4.1.2.jar com.study.schedulerbatch.SchedulerbatchApplication
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.4.3)
2025-08-31T22:55:43.672+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.SchedulerbatchApplication : Starting SchedulerbatchApplication using Java 21.0.5 with PID 10448 (C:\study\schedulerbatch\build\classes\java\main started by wnsqh in C:\study\schedulerbatch)
2025-08-31T22:55:43.674+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.SchedulerbatchApplication : No active profile set, falling back to 1 default profile: "default"
2025-08-31T22:55:44.088+09:00 INFO 10448 --- [schedulerbatch] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2025-08-31T22:55:44.128+09:00 INFO 10448 --- [schedulerbatch] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 32 ms. Found 2 JPA repository interfaces.
2025-08-31T22:55:44.423+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-08-31T22:55:44.432+09:00 INFO 10448 --- [schedulerbatch] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-08-31T22:55:44.433+09:00 INFO 10448 --- [schedulerbatch] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.36]
2025-08-31T22:55:44.464+09:00 INFO 10448 --- [schedulerbatch] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-08-31T22:55:44.464+09:00 INFO 10448 --- [schedulerbatch] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 758 ms
2025-08-31T22:55:44.551+09:00 INFO 10448 --- [schedulerbatch] [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2025-08-31T22:55:44.584+09:00 INFO 10448 --- [schedulerbatch] [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.8.Final
2025-08-31T22:55:44.610+09:00 INFO 10448 --- [schedulerbatch] [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2025-08-31T22:55:44.780+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2025-08-31T22:55:44.798+09:00 INFO 10448 --- [schedulerbatch] [ main] com.zaxxer.hikari.HikariDataSource : HikariCP - Starting...
2025-08-31T22:55:44.844+09:00 INFO 10448 --- [schedulerbatch] [ main] com.zaxxer.hikari.pool.HikariPool : HikariCP - Added connection conn0: url=jdbc:h2:tcp://localhost/~/testdb user=SA
2025-08-31T22:55:44.845+09:00 INFO 10448 --- [schedulerbatch] [ main] com.zaxxer.hikari.HikariDataSource : HikariCP - Start completed.
2025-08-31T22:55:44.861+09:00 WARN 10448 --- [schedulerbatch] [ main] org.hibernate.orm.deprecation : HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
2025-08-31T22:55:44.873+09:00 INFO 10448 --- [schedulerbatch] [ main] org.hibernate.orm.connections.pooling : HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariCP)']
Database driver: undefined/unknown
Database version: 2.3.232
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2025-08-31T22:55:45.365+09:00 INFO 10448 --- [schedulerbatch] [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2025-08-31T22:55:45.395+09:00 INFO 10448 --- [schedulerbatch] [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2025-08-31T22:55:45.608+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : user1To2MigrationStep 스텝 실행 !!!!
2025-08-31T22:55:45.659+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] launched with the following parameters: [{'timestamp':'{value=1756648545637, type=class java.lang.Long, identifying=true}'}]
2025-08-31T22:55:45.673+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [user1To2MigrationStep]
2025-08-31T22:55:45.676+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [STEP START] stepName=user1To2MigrationStep
2025-08-31T22:55:45.676+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [beforeStep] 아직 데이터 접근 전 단계입니다.
2025-08-31T22:55:45.682+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T22:55:45.925+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=1, DATA=User1(id=1, age=29, username=김민수, email=minsoo.kim@gmail.com, password=mskim123!)
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=2, DATA=User1(id=2, age=34, username=이서연, email=seoyeon.lee@naver.com, password=sylee2023!)
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=3, DATA=User1(id=3, age=27, username=박지훈, email=jihoon.park@daum.net, password=jhpark!pass)
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=4, DATA=User1(id=4, age=31, username=최유진, email=yujin.choi@kakao.com, password=cjyu2022!)
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=5, DATA=User1(id=5, age=25, username=정현우, email=hyunwoo.jung@gmail.com, password=hwjung!pw)
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.929+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=6, DATA=User1(id=6, age=38, username=한지민, email=jimin.han@naver.com, password=hjmin!secure)
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=7, DATA=User1(id=7, age=22, username=오세훈, email=sehun.oh@daum.net, password=ohsehun22!)
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=8, DATA=User1(id=8, age=30, username=윤아름, email=areum.yoon@kakao.com, password=yoona!pass)
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=9, DATA=User1(id=9, age=26, username=강태현, email=taehyun.kang@gmail.com, password=ktkang!pw)
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.930+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=10, DATA=User1(id=10, age=33, username=배수지, email=suzy.bae@naver.com, password=bsuzy!123)
2025-08-31T22:55:45.932+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=김민수
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.942+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=김민수 → 김민수
2025-08-31T22:55:45.942+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=이서연
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.943+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=이서연 → 이서연
2025-08-31T22:55:45.943+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=박지훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.944+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=박지훈 → 박지훈
2025-08-31T22:55:45.944+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=최유진
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.945+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=최유진 → 최유진
2025-08-31T22:55:45.945+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=정현우
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.945+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=정현우 → 정현우
2025-08-31T22:55:45.946+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=한지민
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.947+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=한지민 → 한지민
2025-08-31T22:55:45.947+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=오세훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.947+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=오세훈 → 오세훈
2025-08-31T22:55:45.947+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=윤아름
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.948+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=윤아름 → 윤아름
2025-08-31T22:55:45.949+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=강태현
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.950+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=강태현 → 강태현
2025-08-31T22:55:45.950+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=배수지
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.951+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=배수지 → 배수지
2025-08-31T22:55:45.951+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE START] 대상 수=10건, 리스트=[items=[User2(id=1, age=29, username=김민수, email=minsoo.kim@gmail.com, password=mskim123!, memo=2025-08-31 22:55:45), User2(id=2, age=34, username=이서연, email=seoyeon.lee@naver.com, password=sylee2023!, memo=2025-08-31 22:55:45), User2(id=3, age=27, username=박지훈, email=jihoon.park@daum.net, password=jhpark!pass, memo=2025-08-31 22:55:45), User2(id=4, age=31, username=최유진, email=yujin.choi@kakao.com, password=cjyu2022!, memo=2025-08-31 22:55:45), User2(id=5, age=25, username=정현우, email=hyunwoo.jung@gmail.com, password=hwjung!pw, memo=2025-08-31 22:55:45), User2(id=6, age=38, username=한지민, email=jimin.han@naver.com, password=hjmin!secure, memo=2025-08-31 22:55:45), User2(id=7, age=22, username=오세훈, email=sehun.oh@daum.net, password=ohsehun22!, memo=2025-08-31 22:55:45), User2(id=8, age=30, username=윤아름, email=areum.yoon@kakao.com, password=yoona!pass, memo=2025-08-31 22:55:45), User2(id=9, age=26, username=강태현, email=taehyun.kang@gmail.com, password=ktkang!pw, memo=2025-08-31 22:55:45), User2(id=10, age=33, username=배수지, email=suzy.bae@naver.com, password=bsuzy!123, memo=2025-08-31 22:55:45)], skips=[]]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.968+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE END] 마이그레이션 완료: 10건
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
2025-08-31T22:55:45.980+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T22:55:45.983+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=11, DATA=User1(id=11, age=28, username=조현진, email=hyunjin.jo@daum.net, password=johj!pw)
2025-08-31T22:55:45.983+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.983+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=12, DATA=User1(id=12, age=35, username=임다은, email=daeun.lim@kakao.com, password=limdae!pw)
2025-08-31T22:55:45.983+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.983+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=13, DATA=User1(id=13, age=24, username=서준호, email=junho.seo@gmail.com, password=sjseo!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=14, DATA=User1(id=14, age=32, username=문지애, email=jie.moon@naver.com, password=mjmoon!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=15, DATA=User1(id=15, age=29, username=홍석진, email=seokjin.hong@daum.net, password=hongsj!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=16, DATA=User1(id=16, age=27, username=신예린, email=yerin.shin@kakao.com, password=syerin!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=17, DATA=User1(id=17, age=36, username=노진우, email=jinwoo.no@gmail.com, password=njwoo!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=18, DATA=User1(id=18, age=23, username=백은지, email=eunji.baek@naver.com, password=beunji!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=19, DATA=User1(id=19, age=31, username=황태민, email=taemin.hwang@daum.net, password=htmin!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=20, DATA=User1(id=20, age=26, username=안소희, email=sohee.ahn@kakao.com, password=ahnsh!pw)
2025-08-31T22:55:45.984+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=조현진
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.985+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=조현진 → 조현진
2025-08-31T22:55:45.985+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=임다은
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.986+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=임다은 → 임다은
2025-08-31T22:55:45.986+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=서준호
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.986+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=서준호 → 서준호
2025-08-31T22:55:45.986+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=문지애
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.987+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=문지애 → 문지애
2025-08-31T22:55:45.987+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=홍석진
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.987+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=홍석진 → 홍석진
2025-08-31T22:55:45.988+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=신예린
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.988+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=신예린 → 신예린
2025-08-31T22:55:45.988+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=노진우
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.989+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=노진우 → 노진우
2025-08-31T22:55:45.989+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=백은지
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.989+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=백은지 → 백은지
2025-08-31T22:55:45.989+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=황태민
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.990+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=황태민 → 황태민
2025-08-31T22:55:45.990+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=안소희
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.990+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=안소희 → 안소희
2025-08-31T22:55:45.991+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE START] 대상 수=10건, 리스트=[items=[User2(id=11, age=28, username=조현진, email=hyunjin.jo@daum.net, password=johj!pw, memo=2025-08-31 22:55:45), User2(id=12, age=35, username=임다은, email=daeun.lim@kakao.com, password=limdae!pw, memo=2025-08-31 22:55:45), User2(id=13, age=24, username=서준호, email=junho.seo@gmail.com, password=sjseo!pw, memo=2025-08-31 22:55:45), User2(id=14, age=32, username=문지애, email=jie.moon@naver.com, password=mjmoon!pw, memo=2025-08-31 22:55:45), User2(id=15, age=29, username=홍석진, email=seokjin.hong@daum.net, password=hongsj!pw, memo=2025-08-31 22:55:45), User2(id=16, age=27, username=신예린, email=yerin.shin@kakao.com, password=syerin!pw, memo=2025-08-31 22:55:45), User2(id=17, age=36, username=노진우, email=jinwoo.no@gmail.com, password=njwoo!pw, memo=2025-08-31 22:55:45), User2(id=18, age=23, username=백은지, email=eunji.baek@naver.com, password=beunji!pw, memo=2025-08-31 22:55:45), User2(id=19, age=31, username=황태민, email=taemin.hwang@daum.net, password=htmin!pw, memo=2025-08-31 22:55:45), User2(id=20, age=26, username=안소희, email=sohee.ahn@kakao.com, password=ahnsh!pw, memo=2025-08-31 22:55:45)], skips=[]]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:45.997+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE END] 마이그레이션 완료: 10건
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
2025-08-31T22:55:46.003+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=21, DATA=User1(id=21, age=30, username=장도윤, email=doyoon.jang@gmail.com, password=jdoyoon!pw)
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=22, DATA=User1(id=22, age=28, username=유하늘, email=haneul.yoo@naver.com, password=yhaneul!pw)
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=23, DATA=User1(id=23, age=34, username=권지훈, email=jihun.kwon@daum.net, password=kjihun!pw)
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=24, DATA=User1(id=24, age=25, username=이하은, email=haeun.lee@kakao.com, password=lhaeun!pw)
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=25, DATA=User1(id=25, age=37, username=김도현, email=dohyun.kim@gmail.com, password=kdohyun!pw)
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.007+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=26, DATA=User1(id=26, age=29, username=정예슬, email=yesul.jung@naver.com, password=jyesul!pw)
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=27, DATA=User1(id=27, age=32, username=최태영, email=taeyoung.choi@daum.net, password=ctyoung!pw)
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=28, DATA=User1(id=28, age=24, username=한유정, email=yujeong.han@kakao.com, password=hyujeong!pw)
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=29, DATA=User1(id=29, age=33, username=오지훈, email=jihoon.oh@gmail.com, password=ojihoon!pw)
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=30, DATA=User1(id=30, age=26, username=윤지아, email=jia.yoon@naver.com, password=yjia!pw)
2025-08-31T22:55:46.008+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=장도윤
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.009+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=장도윤 → 장도윤
2025-08-31T22:55:46.009+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=유하늘
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.010+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=유하늘 → 유하늘
2025-08-31T22:55:46.010+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=권지훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.010+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=권지훈 → 권지훈
2025-08-31T22:55:46.011+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=이하은
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.011+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=이하은 → 이하은
2025-08-31T22:55:46.011+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=김도현
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.012+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=김도현 → 김도현
2025-08-31T22:55:46.012+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=정예슬
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.012+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=정예슬 → 정예슬
2025-08-31T22:55:46.012+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=최태영
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.012+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=최태영 → 최태영
2025-08-31T22:55:46.013+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=한유정
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.013+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=한유정 → 한유정
2025-08-31T22:55:46.013+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=오지훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.013+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=오지훈 → 오지훈
2025-08-31T22:55:46.013+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=윤지아
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.014+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS END] USERNAME=윤지아 → 윤지아
2025-08-31T22:55:46.014+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE START] 대상 수=10건, 리스트=[items=[User2(id=21, age=30, username=장도윤, email=doyoon.jang@gmail.com, password=jdoyoon!pw, memo=2025-08-31 22:55:46), User2(id=22, age=28, username=유하늘, email=haneul.yoo@naver.com, password=yhaneul!pw, memo=2025-08-31 22:55:46), User2(id=23, age=34, username=권지훈, email=jihun.kwon@daum.net, password=kjihun!pw, memo=2025-08-31 22:55:46), User2(id=24, age=25, username=이하은, email=haeun.lee@kakao.com, password=lhaeun!pw, memo=2025-08-31 22:55:46), User2(id=25, age=37, username=김도현, email=dohyun.kim@gmail.com, password=kdohyun!pw, memo=2025-08-31 22:55:46), User2(id=26, age=29, username=정예슬, email=yesul.jung@naver.com, password=jyesul!pw, memo=2025-08-31 22:55:46), User2(id=27, age=32, username=최태영, email=taeyoung.choi@daum.net, password=ctyoung!pw, memo=2025-08-31 22:55:46), User2(id=28, age=24, username=한유정, email=yujeong.han@kakao.com, password=hyujeong!pw, memo=2025-08-31 22:55:46), User2(id=29, age=33, username=오지훈, email=jihoon.oh@gmail.com, password=ojihoon!pw, memo=2025-08-31 22:55:46), User2(id=30, age=26, username=윤지아, email=jia.yoon@naver.com, password=yjia!pw, memo=2025-08-31 22:55:46)], skips=[]]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T22:55:46.020+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE END] 마이그레이션 완료: 10건
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
Hibernate: insert into user2 (age,email,memo,password,username,id) values (?,?,?,?,?,?)
2025-08-31T22:55:46.023+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T22:55:46.026+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.batch.core.step.AbstractStep : Step: [user1To2MigrationStep] executed in 352ms
2025-08-31T22:55:46.026+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [STEP END] stepName=user1To2MigrationStep
2025-08-31T22:55:46.026+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : 읽은 USER1 수: 30
2025-08-31T22:55:46.026+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : 마이그레이션된 USER2 수: 30
2025-08-31T22:55:46.026+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : 스킵된 수: 0
2025-08-31T22:55:46.031+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] completed with the following parameters: [{'timestamp':'{value=1756648545637, type=class java.lang.Long, identifying=true}'}] and the following status: [COMPLETED] in 365ms
2025-08-31T22:55:46.077+09:00 WARN 10448 --- [schedulerbatch] [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2025-08-31T22:55:46.275+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:tcp://localhost/~/testdb'
2025-08-31T22:55:46.319+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-08-31T22:55:46.325+09:00 INFO 10448 --- [schedulerbatch] [ main] c.s.s.SchedulerbatchApplication : Started SchedulerbatchApplication in 2.909 seconds (process running for 3.25)
2025-08-31T22:55:46.325+09:00 INFO 10448 --- [schedulerbatch] [ task-1] c.s.s.s.service.SchedulerService : [setSchedulerLog]
2025-08-31T22:55:46.326+09:00 INFO 10448 --- [schedulerbatch] [ task-1] c.s.s.s.service.SchedulerService : date : 2025-08-31 22:55:46 , content : @Schduled 어노테이션이 붙은 메소드에는 파라미터를 사용할 수 없다고 한다 ㅠㅠ , log object : {date=2025-08-31 22:55:46, content=@Schduled 어노테이션이 붙은 메소드에는 파라미터를 사용할 수 없다고 한다 ㅠㅠ}
2025-08-31T22:55:46.326+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.a.b.JobLauncherApplicationRunner : Running default command line with: []
2025-08-31T22:55:46.339+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] launched with the following parameters: [{}]
2025-08-31T22:55:46.345+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.batch.core.job.SimpleStepHandler : Step already complete or not restartable, so no action to execute: StepExecution: id=59, version=3, name=user1To2MigrationStep, status=COMPLETED, exitStatus=COMPLETED, readCount=0, filterCount=0, writeCount=0 readSkipCount=0, writeSkipCount=0, processSkipCount=0, commitCount=1, rollbackCount=0, exitDescription=
2025-08-31T22:55:46.346+09:00 INFO 10448 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 5ms
# 이미 배치(마이그레이션 )되어있는 데이터가 있는 상태에서 배치(마이그레이션) 돌렸을 때
"C:\Program Files\Java\jdk-21\bin\java.exe" -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.4\lib\idea_rt.jar=60621:C:\Program Files\JetBrains\IntelliJ IDEA 2024.2.4\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\study\schedulerbatch\build\classes\java\main;C:\study\schedulerbatch\build\resources\main;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.18.36\5a30490a6e14977d97d9c73c924c1f1b5311ea95\lombok-1.18.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-batch\3.4.3\d1b03c79c70a4c4f8cc78ebc5df103c8787ea005\spring-boot-starter-batch-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\3.4.3\29c90fec6e887dc01df09ea4c3548b5a04b7afb4\spring-boot-starter-data-jpa-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\3.4.3\87e7a401e7d249fefc7f372f5681e8620234624c\spring-boot-starter-web-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\3.4.3\87c09bd67ea27fcd30d6413fdbc5bfa1f688e5e8\spring-boot-starter-jdbc-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\3.4.3\247fdc05cd6de013c3fd26628fa221dd095b391\spring-boot-starter-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.batch\spring-batch-core\5.2.1\bd95751e5b5481c311649bc525d06f0d39798680\spring-batch-core-5.2.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.hibernate.orm\hibernate-core\6.6.8.Final\2738c642d5e505249faa2f923e03541aa6b96916\hibernate-core-6.6.8.Final.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\3.4.3\7e4c0e9c14f4d971a9de6aff3c9beece2001480b\spring-data-jpa-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\6.2.3\f90a794dd3f81a1addc0552bc091e3f85b2428de\spring-aspects-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\3.4.3\7a4d63165404da67ed3802678994c21a0763723\spring-boot-starter-json-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\3.4.3\40246b02bf8bf905dd5fb3d57f48bfc2c9b49bb9\spring-boot-starter-tomcat-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\6.2.3\485f6e351bba471fc8f841f39eaf6488896369ff\spring-webmvc-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\6.2.3\662ac5ee41af27d183f97032b2fec2b652d379f5\spring-web-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jdbc\6.2.3\37a5f7fd424fe555a556138c8ac4f8d6dd312c19\spring-jdbc-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.zaxxer\HikariCP\5.1.0\8c96e36c14461fc436bb02b264b96ef3ca5dca8c\HikariCP-5.1.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\3.4.3\6172c599082196b340910d67c5c790c32f10e417\spring-boot-autoconfigure-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\3.4.3\a7138bcecd59ed27660b3894a7812d65db4951e6\spring-boot-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\3.4.3\e5aee6af32c2dbcc9fb379bcd6c5e5b931db93f1\spring-boot-starter-logging-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\2.1.1\48b9bda22b091b1f48b13af03fe36db3be6e1ae3\jakarta.annotation-api-2.1.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\6.2.3\13ec11e345b915d7ceea37446f1b1eefdcaad62c\spring-core-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\2.3\936b36210e27320f920536f695cf1af210c44586\snakeyaml-2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.batch\spring-batch-infrastructure\5.2.1\f436a3adee3d8f93cf3e9cc2679481ad08981c34\spring-batch-infrastructure-5.2.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\6.2.3\35acadc000b8aaff77e3412dd9acb51aa70c8515\spring-context-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\6.2.3\7983418fa64505d144b60826fb1352ad336c60a0\spring-aop-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-tx\6.2.3\29c8703a756f9a41bc8e14e2aae7890658c54abf\spring-tx-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-commons\3.4.3\2b61ff4aef4a81071ce7eaf1ec29ef9e553bf930\spring-data-commons-3.4.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\6.2.3\de660324c90e9b015886d85c746860478fa7d99c\spring-beans-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-core\1.14.4\5686f90bba1d2f7ba0d3adb14f90b95659a6461\micrometer-core-1.14.4.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-observation\1.14.4\c17efe9e6695a0a849a95d0e77422516a345e779\micrometer-observation-1.14.4.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.persistence\jakarta.persistence-api\3.1.0\66901fa1c373c6aff65c13791cc11da72060a8d6\jakarta.persistence-api-3.1.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.transaction\jakarta.transaction-api\2.0.1\51a520e3fae406abb84e2e1148e6746ce3f80a1a\jakarta.transaction-api-2.0.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-orm\6.2.3\b99b9917702591c2ef0cfa7a9bff6bf757015437\spring-orm-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4-runtime\4.13.0\5a02e48521624faaf5ff4d99afc88b01686af655\antlr4-runtime-4.13.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\2.0.16\172931663a09a1fa515567af5fbef00897d3c04\slf4j-api-2.0.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjweaver\1.9.22.1\bca243d0af0db4758fbae45c5f4995cb5dabb612\aspectjweaver-1.9.22.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.18.2\7b6ff96adf421f4c6edbd694e797dd8fe434510a\jackson-datatype-jsr310-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.18.2\72960cb3277347a748911d100c3302d60e8a616a\jackson-module-parameter-names-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.18.2\9ed6d538ebcc66864e114a7040953dce6ab6ea53\jackson-datatype-jdk8-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.18.2\deef8697b92141fb6caf7aa86966cff4eec9b04f\jackson-databind-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\10.1.36\222960bc8895aa543e405382094c7fb118544d0d\tomcat-embed-websocket-10.1.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\10.1.36\3ccaa558e32e317e35d6674d65d7d9aa182e082f\tomcat-embed-core-10.1.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\10.1.36\4e4235a18244af30bb32d9b5a9400fb8edb3bc20\tomcat-embed-el-10.1.36.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\6.2.3\bda43c7be1bb69cce2a380c2bbaf05062631d42d\spring-expression-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.5.16\113979db51dfad6dc895b34460d7b7ff64ffe7d2\logback-classic-1.5.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.24.3\da1143e2a2531ee1c2d90baa98eb50a28a39d5a7\log4j-to-slf4j-2.24.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\2.0.16\6d57da3e961daac65bcca0dd3def6cd11e48a24a\jul-to-slf4j-2.0.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\6.2.3\ce8bf55aa240fdeab07b3da1f462c79112a33aff\spring-jcl-6.2.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.springframework.retry\spring-retry\2.0.11\bd4fae67445baf330b69b6b786748a308ab31f6\spring-retry-2.0.11.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-commons\1.14.4\3664f95586514d8f9adc81a5f7a5ef9f66b65599\micrometer-commons-1.14.4.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.18.2\985d77751ebc7fce5db115a986bc9aa82f973f4a\jackson-annotations-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.18.2\fb64ccac5c27dca8819418eb4e443a9f496d9ee7\jackson-core-2.18.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.5.16\4f17700f046900aea2fadf115e2d67fec921f7fd\logback-core-1.5.16.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.24.3\b02c125db8b6d295adf72ae6e71af5d83bce2370\log4j-api-2.24.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.h2database\h2\2.3.232\4fcc05d966ccdb2812ae8b9a718f69226c0cf4e2\h2-2.3.232.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.jboss.logging\jboss-logging\3.6.1.Final\886afbb445b4016a37c8960a7aef6ebd769ce7e5\jboss-logging-3.6.1.Final.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.hibernate.common\hibernate-commons-annotations\7.0.3.Final\e183c4be8bb41d12e9f19b374e00c34a0a85f439\hibernate-commons-annotations-7.0.3.Final.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\io.smallrye\jandex\3.2.0\f17ad860f62a08487b9edabde608f8ac55c62fa7\jandex-3.2.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.fasterxml\classmate\1.7.0\e98374da1f2143ac8e6e0a95036994bb19137a3\classmate-1.7.0.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy\1.15.11\f61886478e0f9ee4c21d09574736f0ff45e0a46c\byte-buddy-1.15.11.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\4.0.5\ca84c2a7169b5293e232b9d00d1e4e36d4c3914a\jaxb-runtime-4.0.5.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.xml.bind\jakarta.xml.bind-api\4.0.2\6cd5a999b834b63238005b7144136379dc36cad2\jakarta.xml.bind-api-4.0.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.inject\jakarta.inject-api\2.0.1\4c28afe1991a941d7702fe1362c365f0a8641d1e\jakarta.inject-api-2.0.1.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.hdrhistogram\HdrHistogram\2.2.2\7959933ebcc0f05b2eaa5af0a0c8689fa257b15c\HdrHistogram-2.2.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.latencyutils\LatencyUtils\2.0.3\769c0b82cb2421c8256300e907298a9410a2a3d3\LatencyUtils-2.0.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-core\4.0.5\7b4b11ea5542eea4ad55e1080b23be436795b3\jaxb-core-4.0.5.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\jakarta.activation\jakarta.activation-api\2.1.3\fa165bd70cda600368eee31555222776a46b881f\jakarta.activation-api-2.1.3.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.eclipse.angus\angus-activation\2.0.2\41f1e0ddd157c856926ed149ab837d110955a9fc\angus-activation-2.0.2.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\4.0.5\f36a4ef12120a9bb06d766d6a0e54b144fd7ed98\txw2-4.0.5.jar;C:\Users\wnsqh\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\4.1.2\18ec117c85f3ba0ac65409136afa8e42bc74e739\istack-commons-runtime-4.1.2.jar com.study.schedulerbatch.SchedulerbatchApplication
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.4.3)
2025-08-31T23:02:21.524+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.SchedulerbatchApplication : Starting SchedulerbatchApplication using Java 21.0.5 with PID 12032 (C:\study\schedulerbatch\build\classes\java\main started by wnsqh in C:\study\schedulerbatch)
2025-08-31T23:02:21.526+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.SchedulerbatchApplication : No active profile set, falling back to 1 default profile: "default"
2025-08-31T23:02:21.942+09:00 INFO 12032 --- [schedulerbatch] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2025-08-31T23:02:21.982+09:00 INFO 12032 --- [schedulerbatch] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 34 ms. Found 2 JPA repository interfaces.
2025-08-31T23:02:22.298+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-08-31T23:02:22.307+09:00 INFO 12032 --- [schedulerbatch] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-08-31T23:02:22.307+09:00 INFO 12032 --- [schedulerbatch] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.36]
2025-08-31T23:02:22.339+09:00 INFO 12032 --- [schedulerbatch] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-08-31T23:02:22.339+09:00 INFO 12032 --- [schedulerbatch] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 779 ms
2025-08-31T23:02:22.434+09:00 INFO 12032 --- [schedulerbatch] [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2025-08-31T23:02:22.463+09:00 INFO 12032 --- [schedulerbatch] [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.8.Final
2025-08-31T23:02:22.484+09:00 INFO 12032 --- [schedulerbatch] [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2025-08-31T23:02:22.667+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2025-08-31T23:02:22.684+09:00 INFO 12032 --- [schedulerbatch] [ main] com.zaxxer.hikari.HikariDataSource : HikariCP - Starting...
2025-08-31T23:02:22.732+09:00 INFO 12032 --- [schedulerbatch] [ main] com.zaxxer.hikari.pool.HikariPool : HikariCP - Added connection conn0: url=jdbc:h2:tcp://localhost/~/testdb user=SA
2025-08-31T23:02:22.734+09:00 INFO 12032 --- [schedulerbatch] [ main] com.zaxxer.hikari.HikariDataSource : HikariCP - Start completed.
2025-08-31T23:02:22.749+09:00 WARN 12032 --- [schedulerbatch] [ main] org.hibernate.orm.deprecation : HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
2025-08-31T23:02:22.762+09:00 INFO 12032 --- [schedulerbatch] [ main] org.hibernate.orm.connections.pooling : HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariCP)']
Database driver: undefined/unknown
Database version: 2.3.232
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2025-08-31T23:02:23.266+09:00 INFO 12032 --- [schedulerbatch] [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2025-08-31T23:02:23.298+09:00 INFO 12032 --- [schedulerbatch] [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2025-08-31T23:02:23.510+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : user1To2MigrationStep 스텝 실행 !!!!
2025-08-31T23:02:23.560+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] launched with the following parameters: [{'timestamp':'{value=1756648943539, type=class java.lang.Long, identifying=true}'}]
2025-08-31T23:02:23.573+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.batch.core.job.SimpleStepHandler : Executing step: [user1To2MigrationStep]
2025-08-31T23:02:23.576+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [STEP START] stepName=user1To2MigrationStep
2025-08-31T23:02:23.576+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [beforeStep] 아직 데이터 접근 전 단계입니다.
2025-08-31T23:02:23.581+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T23:02:23.811+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=1, DATA=User1(id=1, age=29, username=김민수, email=minsoo.kim@gmail.com, password=mskim123!)
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=2, DATA=User1(id=2, age=34, username=이서연, email=seoyeon.lee@naver.com, password=sylee2023!)
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=3, DATA=User1(id=3, age=27, username=박지훈, email=jihoon.park@daum.net, password=jhpark!pass)
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=4, DATA=User1(id=4, age=31, username=최유진, email=yujin.choi@kakao.com, password=cjyu2022!)
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.814+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=5, DATA=User1(id=5, age=25, username=정현우, email=hyunwoo.jung@gmail.com, password=hwjung!pw)
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=6, DATA=User1(id=6, age=38, username=한지민, email=jimin.han@naver.com, password=hjmin!secure)
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=7, DATA=User1(id=7, age=22, username=오세훈, email=sehun.oh@daum.net, password=ohsehun22!)
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=8, DATA=User1(id=8, age=30, username=윤아름, email=areum.yoon@kakao.com, password=yoona!pass)
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.815+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=9, DATA=User1(id=9, age=26, username=강태현, email=taehyun.kang@gmail.com, password=ktkang!pw)
2025-08-31T23:02:23.816+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.816+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=10, DATA=User1(id=10, age=33, username=배수지, email=suzy.bae@naver.com, password=bsuzy!123)
2025-08-31T23:02:23.818+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=김민수
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.828+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.828+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=김민수 → result=null
2025-08-31T23:02:23.829+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=이서연
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.829+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.829+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=이서연 → result=null
2025-08-31T23:02:23.829+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=박지훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.830+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.830+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=박지훈 → result=null
2025-08-31T23:02:23.830+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=최유진
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.831+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.831+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=최유진 → result=null
2025-08-31T23:02:23.831+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=정현우
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.831+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.831+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=정현우 → result=null
2025-08-31T23:02:23.832+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=한지민
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.832+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.832+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=한지민 → result=null
2025-08-31T23:02:23.832+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=오세훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.835+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.835+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=오세훈 → result=null
2025-08-31T23:02:23.835+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=윤아름
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.835+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.835+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=윤아름 → result=null
2025-08-31T23:02:23.835+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=강태현
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.836+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.836+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=강태현 → result=null
2025-08-31T23:02:23.836+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=배수지
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.836+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.836+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=배수지 → result=null
2025-08-31T23:02:23.837+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE START] 대상 수=0건, 리스트=[items=[], skips=[]]
2025-08-31T23:02:23.838+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE END] 마이그레이션 완료: 0건
2025-08-31T23:02:23.843+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=11, DATA=User1(id=11, age=28, username=조현진, email=hyunjin.jo@daum.net, password=johj!pw)
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=12, DATA=User1(id=12, age=35, username=임다은, email=daeun.lim@kakao.com, password=limdae!pw)
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=13, DATA=User1(id=13, age=24, username=서준호, email=junho.seo@gmail.com, password=sjseo!pw)
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=14, DATA=User1(id=14, age=32, username=문지애, email=jie.moon@naver.com, password=mjmoon!pw)
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=15, DATA=User1(id=15, age=29, username=홍석진, email=seokjin.hong@daum.net, password=hongsj!pw)
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=16, DATA=User1(id=16, age=27, username=신예린, email=yerin.shin@kakao.com, password=syerin!pw)
2025-08-31T23:02:23.847+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=17, DATA=User1(id=17, age=36, username=노진우, email=jinwoo.no@gmail.com, password=njwoo!pw)
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=18, DATA=User1(id=18, age=23, username=백은지, email=eunji.baek@naver.com, password=beunji!pw)
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=19, DATA=User1(id=19, age=31, username=황태민, email=taemin.hwang@daum.net, password=htmin!pw)
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=20, DATA=User1(id=20, age=26, username=안소희, email=sohee.ahn@kakao.com, password=ahnsh!pw)
2025-08-31T23:02:23.848+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=조현진
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.849+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.849+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=조현진 → result=null
2025-08-31T23:02:23.849+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=임다은
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.850+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.850+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=임다은 → result=null
2025-08-31T23:02:23.850+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=서준호
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.850+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.850+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=서준호 → result=null
2025-08-31T23:02:23.851+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=문지애
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.851+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.852+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=문지애 → result=null
2025-08-31T23:02:23.852+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=홍석진
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.853+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.853+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=홍석진 → result=null
2025-08-31T23:02:23.853+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=신예린
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.853+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.853+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=신예린 → result=null
2025-08-31T23:02:23.853+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=노진우
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.854+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.854+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=노진우 → result=null
2025-08-31T23:02:23.854+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=백은지
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.855+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.855+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=백은지 → result=null
2025-08-31T23:02:23.855+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=황태민
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.857+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.857+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=황태민 → result=null
2025-08-31T23:02:23.857+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=안소희
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.858+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.858+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=안소희 → result=null
2025-08-31T23:02:23.858+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE START] 대상 수=0건, 리스트=[items=[], skips=[]]
2025-08-31T23:02:23.859+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE END] 마이그레이션 완료: 0건
2025-08-31T23:02:23.861+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=21, DATA=User1(id=21, age=30, username=장도윤, email=doyoon.jang@gmail.com, password=jdoyoon!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=22, DATA=User1(id=22, age=28, username=유하늘, email=haneul.yoo@naver.com, password=yhaneul!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=23, DATA=User1(id=23, age=34, username=권지훈, email=jihun.kwon@daum.net, password=kjihun!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=24, DATA=User1(id=24, age=25, username=이하은, email=haeun.lee@kakao.com, password=lhaeun!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=25, DATA=User1(id=25, age=37, username=김도현, email=dohyun.kim@gmail.com, password=kdohyun!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=26, DATA=User1(id=26, age=29, username=정예슬, email=yesul.jung@naver.com, password=jyesul!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=27, DATA=User1(id=27, age=32, username=최태영, email=taeyoung.choi@daum.net, password=ctyoung!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=28, DATA=User1(id=28, age=24, username=한유정, email=yujeong.han@kakao.com, password=hyujeong!pw)
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.865+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=29, DATA=User1(id=29, age=33, username=오지훈, email=jihoon.oh@gmail.com, password=ojihoon!pw)
2025-08-31T23:02:23.866+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
2025-08-31T23:02:23.866+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ END] ID=30, DATA=User1(id=30, age=26, username=윤지아, email=jia.yoon@naver.com, password=yjia!pw)
2025-08-31T23:02:23.866+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=장도윤
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.866+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.866+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=장도윤 → result=null
2025-08-31T23:02:23.866+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=유하늘
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.868+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.869+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=유하늘 → result=null
2025-08-31T23:02:23.869+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=권지훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.869+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.869+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=권지훈 → result=null
2025-08-31T23:02:23.869+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=이하은
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.870+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.870+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=이하은 → result=null
2025-08-31T23:02:23.870+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=김도현
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=김도현 → result=null
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=정예슬
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=정예슬 → result=null
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=최태영
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.871+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=최태영 → result=null
2025-08-31T23:02:23.872+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=한유정
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.872+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.872+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=한유정 → result=null
2025-08-31T23:02:23.872+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=오지훈
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.872+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.874+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=오지훈 → result=null
2025-08-31T23:02:23.874+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS START] USERNAME=윤지아
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.memo,u1_0.password,u1_0.username from user2 u1_0 where u1_0.id=?
2025-08-31T23:02:23.874+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.step.UserBatchStep : 이미 값이 있어서 배치 로직 중단 !!
2025-08-31T23:02:23.874+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [PROCESS SKIPPED] USERNAME=윤지아 → result=null
2025-08-31T23:02:23.874+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE START] 대상 수=0건, 리스트=[items=[], skips=[]]
2025-08-31T23:02:23.874+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [WRITE END] 마이그레이션 완료: 0건
2025-08-31T23:02:23.876+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [READ START]
Hibernate: select u1_0.id,u1_0.age,u1_0.email,u1_0.password,u1_0.username from user1 u1_0 order by u1_0.id offset ? rows fetch first ? rows only
2025-08-31T23:02:23.878+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.batch.core.step.AbstractStep : Step: [user1To2MigrationStep] executed in 304ms
2025-08-31T23:02:23.878+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : [STEP END] stepName=user1To2MigrationStep
2025-08-31T23:02:23.878+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : 읽은 USER1 수: 30
2025-08-31T23:02:23.878+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : 마이그레이션된 USER2 수: 0
2025-08-31T23:02:23.878+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.batch.listener.UserBatchListener : 스킵된 수: 0
2025-08-31T23:02:23.885+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] completed with the following parameters: [{'timestamp':'{value=1756648943539, type=class java.lang.Long, identifying=true}'}] and the following status: [COMPLETED] in 317ms
2025-08-31T23:02:23.938+09:00 WARN 12032 --- [schedulerbatch] [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2025-08-31T23:02:24.130+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:tcp://localhost/~/testdb'
2025-08-31T23:02:24.176+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-08-31T23:02:24.183+09:00 INFO 12032 --- [schedulerbatch] [ main] c.s.s.SchedulerbatchApplication : Started SchedulerbatchApplication in 2.908 seconds (process running for 3.247)
2025-08-31T23:02:24.183+09:00 INFO 12032 --- [schedulerbatch] [ task-1] c.s.s.s.service.SchedulerService : [setSchedulerLog]
2025-08-31T23:02:24.184+09:00 INFO 12032 --- [schedulerbatch] [ task-1] c.s.s.s.service.SchedulerService : date : 2025-08-31 23:02:24 , content : @Schduled 어노테이션이 붙은 메소드에는 파라미터를 사용할 수 없다고 한다 ㅠㅠ , log object : {date=2025-08-31 23:02:24, content=@Schduled 어노테이션이 붙은 메소드에는 파라미터를 사용할 수 없다고 한다 ㅠㅠ}
2025-08-31T23:02:24.184+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.a.b.JobLauncherApplicationRunner : Running default command line with: []
2025-08-31T23:02:24.196+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] launched with the following parameters: [{}]
2025-08-31T23:02:24.203+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.batch.core.job.SimpleStepHandler : Step already complete or not restartable, so no action to execute: StepExecution: id=59, version=3, name=user1To2MigrationStep, status=COMPLETED, exitStatus=COMPLETED, readCount=0, filterCount=0, writeCount=0 readSkipCount=0, writeSkipCount=0, processSkipCount=0, commitCount=1, rollbackCount=0, exitDescription=
2025-08-31T23:02:24.204+09:00 INFO 12032 --- [schedulerbatch] [ main] o.s.b.c.l.s.TaskExecutorJobLauncher : Job: [SimpleJob: [name=userMigrationJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 5ms
# USER1 에는 이미 INSERT 쿼리문으로 30개의 샘플데이터를 넣어 뒀었다
# 샘플데이터 쿼리문은 코파일럿 한테 요청해서 작성된 쿼리문을 일괄적으로 실행시켜 테스트 데이터를 등록했다.
# 마이그레이션 이후 USER2 테이블 조회하면
memo 컬럼 란에 마이그레이션 된 시점이 기록되어 있다 >> 성공 !!!
학습 회고
- 정신 없이 테스트해 해보느라 원칙을 지키지 못 한 것이 많아 아쉽다.
'API' 카테고리의 다른 글
스프링 스케줄러와 배치 #2 - Spring Batch (0) | 2025.06.24 |
---|---|
스프링 스케줄러와 배치 #1 - Spring Scheduler(@Scheduled), TaskScheduler (0) | 2025.03.09 |
Spring AOP 설명(Annotaion, Class) 및 예제 (1) | 2025.01.17 |
#2 TEST CODE 작성 : Todo API 단위테스트, 통합테스트 (0) | 2025.01.02 |
#1 TEST CODE 작성 : Todo API 만들기 (1) | 2024.12.14 |