데이터 Backfill을 위한 자원 격리 전략
백엔드
데이터 Backfill을 위한 자원 격리 전략
두줄요약
실시간 트래픽과 백필 트래픽을 분리해 자원 고갈과 DB 스파이크를 막는 구조를 정리했습니다. 전용 큐와 비동기 스레드 풀, 크기 기반 청크 처리로 안정적인 대용량 재전송을 구현했습니다.
문제 상황
- 실시간 트래픽과 백필 트래픽이 공용 자원을 공유해 자원 고갈과 연결 타임아웃 발생
- 시간 기반 스케줄링으로 백필 데이터를 몰아서 처리하며 DB 부하 스파이크 유발
- 동기식 블로킹 대기 방식이 스레드와 메모리를 낭비하며 효율 저하
해결 방법
- NATS 토픽 분리와 ConcurrentLinkedQueue로 실시간 요청과 백필 요청을 인프라·메모리 레벨에서 격리
- @Async 전용 커스텀 스레드 풀로 백필 처리 워커를 분리해 웹 서버 스레드 보호
- 크기 기반 청크 추출과 saveAll 배치로 DB 투입량을 일정하게 제어
- 제어 플래그와 isEmpty() 체크로 블로킹 없이 최종 집계 트리거
