대규모 배치 작업의 진행 상황을 효율적으로 추적하기 위해 Redis를 활용한 BatchTracker 클래스 구현이 제안됩니다.
기존 방식의 한계
- 데이터베이스 병목: 각 레코드 상태를 DB에 직접 업데이트하는 방식은 I/O 오버헤드로 성능 저하를 초래합니다.
- 트랜잭션 오버헤드: 수많은 작은 트랜잭션이 DB 부하를 가중시킵니다.
Redis 기반 BatchTracker 설계BatchTracker는 Redis를 사용하여 배치 작업의 전체 진행 상황 및 개별 항목 상태를 관리합니다.
주요 기능
- 총 항목 수 추적:
total_items키에 전체 처리할 항목 수를 저장합니다. - 항목 상태 기록: *
processed_items해시: 처리된 항목 ID와 상태(성공/실패)를 저장하여 진행률 계산 및 실패 항목 식별에 활용합니다. *failed_items집합: 실패한 항목 ID만 별도로 저장하여 재처리 큐에 쉽게 추가합니다. - 원자적 업데이트: Redis 명령을 통해 동시성 문제를 방지합니다.
핵심 메서드
initialize(batch_id, total_items): 배치 ID와 총 항목 수로 트래커를 초기화합니다.track_item(item_id, status): 항목 상태를 기록하며, 실패 시failed_items집합에 추가합니다.progress: 현재 진행률을 반환합니다.failed_items_ids: 실패 항목 ID 목록을 반환합니다.
Redis 데이터 구조 활용
- Hash:
processed_items와 같이 많은 키-값 쌍을 효율적으로 저장합니다. - Set:
failed_items와 같이 중복 없는 고유 항목 목록 관리에 유용합니다.이러한 설계를 통해 데이터베이스 부담을 줄이고, 높은 처리량과 실시간 진행 상황 모니터링을 가능하게 하며, 실패 항목에 대한 재처리 로직 구현을 간편하게 지원합니다.