Introduction오랜만에 글 하나 쓰려고 예전에 노션에 정리해뒀던 문서 하나를 가져와봤다. 지금은 top priority에 해당하는 프로젝트에 참여하느라 잠시 중단된 작업인데, 현재 사용 중인 배치 프로세스를 더 높은 처리량 & 원활한 가용성을 보장하도록 개선하는 작업이었다. 배치 잡을 돌릴 때 건별로 이력(pending/processing/done/failed/...)을 남겨야 중간에 이런 저런 이유로 실패하더라도 주기적으로 상태를 체크해 해당 작업을 다시 실행할 수 있지 않겠나. 그런데 높은 처리량을 보장하려면 병렬로 실행해야 할텐데, 동시에 여러 인스턴스가 하나의 DB에 접근해서 히스토리를 가져와야 하는 상황이 발생하게 된다. 이때, 가져온 애들에 대해서는 lock을 걸어줘야 할 것이다. 문제..