그날, 우리의 배치는 왜 멈추었을까?
16
AI 요약

이 글은 AI가 원문을 분석하여 핵심 내용을 요약한 것입니다.

올리브영 배치 시스템의 문제

올리브영의 배치 시스템에서 A 배치가 멈추는 문제가 발생했습니다. 데이터독을 통해 배치의 상태를 모니터링하는 중, 특정 배치가 정상 종료 시각을 지나도 끝나지 않는 것을 발견했습니다. 로그 분석을 통해 DB 데드락이 의심되었고, Row Level Deadlock이 발생했을 가능성이 제기되었습니다.

트랜잭션 설정의 중요성

해당 배치에서는 Spring Batch의 Tasklet 기반으로 작업을 수행했으며, 트랜잭션 설정이 부적절했습니다. 서비스 메소드에 @Transactional 설정이 빠져 있어 트랜잭션이 분리되지 않았고, 멀티스레드 환경에서의 경합이 발생했습니다.

ThreadPoolExecutor의 영향

ThreadPoolExecutor의 CallerRunsPolicy로 인해 메인 스레드에서 작업이 수행되면서 경합이 발생, 결국 배치가 종료되지 않았습니다. 적절한 트랜잭션 설정과 스레드 정책을 통해 이러한 문제를 예방할 수 있음을 알게 되었습니다.