작성
·
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)가 발생하여 오류가 나는 상황을 겪을 수 있습니다. 이를 해결하기 위해 다음과 같은 방법들을 고려할 수 있습니다:
JobRepository
등을 통해 동시성 관리를 더 세밀하게 조정할 수 있습니다. 예를 들어, JobRepository
에 대한 설정을 변경하여 배치 작업의 상태 관리를 더 효율적으로 할 수 있습니다.실제 적용 시에는 프로젝트의 요구 사항과 환경을 고려하여 가장 적합한 해결책을 찾아야 합니다. 또한, Spring Batch 공식 문서에는 이러한 상황을 관리하기 위한 다양한 방법들이 소개되어 있으니 참고하시는 것도 도움이 될 것입니다.
추가적인 정보가 필요하시다면 Spring Batch 공식 문서를 확인해 보시거나, 구체적인 설정 방법에 대해 질문해 주시면 더 도움을 드릴 수 있을 것 같습니다.
도움이 되셨기를 바랍니다!