get($key); if ($cached !== null) { return $cached; } $result = $callback(); // 에러 응답은 캐시하지 않음 (일시적 상태 회복 가능성 보장) if (! (is_array($result) && isset($result['error']))) { $cache->put($key, $result, $ttl); } return $result; } /** * API 사용량을 기록합니다. * * @param string $endpoint 엔드포인트 * @param array $data 관련 데이터 * @return void */ protected function logApiUsage(string $endpoint, array $data = []): void { // TODO: API 사용량 통계 시스템 구현 Log::info("Public API Usage: {$endpoint}", [ 'ip' => request()->ip(), 'user_agent' => request()->userAgent(), 'data' => $data, 'timestamp' => now() ]); } /** * 클라이언트 정보를 가져옵니다. * * @return array */ protected function getClientInfo(): array { return [ 'ip' => request()->ip(), 'user_agent' => request()->userAgent(), 'referer' => request()->header('referer'), 'timestamp' => now() ]; } }