인프런 커뮤니티 질문&답변

Choi님의 프로필 이미지
Choi

작성한 질문수

스프링 배치

다수의 배치와 메타 테이블간 의존성 관련 질문드립니다

작성

·

232

0

안녕하세요.

실무에 Quartz + Batch를 조합한 스케줄링 적용을 위해 강의를 보며 고군분투 하는 와중에 질문이 있습니다.

만약 배치 간격이 같다면 각각의 배치는 서로다른 비즈니스 로직을 수행하지만 배치 메타 데이터 저장을 위해

동시에 같은 메타 테이블에 접근을 해야되지 않나요 ??

테스트를 해보니 중간에 batch_job_execution_context, batch_job_execution_param 같은 테이블에 in

sert 같은 작업을 하다 문제가 발생했다며 오류가 발생합니다. 어쩔수 없이 구조상 시간을 다르게 해야되는

건지 이미 수행중인 배치가 있는지 체크를 하고 작업을 잠시 미루도록 만들어야 하는지... 궁금합니다.

(아직 학습이 미흡하여 부족한 질문.. 죄송합니다)

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

정확한 오류를 알지는 못하지만 서로 다른 배치를 실행하는동안 오류가 났디면 그건 키 중복이나 기타 DB 관련 오류 같은데요..

여러 배치를 동시에 실핼할 경우 무조건 오류가 나는 것은 아닙니다

이건 상황에 따라 다양한 결과를 내기 때문에 일단 오류 원인이 무엇인지를 정확하게 파악하는 것이 중요합니다

다만 동시가 아닌 시차를 두고 배치를 실행하는 것이 서로간 의존성이 분리되기 때문에 좀 더 안전할 수는 있겠습니다

0

안녕하세요, 인프런 AI 인턴입니다.

Choi님, 질문 주셔서 감사합니다. Spring Batch에서는 배치 작업 중 메타 데이터의 동시 접근 및 처리가 필요할 때 여러 가지 방법을 사용하여 이를 관리할 수 있습니다. 기본적으로 Spring Batch는 동시에 실행되는 배치 작업들이 서로 다른 비즈니스 로직을 수행하더라도, 내부적으로 동시성 관리를 통해 메타 데이터 테이블(batch_job_execution_context, batch_job_execution_param 등)에 접근할 수 있도록 설계되어 있습니다.

하지만 실제 환경에서는 배치 작업의 실행 간격이 같거나 동시에 실행될 경우, 이러한 메타 데이터 테이블에 동시에 접근하다 보니 경합 상태(Concurrency Issue)가 발생하여 오류가 나는 상황을 겪을 수 있습니다. 이를 해결하기 위해 다음과 같은 방법들을 고려할 수 있습니다:

  1. 분산 잠금(Distributed Locks) 메커니즘 사용: 여러 배치 작업이 동시에 실행될 때, 특정 자원에 접근하기 전에 잠금을 획득하고 작업이 끝난 후에 잠금을 해제하는 방식으로, 자원에 대한 동시 접근을 제어할 수 있습니다.
  2. 배치 실행 간격 조정: 가능하다면 배치 작업의 실행 간격을 조정하여, 동시에 같은 메타 데이터 테이블에 접근하는 상황을 피하는 것이 좋습니다.
  3. 스프링 배치의 고급 설정 활용: Spring Batch의 JobRepository 등을 통해 동시성 관리를 더 세밀하게 조정할 수 있습니다. 예를 들어, JobRepository에 대한 설정을 변경하여 배치 작업의 상태 관리를 더 효율적으로 할 수 있습니다.

실제 적용 시에는 프로젝트의 요구 사항과 환경을 고려하여 가장 적합한 해결책을 찾아야 합니다. 또한, Spring Batch 공식 문서에는 이러한 상황을 관리하기 위한 다양한 방법들이 소개되어 있으니 참고하시는 것도 도움이 될 것입니다.

추가적인 정보가 필요하시다면 Spring Batch 공식 문서를 확인해 보시거나, 구체적인 설정 방법에 대해 질문해 주시면 더 도움을 드릴 수 있을 것 같습니다.

도움이 되셨기를 바랍니다!

Choi님의 프로필 이미지
Choi

작성한 질문수

질문하기