console.log 삭제
This commit is contained in:
@@ -2,38 +2,28 @@ import axios, { AxiosResponse, AxiosError } from "axios";
|
||||
|
||||
// API URL 동적 설정 - 환경별 명확한 분리
|
||||
const getApiBaseUrl = (): string => {
|
||||
console.log("🔍 API URL 결정 시작!");
|
||||
|
||||
if (typeof window !== "undefined") {
|
||||
const currentHost = window.location.hostname;
|
||||
const currentPort = window.location.port;
|
||||
const fullUrl = window.location.href;
|
||||
|
||||
console.log("🌐 현재 접속 정보:", {
|
||||
hostname: currentHost,
|
||||
fullUrl: fullUrl,
|
||||
port: currentPort,
|
||||
});
|
||||
|
||||
// 로컬 개발환경: localhost:9771 또는 localhost:3000 → localhost:8080
|
||||
if ((currentHost === "localhost" || currentHost === "127.0.0.1") && (currentPort === "9771" || currentPort === "3000")) {
|
||||
console.log("🏠 로컬 개발 환경 감지 → localhost:8080/api");
|
||||
if (
|
||||
(currentHost === "localhost" || currentHost === "127.0.0.1") &&
|
||||
(currentPort === "9771" || currentPort === "3000")
|
||||
) {
|
||||
return "http://localhost:8080/api";
|
||||
}
|
||||
|
||||
// 서버 환경에서 localhost:5555 → 39.117.244.52:8080
|
||||
if ((currentHost === "localhost" || currentHost === "127.0.0.1") && currentPort === "5555") {
|
||||
console.log("🌍 서버 환경 (localhost:5555) 감지 → 39.117.244.52:8080/api");
|
||||
return "http://39.117.244.52:8080/api";
|
||||
}
|
||||
|
||||
// 기타 서버 환경 (내부/외부 IP): → 39.117.244.52:8080
|
||||
console.log("🌍 서버 환경 감지 → 39.117.244.52:8080/api");
|
||||
return "http://39.117.244.52:8080/api";
|
||||
}
|
||||
|
||||
// 서버 사이드 렌더링 기본값
|
||||
console.log("🖥️ SSR 기본값 → 39.117.244.52:8080/api");
|
||||
return "http://39.117.244.52:8080/api";
|
||||
};
|
||||
|
||||
@@ -73,18 +63,9 @@ apiClient.interceptors.request.use(
|
||||
(config) => {
|
||||
// JWT 토큰 추가
|
||||
const token = TokenManager.getToken();
|
||||
console.log("🔍 API 요청 토큰 확인:", {
|
||||
hasToken: !!token,
|
||||
tokenLength: token ? token.length : 0,
|
||||
tokenStart: token ? token.substring(0, 30) + "..." : "없음",
|
||||
url: config.url,
|
||||
method: config.method,
|
||||
});
|
||||
|
||||
if (token && !TokenManager.isTokenExpired(token)) {
|
||||
config.headers.Authorization = `Bearer ${token}`;
|
||||
console.log("✅ JWT 토큰 추가됨:", token.substring(0, 50) + "...");
|
||||
console.log("🔑 Authorization 헤더:", `Bearer ${token.substring(0, 30)}...`);
|
||||
} else if (token && TokenManager.isTokenExpired(token)) {
|
||||
console.warn("❌ 토큰이 만료되었습니다.");
|
||||
// 토큰 제거
|
||||
@@ -97,7 +78,6 @@ apiClient.interceptors.request.use(
|
||||
|
||||
// FormData 요청 시 Content-Type 자동 처리
|
||||
if (config.data instanceof FormData) {
|
||||
console.log("📎 FormData 감지 - Content-Type 헤더 제거");
|
||||
delete config.headers["Content-Type"];
|
||||
}
|
||||
|
||||
@@ -120,13 +100,6 @@ apiClient.interceptors.request.use(
|
||||
}
|
||||
}
|
||||
|
||||
console.log("🌐 API 요청 시 언어 정보:", {
|
||||
currentLang,
|
||||
globalVar: (window as unknown as { __GLOBAL_USER_LANG?: string }).__GLOBAL_USER_LANG,
|
||||
localStorage: typeof window !== "undefined" ? localStorage.getItem("userLocale") : null,
|
||||
url: config.url,
|
||||
});
|
||||
|
||||
if (config.params) {
|
||||
config.params.userLang = currentLang;
|
||||
} else {
|
||||
@@ -134,8 +107,6 @@ apiClient.interceptors.request.use(
|
||||
}
|
||||
}
|
||||
|
||||
console.log("📡 API 요청:", config.method?.toUpperCase(), config.url, config.params, config.data);
|
||||
console.log("📋 요청 헤더:", config.headers);
|
||||
return config;
|
||||
},
|
||||
(error) => {
|
||||
@@ -147,7 +118,6 @@ apiClient.interceptors.request.use(
|
||||
// 응답 인터셉터
|
||||
apiClient.interceptors.response.use(
|
||||
(response: AxiosResponse) => {
|
||||
console.log("✅ API 응답:", response.status, response.config.url, response.data);
|
||||
return response;
|
||||
},
|
||||
(error: AxiosError) => {
|
||||
@@ -194,7 +164,6 @@ apiClient.interceptors.response.use(
|
||||
|
||||
// 401 에러 시 토큰 제거 및 로그인 페이지로 리다이렉트
|
||||
if (status === 401 && typeof window !== "undefined") {
|
||||
console.log("🔄 401 에러 감지 - 토큰 제거 및 로그인 페이지로 리다이렉트");
|
||||
localStorage.removeItem("authToken");
|
||||
|
||||
// 로그인 페이지가 아닌 경우에만 리다이렉트
|
||||
|
||||
@@ -79,12 +79,7 @@ export const menuApi = {
|
||||
// 관리자 메뉴 목록 조회
|
||||
getAdminMenus: async (): Promise<ApiResponse<MenuItem[]>> => {
|
||||
const response = await apiClient.get("/admin/menus");
|
||||
console.log("=== API 응답 데이터 ===");
|
||||
console.log("전체 응답:", response);
|
||||
console.log("응답 데이터:", response.data);
|
||||
if (response.data.success && response.data.data && response.data.data.length > 0) {
|
||||
console.log("첫 번째 메뉴 원본 데이터:", response.data.data[0]);
|
||||
console.log("첫 번째 메뉴 키들:", Object.keys(response.data.data[0]));
|
||||
}
|
||||
return response.data;
|
||||
},
|
||||
@@ -145,12 +140,9 @@ export const menuApi = {
|
||||
menuCode?: string;
|
||||
keyType?: string;
|
||||
}): Promise<ApiResponse<LangKey[]>> => {
|
||||
console.log("🔍 다국어 키 목록 조회 API 호출:", "/multilang/keys", params);
|
||||
|
||||
try {
|
||||
// Node.js 백엔드의 실제 라우팅과 일치하도록 수정
|
||||
const response = await apiClient.get("/multilang/keys", { params });
|
||||
console.log("✅ 다국어 키 목록 조회 성공:", response.data);
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
console.error("❌ 다국어 키 목록 조회 실패:", error);
|
||||
|
||||
@@ -317,7 +317,6 @@ export class ComponentRegistry {
|
||||
static clear(): void {
|
||||
this.components.clear();
|
||||
this.eventListeners.length = 0;
|
||||
console.log("🧹 컴포넌트 레지스트리 초기화 완료");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -35,7 +35,6 @@ class LegacyComponentRegistry {
|
||||
// 컴포넌트 렌더러 등록
|
||||
register(componentType: string, renderer: ComponentRenderer) {
|
||||
this.renderers.set(componentType, renderer);
|
||||
console.log(`🔧 레거시 컴포넌트 렌더러 등록: ${componentType}`);
|
||||
}
|
||||
|
||||
// 컴포넌트 렌더러 조회
|
||||
@@ -51,11 +50,6 @@ class LegacyComponentRegistry {
|
||||
// 컴포넌트 타입이 등록되어 있는지 확인
|
||||
has(componentType: string): boolean {
|
||||
const result = this.renderers.has(componentType);
|
||||
console.log(`🔍 LegacyComponentRegistry.has("${componentType}"):`, {
|
||||
result,
|
||||
availableKeys: Array.from(this.renderers.keys()),
|
||||
mapSize: this.renderers.size,
|
||||
});
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -94,17 +88,6 @@ export const DynamicComponentRenderer: React.FC<DynamicComponentRendererProps> =
|
||||
// 컴포넌트 타입 추출 - 새 시스템에서는 componentType 속성 사용, 레거시는 type 사용
|
||||
const componentType = (component as any).componentType || component.type;
|
||||
|
||||
console.log("🔍 컴포넌트 타입 추출:", {
|
||||
componentId: component.id,
|
||||
componentConfigType: component.componentConfig?.type,
|
||||
componentType: component.type,
|
||||
componentTypeProp: (component as any).componentType,
|
||||
finalComponentType: componentType,
|
||||
componentConfig: component.componentConfig,
|
||||
propsScreenId: props.screenId,
|
||||
propsTableName: props.tableName,
|
||||
});
|
||||
|
||||
// 레이아웃 컴포넌트 처리
|
||||
if (componentType === "layout") {
|
||||
return (
|
||||
@@ -123,52 +106,16 @@ export const DynamicComponentRenderer: React.FC<DynamicComponentRendererProps> =
|
||||
);
|
||||
}
|
||||
|
||||
console.log("🎯 DynamicComponentRenderer:", {
|
||||
componentId: component.id,
|
||||
componentType,
|
||||
componentConfig: component.componentConfig,
|
||||
newSystemRegistered: ComponentRegistry.getAllComponents().map((c) => c.id),
|
||||
legacySystemRegistered: legacyComponentRegistry.getRegisteredTypes(),
|
||||
hasLegacyRenderer: legacyComponentRegistry.has(componentType),
|
||||
actualLegacyRenderer: legacyComponentRegistry.get(componentType),
|
||||
legacyMapSize: legacyComponentRegistry.getRegisteredTypes().length,
|
||||
});
|
||||
|
||||
// 1. 새 컴포넌트 시스템에서 먼저 조회
|
||||
const newComponent = ComponentRegistry.getComponent(componentType);
|
||||
console.log("🔍 새 컴포넌트 시스템 조회:", {
|
||||
componentType,
|
||||
found: !!newComponent,
|
||||
component: newComponent,
|
||||
registeredTypes: ComponentRegistry.getAllComponents().map((c) => c.id),
|
||||
});
|
||||
|
||||
if (newComponent) {
|
||||
console.log("✨ 새 컴포넌트 시스템에서 발견:", componentType);
|
||||
|
||||
// 새 컴포넌트 시스템으로 렌더링
|
||||
try {
|
||||
const NewComponentRenderer = newComponent.component;
|
||||
if (NewComponentRenderer) {
|
||||
console.log("🔧 컴포넌트 렌더링 props:", {
|
||||
componentType,
|
||||
componentId: component.id,
|
||||
screenId: props.screenId,
|
||||
tableName: props.tableName,
|
||||
onRefresh: !!props.onRefresh,
|
||||
onClose: !!props.onClose,
|
||||
});
|
||||
// React 전용 props 필터링
|
||||
const {
|
||||
isInteractive,
|
||||
formData,
|
||||
onFormDataChange,
|
||||
selectedScreen,
|
||||
onZoneComponentDrop,
|
||||
onZoneClick,
|
||||
componentConfig,
|
||||
...safeProps
|
||||
} = props;
|
||||
const { isInteractive, formData, onFormDataChange, ...safeProps } = props;
|
||||
|
||||
return (
|
||||
<NewComponentRenderer
|
||||
|
||||
@@ -27,7 +27,6 @@ export class WebTypeRegistry {
|
||||
data: definition,
|
||||
timestamp: new Date(),
|
||||
});
|
||||
console.log(`✅ 웹타입 등록: ${definition.id} (${definition.name})`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -42,7 +41,6 @@ export class WebTypeRegistry {
|
||||
data: definition,
|
||||
timestamp: new Date(),
|
||||
});
|
||||
console.log(`❌ 웹타입 등록 해제: ${id}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,7 +127,6 @@ export class WebTypeRegistry {
|
||||
data: definition,
|
||||
timestamp: new Date(),
|
||||
});
|
||||
console.log(`✅ 버튼 액션 등록: ${definition.id} (${definition.name})`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,7 +141,6 @@ export class WebTypeRegistry {
|
||||
data: definition,
|
||||
timestamp: new Date(),
|
||||
});
|
||||
console.log(`❌ 버튼 액션 등록 해제: ${id}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,7 +242,6 @@ export class WebTypeRegistry {
|
||||
this.webTypes.clear();
|
||||
this.buttonActions.clear();
|
||||
this.eventListeners.length = 0;
|
||||
console.log("🧹 레지스트리 초기화됨");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -279,5 +274,3 @@ export class WebTypeRegistry {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -386,8 +386,6 @@ export function initializeWebTypeRegistry() {
|
||||
},
|
||||
isActive: true,
|
||||
});
|
||||
|
||||
console.log("웹타입 레지스트리 초기화 완료:", WebTypeRegistry.getAllWebTypes().length, "개 웹타입 등록됨");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,8 +44,6 @@ export class SessionManager {
|
||||
this.checkTimer = setInterval(() => {
|
||||
this.checkSession();
|
||||
}, this.config.checkInterval);
|
||||
|
||||
console.log("세션 모니터링 시작됨");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -63,7 +61,6 @@ export class SessionManager {
|
||||
}
|
||||
|
||||
this.removeActivityListeners();
|
||||
console.log("세션 모니터링 중지됨");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -119,7 +116,6 @@ export class SessionManager {
|
||||
* 세션 만료 처리
|
||||
*/
|
||||
private handleSessionExpiry() {
|
||||
console.log("세션이 만료되었습니다");
|
||||
this.stop();
|
||||
this.callbacks.onExpiry?.();
|
||||
}
|
||||
@@ -244,7 +240,6 @@ export const tokenSync = {
|
||||
// 토큰 상태 확인
|
||||
checkToken: () => {
|
||||
const token = localStorage.getItem("authToken");
|
||||
console.log("🔍 토큰 상태 확인:", token ? "존재" : "없음");
|
||||
return !!token;
|
||||
},
|
||||
|
||||
@@ -254,7 +249,6 @@ export const tokenSync = {
|
||||
if (token) {
|
||||
// sessionStorage에도 복사
|
||||
sessionStorage.setItem("authToken", token);
|
||||
console.log("🔄 토큰 강제 동기화 완료");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -265,7 +259,6 @@ export const tokenSync = {
|
||||
const sessionToken = sessionStorage.getItem("authToken");
|
||||
if (sessionToken) {
|
||||
localStorage.setItem("authToken", sessionToken);
|
||||
console.log("🔄 sessionStorage에서 토큰 복원 완료");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -286,14 +279,11 @@ export const tokenSync = {
|
||||
|
||||
// 만료 시간 확인
|
||||
if (payload.exp && payload.exp < now) {
|
||||
console.log("❌ 토큰 만료됨");
|
||||
return false;
|
||||
}
|
||||
|
||||
console.log("✅ 토큰 유효성 검증 통과");
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.log("❌ 토큰 유효성 검증 실패:", error);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user