Skip to content

Refactor: 알림 배치 전용 스레드 풀 분리 및 불필요한 REQUIRES_NEW 제거 #249

Description

@jjh75607

목적

알림 배치가 일반 비동기 작업과 동일한 스레드 풀을 사용해 배치 피크 시 API 응답 지연이 전이되고, 불필요한 REQUIRES_NEW 트랜잭션이 DB 커넥션 풀을 낭비하는 문제를 해결하기 위해

작업 상세 내용

  • AsyncConfignotificationTaskExecutor 빈 추가 (배치 전용 풀, corePoolSize/maxPoolSize 별도 튜닝)
  • NotificationProcessor.processExpiration(), processStockSummary()@Async("notificationTaskExecutor")로 변경 (NotificationProcessor.java:39)
  • processExpiration(), processStockSummary()@Transactional(propagation = REQUIRES_NEW)@Transactional(readOnly = true)로 변경 (읽기 전용 조회에 REQUIRES_NEW 불필요)
  • applicationTaskExecutorcorePoolSize=5, maxPoolSize=20으로 변경하여 탄력적 확장 허용
  • 배치 실행 중 일반 API 비동기 작업이 지연되지 않는지 확인

참고 사항

  • 현재 applicationTaskExecutor: corePoolSize=maxPoolSize=20, CallerRunsPolicy → 큐 포화 시 Tomcat 요청 스레드가 직접 비동기 작업 처리
  • 배치에서 회원 100명 처리 시 최대 100개 DB 커넥션 동시 점유 위험
  • docs/project-audit.md PERF-H4, PERF-M7, ARCH-L1 참고

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions