'-1', 'message' => 'Unregistered key' ]); exit; } try { // 3. 데이터 수신 (POST JSON 또는 GET 파라미터) $rawData = file_get_contents('php://input'); $data = json_decode($rawData, true); 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(9); // 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)); // --- [여기서부터 로그 저장 코드 추가] --- // 들어온 원본($rawData)을 그대로 기록합니다. writeLog("RAW_RECEIVE | " . $rawData, 'INFO'); // -------------------------------------- // 6. 네이버측에 성공 응답 (202 Accepted) // 처리가 완료된 것은 아니지만, 접수는 완료되었음을 의미 http_response_code(202); echo apiResponse([ 'code' => '1', 'message' => 'Request accepted and queued' ]); } catch (Exception $e) { // 7. 장애 발생 시 로그 기록 (시스템 로그) writeLog( 'Exception :' . apiResponse($data) , 'ERROR'); http_response_code(500); echo apiResponse([ 'code' => '-1', 'message' => $e->getMessage() ]); } /** * 날짜별 로그 기록 함수 * @param string $message 로그 내용 * @param string $level 로그 레벨 (INFO, ERROR, DEBUG 등) */ function writeLog($message, $level = 'ERROR') { // 1. 로그 저장 경로 설정 (프로젝트 루트의 logs 폴더) $logBaseDir = __DIR__ . '/logs'; $Dir = $logBaseDir . '/'; // 2. 폴더가 없으면 생성 (연/월 구조로 관리하면 파일이 너무 많아지는 것을 방지) if (!is_dir($Dir)) { @mkdir($Dir, 0777, true); } // 3. 파일명 결정 (예: logs/2025/12/2025-12-22.log) $logFile = $Dir . date('Y-m-d') . '.log'; // 4. 로그 포맷팅 (시간 [레벨] 메시지) $timestamp = date('Y-m-d H:i:s'); $singleLineMessage = str_replace(["\r", "\n", "\t"], " ", $message); $formattedMessage = "[$timestamp] [$level] $singleLineMessage" . PHP_EOL; // 5. 파일 기록 (FILE_APPEND로 기존 내용 뒤에 추가) file_put_contents($logFile, $formattedMessage, FILE_APPEND); } // 도우미 함수 정의 function apiResponse($error = null) { $base = [ '@type' => 'response', '@service' => 'confirms', '@version' => '1.0.0' ]; if ($error) $base['error'] = $error; return json_encode($base); }