[생각정리] Spring Batch의 필요성

jeyong·2024년 4월 11일
0

공부 / 생각 정리  

목록 보기
68/120
post-custom-banner

프로젝트에서 정기결제 기능을 구현하기 위해 Spring Batch의 도입을 고려하게 되었다. 이 게시글에서는 왜 Spring Batch를 배워야 하는지에 대한 이유와 함께 개인적인 경험을 정리하고자 한다. 바쁜 와중에도 이렇게 게시글을 정리하는 이유는, 기술을 도입하기 전에 그 필요성을 명확히 이해하는 것이 중요하며, 이는 방향을 잃지 않고 목표에 집중할 수 있게 도와준다고 생각하기 때문이다.

1. 복잡한 Job 처리

정기결제 기능을 매월 1일에 실행하는 JOB을 구현하기 위해 Quartz를 사용했다.

JOB이 수행하야할 작업을 팀원들에게 공유하기 위해서 그림으로 작성해보았다. 작업이 굉장히 복잡해 보인다.

먼저 Quartz를 사용하여 초기 구현을 시도했으나, 코드를 작성하면서 점점 잘못됐다는 것을 느꼈고, 대용량 데이터 처리의 어려움, Job 실패 시의 대처 부재, Job 기록의 관리, 트랜잭션 처리의 복잡성 등 여러가지 고민들을 하게 되었다.

2. Spring Batch의 필요성

이러한 문제들을 해결하기 위해 Spring Batch의 학습을 시작했다. Spring Batch는 대용량 처리, 견고성, 신뢰성, 성능 등을 제공하여 배치 어플리케이션에 필요한 조건들을 만족시킨다. Spring Batch를 도입하고자하는 주요 이유를 아래와 같이 정리해보았다.

  • Quartz 자체는 Schedule 실행에 대한 History를 보관하지 않는다.

    Quartz는 스케줄 실행에 대한 히스토리를 저장하지 않는다. 정기결제 스케줄의 실행 정보는 중요하지만 Quartz만으로는 이를 보관할 수 없다.

  • Spring Batch는 실패한 chunk 단위만 재실행 가능하다.

Quartz만 사용할 경우, Job의 실패는 전체 재시작을 의미할 수 있고, 이는 모든 사용자들에 대해 처리 해주어야하는 대용량 처리에 맞지않는다. 또한, Spring Batch를 사용하면 Job의 각 단계가 더 명확하게 구분되어 관리하기 쉬워진다.

더 자세한 내용은 아래 게시글을 추천한다.

Quartz + Spring Batch 조합! Quartz Scheduler 와 Spring Batch 의 궁합과 조합을 정리.

3. 결론

Quartz만으로는 정기결제 기능의 구현이 부족하다고 판단되어, Spring Batch 학습을 진행 중이다. 처음에는 Quartz로 구현을 시도하며 코드 작성이 버거웠으나, Spring Batch를 학습하면서 점점 구현 방향이 명확해지고 있다. 기술 도입에는 항상 그 이유가 있다고 생각한다. 기술이 필요한 이유를 직접 경험해보니 해당 기술에 더욱 집중할 수 있게 되었다.

profile
노를 젓다 보면 언젠가는 물이 들어오겠지.
post-custom-banner

0개의 댓글