핵심 요약
올리브영의 배치에서 트랜잭션 미분리로 멀티스레드 수행 시 경합이 발생해 지연된 문제를 확인했고, 트랜잭션 분리와 스레드 정책 정비로 해결했다.
구현 방법
- Tasklet 기반에서 SomeService.processBusinessLogic()에 트랜잭션이 없어 실행되던 문제를 파악했다.
- ThreadPoolExecutor로 병렬 수행 시 각 스레드가 독립 트랜잭션 경계를 갖도록 해야 한다.
- 해결책으로 서비스 메소드를 @Transactional(propagation = Propagation.REQUIRES_NEW)로 분리하고, 스레드풀 설정을 조정했다.
주요 결과
- 트랜잭션 경계 분리로 배치가 정상 종료되고 시스템 부하가 안정화되었다.
- 정책 영향 등 추가 검토가 필요하다고 확인했다.



