'response', '@service' => 'confirms', '@version' => '1.0.0' ]; $receivedKey = $_GET['key'] ?? ''; $logDir = __DIR__ . '/logs/'; if ($receivedKey !== $configKey) { http_response_code(403); $api_info['error'] = [ 'code' => '-1', 'message' => 'Unregistered key' ]; echo json_encode($api_info); 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 json_encode([ 'resultCode' => 'S000', 'resultMessage' => 'Request accepted and queued', 'articleNumber' => $data['articleNumber'] ?? 'N/A' ]); } catch (Exception $e) { // 7. 장애 발생 시 로그 기록 (시스템 로그) $api_info['error'] = [ 'code' => '-1', 'message' => $e->getMessage() ]; writeLog( json_encode($api_info) ." | Received: " . json_encode($data), 'ERROR'); http_response_code(500); echo json_encode($api_info); } /** * 날짜별 로그 기록 함수 * @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'); $formattedMessage = "[$timestamp] [$level] $message" . PHP_EOL; // 5. 파일 기록 (FILE_APPEND로 기존 내용 뒤에 추가) file_put_contents($logFile, $formattedMessage, FILE_APPEND); }