[1회차] Spring Batch 스터디: 후기 및 추가 학습 내용

아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.
DEVOCEAN에 연재 중인 KIDO님의 글을 메인 교안으로 진행되는 스터디입니다. [메인 교안 바로 가기]

 

안녕하세요! 오늘은 Spring Batch 관련 스터디 첫 회차에 참여한 후기를 공유하고자 합니다.

왜 Spring Batch를 배워야 할까?

첫 번째 스터디를 통해 스프링 배치의 개요에 대해 공부했습니다. 스터디를 시작할 때 KIDO님께서 Spring Batch를 배워야 하는 이유에 대해 설명해주셨습니다. KIDO님은 현재 DEVOCEAN에서 Spring Batch 관련 글을 연재 중이신데, 아래는 KIDO님의 말씀을 정리한 내용입니다.

 

스프링 배치는 배치 처리에 특화된 ‘프레임워크’입니다. 프레임워크의 가장 큰 특징은 누구나 동일한 구조로 코드를 작성할 수 있다는 점입니다. 물론, 처음에는 Spring Batch가 다소 무겁게 느껴질 수 있습니다. 기본적으로 DB 설정이 필요하고, 배치 실행 시 발생하는 다양한 예외 상황에 대한 처리도 고려해야 하기 때문입니다.

 

스프링 배치 vs 스케줄러

배치 작업은 스케줄러로도 구현할 수 있습니다. 하지만 스케줄러는 시간 변경 시 재배포가 필요하거나, 배포 중에 배치 작업이 중단되면 다시 복구하는 데 문제가 발생할 수 있습니다. 이런 경우 스케줄러는 유지보수에 매우 불편한 도구가 될 수 있습니다. 반면, 스프링 배치는 이런 문제를 미리 고려하고 다양한 기능을 제공합니다.

 

그렇다고 해서 완전히 날것의 배치 프로그램을 만드는 것도 매우 불편합니다. 트랜잭션 단위를 어떻게 설정할지, 언제 어떻게 처리할지 등 고려해야 할 사항이 너무나 많기 때문입니다. 이런 상황에서 Spring Batch는 매우 효과적인 해결책이 됩니다.

 

예를 들어, Spring Batch의 장점 중 하나는 자동 로깅 기능입니다. 개발자가 별도로 로깅 로직을 구현하지 않아도, Spring Batch가 자동으로 처리 과정을 기록해줍니다. 또한 작업의 규모에 따라 단순한 작업은 tasklet으로, 대규모 작업은 chunk 단위로 나누어 처리할 수 있어 효율적으로 배치 작업을 관리할 수 있습니다.

 

Spring Batch는 다양한 서비스 및 환경과의 연동이 가능합니다. 예를 들어, 쿠버네티스에서 배치 작업으로 실행할 수 있고, AWS Batch와도 연동이 가능합니다. 젠킨스와 같은 도구와의 연계도 쉽게 할 수 있습니다.

 

특히 젠킨스와 연동하는 부분은 후에 KIDO님께서 따로 연재 예정이라고 하시니 많은 관심 부탁드립니다.(😚👏👏)

 

이번 스터디를 통해 Spring Batch에 대한 기본적인 이해를 할 수 있었고, 앞으로 더 깊이 있게 공부해야 할 부분들도 파악할 수 있었습니다. 특히 애노테이션에 대해 깊이 있게 살펴봐야겠다는 생각이 들었습니다. 대단하신 분들이 많은 곳에서 함께 스터디를 할 수 있어 매우 영광이었고 감사했습니다.

 

아래는 스터디를 진행하며 보충 공부를 하고 정리한 내용입니다.

 

보충 공부

1. Spring Batch 실행 환경 설정

처음에는 Spring Batch 애플리케이션이 실행 후 바로 종료 되어서 ‘테이블이 잘 만들어졌겠거니~’ 했습니다. 그런데 제가 기존에 했던 방법으로 진행하면 테이블이 생성되지 않는다는 것을 알게 되었습니다.

 

테이블이 자동으로 생성되지 않는 문제

  • Spring Boot 3.0 이상에서의 변경사항
    • @EnableBatchProcessing 애노테이션의 역할이 변화되었습니다.
      • Spring Boot 3.0 이전: auto configuration을 활성화하는 데 사용
      • Spring Boot 3.0 이상: auto configuration 사용을 위해 제거
  • H2 DB 사용으로 인한 웹 콘솔 확인 필요
    • spring-boot-starter-web 의존성의 추가가 필요합니다.
    • 이 의존성이 없으면 HTTP 요청을 처리할 수 없어 H2 콘솔에 접근이 불가능합니다.
  • 스키마 초기화 설정
    • application.yml에 다음 설정 추가가 필요합니다.
    • batch: jdbc: initialize-schema: always
    • 스터디에서 해당 설정을 해야 테이블이 생성된다고 들었었는데, 실험 결과 해당 코드가 없어도 테이블이 생성 되었습니다. 제 짐작으로는 H2 DB를 사용하면 자동 생성이 되고, 외부 DB를 사용 하면 필요할 것으로 보입니다.

2. Spring Batch 테이블 구조

KIDO님께서 Spring Batch에서 사용되는 테이블들의 순서와 관계를 설명해 주셔서 정리해보았습니다.

Spring Batch의 경우 다음과 같이 기본 테이블이 존재합니다.

 

각 테이블이 어떤 역할을 하는지는 이전 게시글에 정리 해두었습니다.

- 이전 게시글 바로 보러가기: [1회차] SpringBatch 빠르게 시작하기 

 

이 테이블을 배치 작업(Job)을 돌렸을 때 데이터가 생성되는 순서대로 테이블을 나타내 보았습니다.

여기서 중요한 점은 JOB → JOB_EXECUTION → STEP_EXECUTION 테이블 순서로 데이터가 기록 된다는 것입니다.

 

왜 이렇게 미리 순서를 그려볼 생각을 하지 못했을까요? 덕분에 이해가 쉽게 되었습니다. 감사합니다. 👏👏👏

 

 


이 글은 제가 공부하면서 정리한 내용이라 혹시 잘못된 정보가 있을 수 있습니다.

만약 틀린 부분을 발견하셨다면 댓글로 알려주시면 감사하겠습니다 🙇‍♀️

 

긴 글 읽어주셔서 감사합니다.