AI Briefing

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

·2024.11.07 00:30

핵심 내용

올리브영의 Spring Batch 작업 중 장애가 발생하여, 멀티스레드 환경에서의 트랜잭션 분리와 ThreadPoolExecutor 설정 오류를 분석했다.

자세히 보기

올리브영의 특정 Batch 작업이 종료되지 않고 멈추는 장애가 발생했다. 초기에는 DB Deadlock을 의심했으나, 로그 확인 결과 특정 데이터 업데이트 이후 프로세스가 중단된 것을 확인했다.

원인 분석 결과, Spring Batch의 Tasklet 내에서 호출되는 서비스 메소드에 @Transactional 설정이 누락되어 있었다. 이로 인해 Spring의 TransactionSynchronizationManager가 ThreadLocal을 통해 각 스레드마다 독립적인 트랜잭션을 생성하게 되었고, 결과적으로 의도치 않은 Propagation.REQUIRES_NEW와 같은 효과가 발생했다.

또한, ThreadPoolExecutor를 사용하여 멀티스레드로 작업을 병렬 처리하는 과정에서 설정된 RejectedExecutionHandler와 작업 큐의 구조가 장애의 핵심 원인 중 하나로 작용했다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.