피드로 돌아가기
Laravel Waiting Request
Dev.toDev.to
Backend

Cache 기반 Polling 구조로 Background Job 완료 전 데이터 정합성 확보

Laravel Waiting Request

Aftabul Islam2026년 5월 23일6intermediate

Context

Background Job 처리 중 관련 데이터에 대한 읽기 요청 발생 시, 처리 전의 과거 데이터나 잘못된 정보가 제공되는 Data Inconsistency 문제 발생. 이를 해결하기 위해 작업 완료 전까지 읽기 요청을 일시적으로 대기시키는 메커니즘 필요.

Technical Solution

  • Cache 기반의 Resource-specific Blocker 설계를 통한 정밀한 대기 제어 구현
  • addBlocker를 통해 Class Path와 Resource ID 조합의 고유 Cache Key 생성 및 블로킹 시작
  • whenResolved 함수 내 Polling 로직을 구축하여 설정된 check_interval(기본 250ms) 주기로 상태 확인
  • Unix Expiry Timestamp를 포함한 TTL 설계를 통해 Job Crash 발생 시에도 시스템 가용성을 보장하는 Auto-expiry 메커니즘 적용
  • resolveBlocker 호출을 통해 작업 완료 신호를 전파하고 대기 중인 HTTP Worker를 해제하는 이벤트 흐름 구축
  • Redis/Memcached 등 분산 캐시 드라이버 활용으로 Web Process와 Queue Worker 간 상태 동기화 달성

- Job의 최악 실행 시간을 고려하여 `max_blocking_time`을 넉넉하게 설정할 것 - 예외 발생 시에도 Blocker가 해제되도록 `finally` 블록 내에 `resolveBlocker`를 배치할 것 - HTTP Worker 점유 시간 최적화를 위해 UX 요구사항에 맞춘 `timeout` 설정 필수 - Write Lock 목적의 Distributed Mutex가 아닌, Read-after-Write 정합성을 위한 Best-effort 대기 수단으로 활용할 것 - Queue Worker 내부에서 `whenResolved`를 호출하여 Worker Slot을 낭비하는 설계 지양

원문 읽기