1. 배경
기존 출고 처리 로직은 싱글스레드 방식으로 구현되어, 대량 주문(10,000건 이상) 처리 시 성능 저하 발생.
이를 해결하기 위해 **멀티스레딩과 낙관적 락(Optimistic Lock)**을 적용하여 성능 개선을 목표로 함.
2. 기존 방식 문제점
- 싱글스레드 처리: 모든 상품을 순차적으로 처리 → 처리 시간이 길어짐
- 대량 처리 시 병목 현상 발생: CPU 활용률 낮음
- 데이터 정합성 이슈 우려: 멀티스레딩 도입 시 Lost Update 가능성
3. 개선 내용
- 멀티스레딩 적용
CompletableFuture
+ ExecutorService
사용
- 낙관적 락 적용
@Version
필드 기반 Optimistic Lock
- 충돌 시 재시도 로직(
updateStockWithRetry
) 구현
- 비동기 알림 처리
- WebClient + Reactor 기반 비동기 알림
4. 성능 테스트 환경
- Framework: Spring Boot 3.2
- DB: H2 Memory DB (실제 MySQL 환경도 테스트 예정)
- 테스트 데이터:
- 상품(Product) 10,000건
- OutboundRequestDto(출고 요청) 10,000개
- 측정 도구:
- JUnit5 + StopWatch
- ExecutorService 동시성 테스트
- JMeter(추가 테스트 예정)