안녕하세요.
“배치가 돌다가 죽었는데 로그에 아무것도 안 찍혀요.”
“SQL이 어떻게 나가는지 보고 싶은데 Hibernate: select... 만 나오고 파라미터가 안 보여요.”
배치 개발의 8할은 디버깅입니다. 눈에 보이지 않는 백그라운드 프로세스이기 때문에, 로그 설정이 제대로 안 되어 있으면 장님이 코끼리 만지는 격이 됩니다.
오늘은 답답한 속을 뻥 뚫어줄 배치 로그 설정과 디버깅 팁을 공유합니다.

1. Spring Batch 로그 레벨 조정
Spring Batch 내부 동작(트랜잭션 시작, Chunk 커밋, Step 전환 등)을 자세히 보고 싶다면 application.yml에서 로그 레벨을 조정하세요.
logging:
level:
org.springframework.batch: DEBUG # Batch 핵심 로직 상세 로그
org.springframework.jdbc: DEBUG # JDBC 템플릿 실행 로그
DEBUG 레벨로만 낮춰도 “아, 지금 여기서 멈췄구나”를 알 수 있는 수많은 단서들이 쏟아집니다.
2. SQL 파라미터 확인하기 (P6Spy)
JPA나 JDBC를 쓸 때 ?로 나오는 바인딩 파라미터 때문에 답답하셨죠?application.yml에 show-sql: true를 줘도 파라미터는 여전히 ?입니다. 이때 P6Spy 라이브러리를 쓰면 완성된 쿼리를 볼 수 있습니다.
설정 방법
- 의존성 추가 (
build.gradle)groovy
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' - 설정 필요 없음: 스타터가 자동으로 감지해서 실행되는 모든 SQL을 가로채 로그로 찍어줍니다.
적용 전:
insert into member (name, age) values (?, ?)
적용 후:
insert into member (name, age) values ('홍길동', 30)
주의: 운영 환경에서는 로그 양이 폭발하고 성능 저하가 올 수 있으므로, 개발 환경(
local,dev)에서만 활성화하는 것이 좋습니다.
3. JobExecutionListener 활용하기
에러가 났을 때 스택트레이스만으로는 부족할 때가 있습니다. “작업 시작 전 데이터 상태”나 “작업 끝난 후 처리 건수”를 명시적으로 남기고 싶다면 리스너를 다세요.
@Component
@Slf4j
public class JobLoggerListener implements JobExecutionListener {
@Override
public void beforeJob(JobExecution jobExecution) {
log.info("## Job Started: {} at {}", jobExecution.getJobInstance().getJobName(), LocalDateTime.now());
// 파라미터 로깅
log.info("## Params: {}", jobExecution.getJobParameters());
}
@Override
public void afterJob(JobExecution jobExecution) {
log.info("## Job Finished. Status: {}", jobExecution.getStatus());
if (jobExecution.getStatus() == BatchStatus.FAILED) {
log.error("## Job Failed!! Check the exceptions below.");
jobExecution.getAllFailureExceptions().forEach(e -> log.error("Error: ", e));
}
}
}
이 리스너를 Job 설정에 등록해두면, 성공이든 실패든 깔끔하게 요약된 로그를 얻을 수 있습니다.
@Bean
public Job myJob() {
return new JobBuilder("myJob", jobRepository)
.listener(new JobLoggerListener()) // 리스너 등록
.start(step1())
.build();
}
4. 결론
디버깅을 잘하는 개발자는 “로그를 잘 심는 개발자”입니다.

DEBUG레벨로 프레임워크의 목소리를 듣고,- P6Spy로 DB와의 대화를 엿듣고,
- Listener로 작업의 시작과 끝을 기록하세요.
이 세 가지만 갖춰도 여러분의 퇴근 시간은 빨라질 것입니다.






