목적
알림 배치가 일반 비동기 작업과 동일한 스레드 풀을 사용해 배치 피크 시 API 응답 지연이 전이되고, 불필요한 REQUIRES_NEW 트랜잭션이 DB 커넥션 풀을 낭비하는 문제를 해결하기 위해
작업 상세 내용
참고 사항
- 현재
applicationTaskExecutor: corePoolSize=maxPoolSize=20, CallerRunsPolicy → 큐 포화 시 Tomcat 요청 스레드가 직접 비동기 작업 처리
- 배치에서 회원 100명 처리 시 최대 100개 DB 커넥션 동시 점유 위험
docs/project-audit.md PERF-H4, PERF-M7, ARCH-L1 참고
목적
작업 상세 내용
AsyncConfig에notificationTaskExecutor빈 추가 (배치 전용 풀, corePoolSize/maxPoolSize 별도 튜닝)NotificationProcessor.processExpiration(),processStockSummary()—@Async("notificationTaskExecutor")로 변경 (NotificationProcessor.java:39)processExpiration(),processStockSummary()—@Transactional(propagation = REQUIRES_NEW)→@Transactional(readOnly = true)로 변경 (읽기 전용 조회에 REQUIRES_NEW 불필요)applicationTaskExecutor—corePoolSize=5,maxPoolSize=20으로 변경하여 탄력적 확장 허용참고 사항
applicationTaskExecutor:corePoolSize=maxPoolSize=20,CallerRunsPolicy→ 큐 포화 시 Tomcat 요청 스레드가 직접 비동기 작업 처리docs/project-audit.mdPERF-H4, PERF-M7, ARCH-L1 참고