request->is('post') ) { // POST 방식: JSON Body에서 데이터 가져오기 $data = $this->request->getJSON(true); } else if ( $this->request->is('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 = ['articleNumber', 'requestType', '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 연결 및 예외 처리 // 3. Redis 연결 및 직접 푸시 try { $redis = new \Redis(); // Docker 환경이므로 host를 'redis'로 설정 $success = $redis->connect('redis', 6379); if (!$success) { throw new \Exception('Redis connection failed'); } $redis->select(10); // 10번 DB 선택 // 데이터 준비 $data['retry_count'] = 0; // 리스트에 데이터 삽입 (이 명령어가 실행되어야 monitor에 LPUSH가 뜹니다) $redis->lPush('naver:queue', json_encode($data)); } catch (\Exception $e) { log_message('error', 'Redis Push Error: ' . $e->getMessage()); return $this->response->setStatusCode(500)->setJSON([ 'resultCode' => 'E999', 'resultMessage' => 'Redis Connection Error' ]); } // 4. 성공 응답 return $this->response->setStatusCode(Response::HTTP_ACCEPTED) // 202 Accepted ->setJSON([ 'resultCode' => 'S000', 'resultMessage' => 'Request successfully queued for processing', 'articleNumber' => $data['articleNumber'] ]); } }