connect('redis', 6379); $redis->select(9); CLI::write(CLI::color('🟢 Naver Worker running...', 'green')); } catch (\Exception $e) { CLI::error("Redis 연결 불가: " . $e->getMessage()); return; } while (true) { try { // 'brPop'은 [큐이름, 데이터] 형태의 배열을 반환합니다. $result = $redis->brPop(['naver:raw_queue'], 30); $result = $redis->brPop(['naver:raw_queue'], 30); if ($result) { try { $payload = json_decode($result[1], true); $this->processTask($payload); // 실제 DB 저장 등 } catch (\Exception $e) { // 처리 실패 시 다시 큐에 넣어서 나중에 재시도하게 함 $redis->lPush('naver:raw_queue', $result[1]); CLI::error("처리 실패로 데이터를 큐에 다시 넣었습니다."); } } } catch (\Exception $e) { CLI::error("Worker Loop Error: " . $e->getMessage()); // 루프가 너무 빨리 돌며 에러를 뿜는 것을 방지 sleep(1); } } } private function processTask($payload) { // 여기서 DB 모델(ConfirmModel)을 불러와 저장하고 // CURL을 사용하여 네이버 API를 호출하는 로직을 작성합니다. CLI::write("Processing: " . ($payload['request_data']['articleNumber'] ?? 'Unknown')); } }