'E003', 'resultMessage' => 'Invalid API Key' ]); exit; } try { // 3. 데이터 수신 (POST JSON 또는 GET 파라미터) $rawData = file_get_contents('php://input'); $data = json_decode($rawData, true); // JSON 데이터가 비어있다면 GET 파라미터 사용 (테스트용) if (empty($data)) { $data = $_GET; } if (empty($data)) { throw new Exception("Empty data received"); } // 4. Redis 연결 $redis = new Redis(); // Docker 서비스 이름인 'redis' 사용 $success = $redis->connect('redis', 6379); if (!$success) { throw new Exception("Could not connect to Redis"); } $redis->select(10); // 10번 DB 사용 // 5. 큐에 넣을 데이터 포맷팅 $payload = [ 'request_data' => $data, 'received_at' => date('Y-m-d H:i:s'), 'client_ip' => $_SERVER['REMOTE_ADDR'] ]; // 'naver:raw_queue'라는 이름의 리스트에 저장 $redis->lPush('naver:raw_queue', json_encode($payload)); // 6. 네이버측에 성공 응답 (202 Accepted) // 처리가 완료된 것은 아니지만, 접수는 완료되었음을 의미 http_response_code(202); echo json_encode([ 'resultCode' => 'S000', 'resultMessage' => 'Request accepted and queued', 'articleNumber' => $data['articleNumber'] ?? 'N/A' ]); } catch (Exception $e) { // 7. 장애 발생 시 로그 기록 (시스템 로그) error_log("[API_RECEIVER_ERROR] " . $e->getMessage()); http_response_code(500); echo json_encode([ 'resultCode' => 'E999', 'resultMessage' => 'Internal System Error: ' . $e->getMessage() ]); }