작성
·
544
0
좋은 강의 완강하였습니다!
질문이 있어서 남깁니다.
(모두 강의처럼 설정하고 jobscheduler 사용시 가정입니다)
배치 작업이 진행될 때 동시에 다른 배치 작업이 진행된다면 동시성문제가 일어날 수 있나요??
한마디로 주기설정시에 모두 겹치지 않게 주기를 설정해야하나요??
예를 들어 데이터를 읽어오는 job이 실행이 될 때 그 데이터에 관해서 update나 create delete쿼리가 날라온다면 에러가 터지나요??
아니면 배치작업이 먼저 일어났으니까 배치 작업이 끝나고 날라온 쿼리가 작용되나요??
만약 이런 문제가 있다면 배치작업은 항상 서비스 점검시간을 두어 진행되야 하나요??
답변 2
0
0
강의가 도움이 되신 것 같아 기쁜 마음이에요 :)
질문 내용에 대해서 답변을 드리겠습니다.
배치 작업을 수행할 때 일반적으로는 동일한 테이블 작업은 시간 차를 두고 작업을 진행해요.
예시를 보자면 a 배치 작업에서 abc 테이블을 작업하고 있을 때, b배치 작업이 수행되고 a배치에서 작업 중인 데이터를 작업(e.x, update)하는 경우가 있을 수 있습니다.
이때는 a배치 작업으로 abc 테이블의 작업 중인 행은 잠금상태가 되기 때문에 lock이 걸리게 됩니다.
a 배치 작업은 문제 없이 끝나겠지만 b 배치 작업은 작업 중 멈추거나 정상적으로 종료가 안 되겠습니다.
(b 배치에서 단순 조회 작업이라면 작업이 완료가 되나 a배치 종료 후 lock이 풀리고 작업을 하기 때문에 수행 속도가 많이 늦어질 수 있어요.)
위의 문제는 경험상 말씀을 드렸는데요. 데이터베이스의 종류마다 테이블 락이나 행에 락이 걸리는 경우가 다르기 때문에 예시와 다른 경우가 발생할 수 있습니다.
그렇기 때문에 되도록 조회가 아닌 똑같은 데이터를 작업한다면 같은 시간대를 피해 주셔야겠습니다.
배치 작업은 실시간 처리를 하는 경우가 아니기 때문에 문제가 생기면, 고객이 직접 몸에 와닿기 전까지 해결을 하겠습니다 😢
그래도 해결을 못했다면 내용에 대해서 공지를 올리고 수습을 해요. (배치 작업 때문에 전체 서비스가 멈추는 경우는 흔치 않아요. 그래서 배치 작업의 대한 내용만을 빠르게 수습한답니다.)
질문 주신 내용은 실무에서도 고민을 많이 필요로 하는 내용이에요. 이런 내용 때문에 실시간 처리보다 배치 처리가 더 어렵다고 하시는 분들도 있습니다.
배치 개발 시 질문해주신 내용들을 고민하신다면 더 나은 배치 개발과 실력도 금방 향상될 수 있으시겠습니다.
감사합니다 ^^