request->getMethod() === 'post') { // POST 방식: JSON Body에서 데이터 가져오기 $data = $this->request->getJSON(true); } elseif ($this->request->getMethod() === 'get') { // GET 방식: Query Parameter에서 데이터 가져오기 $data = $this->request->getGet(); } else { // 지원하지 않는 메소드 처리 (예: PUT, DELETE 등) return $this->response->setStatusCode(Response::HTTP_METHOD_NOT_ALLOWED) ->setJSON(['resultCode' => 'E005', 'resultMessage' => 'Method not allowed. Use GET or POST.']); } // 2. 필수 항목 검증 $requiredKeys = ['articleNumbr', 'reqeustType', 'requestDatetime']; foreach ($requiredKeys as $key) { // 파싱된 데이터($data) 내에 키가 없거나 값이 비어있는지 확인 if (empty($data[$key])) { return $this->response->setStatusCode(Response::HTTP_BAD_REQUEST) ->setJSON([ 'resultCode' => 'E001', 'resultMessage' => "Missing required parameter: {$key}" ]); } } // 3. Redis 연결 및 예외 처리 try { // CI4 Cache Service 인스턴스를 가져옴. 기본 핸들러가 Redis여야 함. // (또는 Services::cache('redis')를 사용해 RedisHandler를 명시적으로 요청) $redis = \Config\Services::cache(); // Redis 핸들러가 맞는지 확인 (선택 사항) if (!($redis->getHandler() instanceof RedisHandler)) { throw new \Exception('Cache handler is not Redis. Check Config/Cache.php $handler setting.'); } // 요청에 재시도 횟수 초기화 $data['retry_count'] = 0; // RedisHandler의 getClient()를 사용하여 원본 \Redis 객체를 가져옵니다. // 주의: 모든 RedisHandler가 getClient()를 제공하는 것은 아니지만, CI4 내장 RedisHandler는 제공합니다. $client = $redis->getHandler()->getClient(); // 큐에 push $client->lPush('naver:queue', json_encode($data)); } catch (\Exception $e) { log_message('error', 'Redis connection failed: ' . $e->getMessage()); return $this->response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR) ->setJSON([ 'resultCode' => 'E999', 'resultMessage' => 'Internal server error (Queue system unavailable)' ]); } // 4. 성공 응답 return $this->response->setStatusCode(Response::HTTP_ACCEPTED) // 202 Accepted ->setJSON([ 'resultCode' => 'S000', 'resultMessage' => 'Request successfully queued for processing', 'articleNumbr' => $data['articleNumbr'] ]); } }