[251124] fix: App.js 로그 정리 및 최적화-2
🕐 커밋 시간: 2025. 11. 24. 09:24:08 📊 변경 통계: • 총 파일: 5개 • 추가: +156줄 • 삭제: -111줄 📝 수정된 파일: ~ com.twin.app.shoptime/src/actions/empActions.js ~ com.twin.app.shoptime/src/hooks/useFocusHistory/useFocusHistory.js ~ com.twin.app.shoptime/src/lunaSend/common.js ~ com.twin.app.shoptime/src/views/CheckOutPanel/CheckOutPanel.jsx ~ com.twin.app.shoptime/src/views/HomePanel/HomePanel.jsx 🔧 함수 변경 내용: 📄 com.twin.app.shoptime/src/hooks/useFocusHistory/useFocusHistory.js (javascript): ✅ Added: dwarn(), derror() 🔄 Modified: getOrCreateGlobalBuffer() 📄 com.twin.app.shoptime/src/lunaSend/common.js (javascript): ✅ Added: dwarn(), derror() 📄 com.twin.app.shoptime/src/views/HomePanel/HomePanel.jsx (javascript): ✅ Added: dwarn(), derror() 🔧 주요 변경 내용: • 핵심 비즈니스 로직 개선
This commit is contained in:
@@ -3,6 +3,21 @@
|
||||
import { useRef, useCallback, useState, useMemo } from 'react';
|
||||
import fp from '../../utils/fp.js';
|
||||
|
||||
// Toggle debug logging in this file (false by default)
|
||||
const DEBUG_MODE = false;
|
||||
|
||||
const dlog = (...args) => {
|
||||
if (DEBUG_MODE) console.log(...args);
|
||||
};
|
||||
|
||||
const dwarn = (...args) => {
|
||||
if (DEBUG_MODE) console.warn(...args);
|
||||
};
|
||||
|
||||
const derror = (...args) => {
|
||||
console.error(...args);
|
||||
};
|
||||
|
||||
/**
|
||||
* useFocusHistory Hook - 경량화된 포커스 히스토리 관리
|
||||
* - 어떤 string 식별자든 받을 수 있는 범용적 구조
|
||||
@@ -112,7 +127,7 @@ const createFocusRingBuffer = () => {
|
||||
// 직접 포커스 (banner1, banner2)
|
||||
if (current === 'banner1') {
|
||||
if (previous === 'icons') {
|
||||
console.log('[DEBUG] 🔄 icons → banner1 복원 패턴');
|
||||
dlog('[DEBUG] 🔄 icons → banner1 복원 패턴');
|
||||
return {
|
||||
pattern: 'restore-banner1',
|
||||
videoTarget: 'banner1',
|
||||
@@ -120,7 +135,7 @@ const createFocusRingBuffer = () => {
|
||||
shouldShowBorder: true,
|
||||
};
|
||||
}
|
||||
console.log('[DEBUG] 🎯 banner1 직접 포커스 패턴');
|
||||
dlog('[DEBUG] 🎯 banner1 직접 포커스 패턴');
|
||||
return {
|
||||
pattern: 'direct-banner1',
|
||||
videoTarget: 'banner1',
|
||||
@@ -130,7 +145,7 @@ const createFocusRingBuffer = () => {
|
||||
}
|
||||
if (current === 'banner2') {
|
||||
if (previous === 'icons') {
|
||||
console.log('[DEBUG] 🔄 icons → banner2 복원 패턴');
|
||||
dlog('[DEBUG] 🔄 icons → banner2 복원 패턴');
|
||||
return {
|
||||
pattern: 'restore-banner2',
|
||||
videoTarget: 'banner2',
|
||||
@@ -138,7 +153,7 @@ const createFocusRingBuffer = () => {
|
||||
shouldShowBorder: true,
|
||||
};
|
||||
}
|
||||
console.log('[DEBUG] 🎯 banner2 직접 포커스 패턴');
|
||||
dlog('[DEBUG] 🎯 banner2 직접 포커스 패턴');
|
||||
return {
|
||||
pattern: 'direct-banner2',
|
||||
videoTarget: 'banner2',
|
||||
@@ -161,8 +176,8 @@ const createFocusRingBuffer = () => {
|
||||
|
||||
// 🔽 [개선] 간접 포커스 (banner3, banner4) - 더 깊은 히스토리 확인
|
||||
if (current === 'banner3' || current === 'banner4') {
|
||||
console.log(`[DEBUG] 🔍 간접 포커스 (${current}) - 히스토리 분석 시작`);
|
||||
console.log(`[DEBUG] 전체 히스토리:`, history);
|
||||
dlog(`[DEBUG] 🔍 간접 포커스 (${current}) - 히스토리 분석 시작`);
|
||||
dlog(`[DEBUG] 전체 히스토리:`, history);
|
||||
|
||||
// 히스토리에서 가장 최근의 banner1 또는 banner2 찾기
|
||||
let lastVideoBanner = null;
|
||||
@@ -172,13 +187,13 @@ const createFocusRingBuffer = () => {
|
||||
if (history[i] === 'banner1' || history[i] === 'banner2') {
|
||||
lastVideoBanner = history[i];
|
||||
lastVideoBannerDistance = i;
|
||||
console.log(`[DEBUG] 발견된 비디오 배너: ${lastVideoBanner} (거리: ${i})`);
|
||||
dlog(`[DEBUG] 발견된 비디오 배너: ${lastVideoBanner} (거리: ${i})`);
|
||||
break; // 가장 최근 것만 찾으면 됨
|
||||
}
|
||||
}
|
||||
|
||||
if (lastVideoBanner) {
|
||||
console.log(`[DEBUG] 🔄 간접 포커스 유지 패턴:`, {
|
||||
dlog(`[DEBUG] 🔄 간접 포커스 유지 패턴:`, {
|
||||
current: current,
|
||||
maintainTarget: lastVideoBanner,
|
||||
distance: lastVideoBannerDistance,
|
||||
@@ -192,7 +207,7 @@ const createFocusRingBuffer = () => {
|
||||
reason: `${current} 포커스, ${lastVideoBannerDistance}단계 이전 ${lastVideoBanner} 유지`,
|
||||
};
|
||||
} else {
|
||||
console.log(`[DEBUG] ❓ 간접 포커스 - 히스토리 없음:`, {
|
||||
dlog(`[DEBUG] ❓ 간접 포커스 - 히스토리 없음:`, {
|
||||
current: current,
|
||||
history: history.slice(0, 5),
|
||||
reason: '비디오 배너 히스토리 없음, 기본값 banner1 사용',
|
||||
@@ -294,7 +309,7 @@ const isValidBuffer = (buffer) => {
|
||||
typeof buffer.clear === 'function'
|
||||
);
|
||||
} catch (error) {
|
||||
console.warn('[FocusHistory] 버퍼 유효성 검증 실패:', error);
|
||||
dwarn('[FocusHistory] 버퍼 유효성 검증 실패:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
@@ -319,10 +334,10 @@ const getGlobalObject = () => {
|
||||
// if (typeof globalThis !== 'undefined') return globalThis;
|
||||
|
||||
// 최후의 수단 - 빈 객체
|
||||
console.warn('[FocusHistory] 전역 객체 접근 불가, 빈 객체 사용');
|
||||
dwarn('[FocusHistory] 전역 객체 접근 불가, 빈 객체 사용');
|
||||
return {};
|
||||
} catch (error) {
|
||||
console.error('[FocusHistory] 전역 객체 접근 오류:', error);
|
||||
derror('[FocusHistory] 전역 객체 접근 오류:', error);
|
||||
return {};
|
||||
}
|
||||
};
|
||||
@@ -337,14 +352,14 @@ const attemptBufferRestore = () => {
|
||||
const existingBuffer = globalObj[GLOBAL_BUFFER_KEY];
|
||||
|
||||
if (isValidBuffer(existingBuffer)) {
|
||||
console.log('[FocusHistory] ✅ 기존 전역 버퍼 복원 성공');
|
||||
dlog('[FocusHistory] ✅ 기존 전역 버퍼 복원 성공');
|
||||
return existingBuffer;
|
||||
} else if (existingBuffer) {
|
||||
console.warn('[FocusHistory] ⚠️ 손상된 전역 버퍼 발견, 제거 후 재생성');
|
||||
dwarn('[FocusHistory] ⚠️ 손상된 전역 버퍼 발견, 제거 후 재생성');
|
||||
delete globalObj[GLOBAL_BUFFER_KEY];
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('[FocusHistory] 버퍼 복원 시도 실패:', error);
|
||||
derror('[FocusHistory] 버퍼 복원 시도 실패:', error);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
@@ -369,10 +384,10 @@ const createAndRegisterBuffer = () => {
|
||||
}
|
||||
}
|
||||
|
||||
console.log('[FocusHistory] 🆕 새 전역 버퍼 생성 및 등록 완료');
|
||||
dlog('[FocusHistory] 🆕 새 전역 버퍼 생성 및 등록 완료');
|
||||
return newBuffer;
|
||||
} catch (error) {
|
||||
console.error('[FocusHistory] 버퍼 생성 및 등록 실패:', error);
|
||||
derror('[FocusHistory] 버퍼 생성 및 등록 실패:', error);
|
||||
// 최후의 수단 - 로컬 버퍼라도 반환
|
||||
return createFocusRingBuffer();
|
||||
}
|
||||
@@ -401,7 +416,7 @@ const getOrCreateGlobalBuffer = () => {
|
||||
globalFocusBuffer = createAndRegisterBuffer();
|
||||
return globalFocusBuffer;
|
||||
} catch (error) {
|
||||
console.error('[FocusHistory] 전역 버퍼 초기화 실패:', error);
|
||||
derror('[FocusHistory] 전역 버퍼 초기화 실패:', error);
|
||||
|
||||
// 최후의 수단: 최소한의 로컬 버퍼라도 제공
|
||||
try {
|
||||
@@ -410,7 +425,7 @@ const getOrCreateGlobalBuffer = () => {
|
||||
}
|
||||
return globalFocusBuffer;
|
||||
} catch (fallbackError) {
|
||||
console.error('[FocusHistory] 폴백 버퍼 생성도 실패:', fallbackError);
|
||||
derror('[FocusHistory] 폴백 버퍼 생성도 실패:', fallbackError);
|
||||
// 더미 버퍼 반환 (앱 크래시 방지)
|
||||
return {
|
||||
enqueue: () => ({ inserted: false, policy: null }),
|
||||
@@ -466,7 +481,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
try {
|
||||
localBufferRef.current = createFocusRingBuffer();
|
||||
} catch (error) {
|
||||
console.error('[FocusHistory] 로컬 버퍼 생성 실패:', error);
|
||||
derror('[FocusHistory] 로컬 버퍼 생성 실패:', error);
|
||||
// 더미 버퍼로 폴백
|
||||
localBufferRef.current = {
|
||||
enqueue: () => ({ inserted: false, policy: null }),
|
||||
@@ -497,7 +512,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
return localBufferRef.current;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('[FocusHistory] 버퍼 초기화 전체 실패:', error);
|
||||
derror('[FocusHistory] 버퍼 초기화 전체 실패:', error);
|
||||
// 최후의 더미 버퍼
|
||||
return {
|
||||
enqueue: () => ({ inserted: false, policy: null }),
|
||||
@@ -532,13 +547,13 @@ export const useFocusHistory = (options = {}) => {
|
||||
try {
|
||||
// 입력값 검증
|
||||
if (!focusId || typeof focusId !== 'string') {
|
||||
console.warn(`${logPrefix} Invalid focus ID:`, focusId);
|
||||
dwarn(`${logPrefix} Invalid focus ID:`, focusId);
|
||||
return { inserted: false, policy: null };
|
||||
}
|
||||
|
||||
// 버퍼 유효성 재검증
|
||||
if (!isValidBuffer(buffer)) {
|
||||
console.error(`${logPrefix} 버퍼가 손상됨, enqueue 실패`);
|
||||
derror(`${logPrefix} 버퍼가 손상됨, enqueue 실패`);
|
||||
return { inserted: false, policy: null };
|
||||
}
|
||||
|
||||
@@ -556,11 +571,11 @@ export const useFocusHistory = (options = {}) => {
|
||||
|
||||
// 🔽 [향상된 로깅] 패턴과 정책 정보 포함
|
||||
if (previous && current && previous !== current) {
|
||||
console.log(`${logPrefix} 🎯 ${previous} → ${current}`);
|
||||
console.log(`${logPrefix} 📋 buffer:`, buffer.getHistory());
|
||||
dlog(`${logPrefix} 🎯 ${previous} → ${current}`);
|
||||
dlog(`${logPrefix} 📋 buffer:`, buffer.getHistory());
|
||||
} else {
|
||||
console.log(`${logPrefix} 🎯 초기 포커스: ${current}`);
|
||||
console.log(`${logPrefix} 📋 buffer:`, buffer.getHistory());
|
||||
dlog(`${logPrefix} 🎯 초기 포커스: ${current}`);
|
||||
dlog(`${logPrefix} 📋 buffer:`, buffer.getHistory());
|
||||
}
|
||||
|
||||
// 디버그 모드에서는 전체 히스토리 표시
|
||||
@@ -573,7 +588,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
|
||||
return result; // { inserted, policy } 반환
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} enqueue 실행 중 오류:`, error, { focusId });
|
||||
derror(`${logPrefix} enqueue 실행 중 오류:`, error, { focusId });
|
||||
// 오류 발생 시 안전한 기본값 반환
|
||||
return { inserted: false, policy: null };
|
||||
}
|
||||
@@ -585,7 +600,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
const getQueueState = useCallback(() => {
|
||||
try {
|
||||
if (!isValidBuffer(buffer)) {
|
||||
console.warn(`${logPrefix} getQueueState: 버퍼 무효`);
|
||||
dwarn(`${logPrefix} getQueueState: 버퍼 무효`);
|
||||
return {
|
||||
current: null,
|
||||
previous: null,
|
||||
@@ -597,7 +612,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
}
|
||||
return buffer.getState();
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} getQueueState 오류:`, error);
|
||||
derror(`${logPrefix} getQueueState 오류:`, error);
|
||||
return {
|
||||
current: null,
|
||||
previous: null,
|
||||
@@ -613,16 +628,16 @@ export const useFocusHistory = (options = {}) => {
|
||||
const clearHistory = useCallback(() => {
|
||||
try {
|
||||
if (!isValidBuffer(buffer)) {
|
||||
console.warn(`${logPrefix} clearHistory: 버퍼 무효`);
|
||||
dwarn(`${logPrefix} clearHistory: 버퍼 무효`);
|
||||
return;
|
||||
}
|
||||
buffer.clear();
|
||||
triggerUpdate(); // 상태 변경 시 리렌더링 트리거
|
||||
if (enableLogging) {
|
||||
console.log(`${logPrefix} 히스토리 초기화됨`);
|
||||
dlog(`${logPrefix} 히스토리 초기화됨`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} clearHistory 오류:`, error);
|
||||
derror(`${logPrefix} clearHistory 오류:`, error);
|
||||
}
|
||||
}, [buffer, enableLogging, logPrefix, triggerUpdate]);
|
||||
|
||||
@@ -641,7 +656,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
}
|
||||
return buffer.getState();
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} currentState 계산 오류:`, error);
|
||||
derror(`${logPrefix} currentState 계산 오류:`, error);
|
||||
return {
|
||||
current: null,
|
||||
previous: null,
|
||||
@@ -658,7 +673,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
try {
|
||||
return isValidBuffer(buffer) ? buffer.getHistory() : [];
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} getHistory 오류:`, error);
|
||||
derror(`${logPrefix} getHistory 오류:`, error);
|
||||
return [];
|
||||
}
|
||||
}, [buffer, logPrefix]);
|
||||
@@ -668,7 +683,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
try {
|
||||
return isValidBuffer(buffer) ? buffer.getHistoryAt(distance) : null;
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} getHistoryAt 오류:`, error);
|
||||
derror(`${logPrefix} getHistoryAt 오류:`, error);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
@@ -681,7 +696,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
? buffer.detectPattern()
|
||||
: { pattern: 'error', videoTarget: null, confidence: 0 };
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} detectPattern 오류:`, error);
|
||||
derror(`${logPrefix} detectPattern 오류:`, error);
|
||||
return { pattern: 'error', videoTarget: null, confidence: 0 };
|
||||
}
|
||||
}, [buffer, logPrefix]);
|
||||
@@ -692,7 +707,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
? buffer.calculateVideoPolicy()
|
||||
: { videoTarget: null, shouldShowBorder: false, transition: 'error', confidence: 0 };
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} calculateVideoPolicy 오류:`, error);
|
||||
derror(`${logPrefix} calculateVideoPolicy 오류:`, error);
|
||||
return { videoTarget: null, shouldShowBorder: false, transition: 'error', confidence: 0 };
|
||||
}
|
||||
}, [buffer, logPrefix]);
|
||||
@@ -703,7 +718,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
? buffer.getDebugInfo()
|
||||
: { error: 'Buffer invalid or unavailable' };
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} getDebugInfo 오류:`, error);
|
||||
derror(`${logPrefix} getDebugInfo 오류:`, error);
|
||||
return { error: 'getDebugInfo failed', details: error.message };
|
||||
}
|
||||
}, [buffer, logPrefix]);
|
||||
@@ -716,7 +731,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
}
|
||||
return buffer.getHistory(); // 이미 최신순으로 정렬됨 [current, previous, older, oldest, ...]
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} getQueue 오류:`, error);
|
||||
derror(`${logPrefix} getQueue 오류:`, error);
|
||||
return [];
|
||||
}
|
||||
}, [buffer, logPrefix]);
|
||||
@@ -733,7 +748,7 @@ export const useFocusHistory = (options = {}) => {
|
||||
fp.map(fp.defaultTo(null)) // 각 항목도 null로 안전하게 처리
|
||||
)(queue);
|
||||
} catch (error) {
|
||||
console.error(`${logPrefix} getQueueSafe 오류:`, error);
|
||||
derror(`${logPrefix} getQueueSafe 오류:`, error);
|
||||
return []; // 에러 시 빈 배열
|
||||
}
|
||||
}, [getQueue, logPrefix]);
|
||||
|
||||
Reference in New Issue
Block a user