@@ -537,7 +558,9 @@ export function BasicSettingsPage() {
{verifyingTarget === 'encryption'
? "※ 경고: 암호화 키 변경은 시스템 내 모든 민감 데이터를 다시 암호화하는 중대한 작업입니다. 성공 시 기존 데이터를 새 키로 대체하며, 실패 시 데이터 유실의 위험이 있습니다."
- : "※ 경고: 인프라 설정은 데이터베이스 물리 접속 정보를 직접 수정하는 매우 위험한 작업입니다. 잘못된 입력은 시스템 중단으로 이어질 수 있습니다."}
+ : verifyingTarget === 'repository'
+ ? "※ 주의: 시스템 업데이트 저장소 정보 노출은 원본 소스 코드 유출로 이어질 수 있습니다."
+ : "※ 경고: 인프라 설정은 데이터베이스 물리 접속 정보를 직접 수정하는 매우 위험한 작업입니다. 잘못된 입력은 시스템 중단으로 이어질 수 있습니다."}
diff --git a/src/platform/pages/VersionPage.tsx b/src/platform/pages/VersionPage.tsx
index efb89ed..d41bf83 100644
--- a/src/platform/pages/VersionPage.tsx
+++ b/src/platform/pages/VersionPage.tsx
@@ -12,10 +12,20 @@ interface VersionInfo {
timestamp: string;
}
+interface UpdateEntry {
+ version: string;
+ date: string;
+ title: string;
+ changes: string[];
+ type: 'feature' | 'fix' | 'urgent' | 'patch';
+}
+
interface RemoteVersion {
current: string;
latest: string | null;
needsUpdate: boolean;
+ latestInfo: UpdateEntry | null;
+ history: UpdateEntry[];
error?: string;
}
@@ -60,7 +70,10 @@ export function VersionPage() {
const handleUpdate = async () => {
if (!remoteInfo?.latest) return;
- if (!confirm(`시스템을 ${remoteInfo.latest} 버전으로 업데이트하시겠습니까?\n업데이트 중에는 시스템이 일시적으로 중단될 수 있습니다.`)) {
+ const info = remoteInfo.latestInfo;
+ const changelog = info ? `\n\n[주요 변경 내역]\n${info.changes.map(c => `- ${c}`).join('\n')}` : '';
+
+ if (!confirm(`시스템을 v${info?.version || remoteInfo.latest} 버전으로 업데이트하시겠습니까?${changelog}\n\n업데이트 중에는 시스템이 일시적으로 중단될 수 있습니다.`)) {
return;
}
@@ -97,7 +110,7 @@ export function VersionPage() {
};
// Client/Frontend version fixed at build time
- const frontendVersion = '0.3.2';
+ const frontendVersion = '0.3.3';
const buildDate = '2026-01-24';
// Check if update is needed based on frontend version vs remote tag
@@ -123,24 +136,49 @@ export function VersionPage() {
{/* Update Alert Banner - Based on Frontend Version comparison */}
{needsUpdate && !updateResult && (
-
-
-
-
-
-
-
새로운 시스템 업데이트가 가능합니다!
-
현재 플랫폼 버전: v{frontendVersion} → 최신 배포 버전: {remoteInfo?.latest}
+
+
+
+
+
+
+
+
+
+ {remoteInfo?.latestInfo?.type === 'urgent' ? '🚨 긴급 보안/시스템 업데이트 발견' : '✨ 새로운 업데이트가 가능합니다'}
+
+
+ {remoteInfo?.latestInfo?.type || 'patch'}
+
+
+
+ 현재 버전: v{frontendVersion} → 최신 버전: {remoteInfo?.latest}
+
)}
@@ -248,106 +286,37 @@ export function VersionPage() {
- {[
- {
- version: '0.3.2',
- date: '2026-01-24',
- title: '일반 사용자(User) 권한 가시성 패치',
- changes: [
- '일반 사용자 계정 접속 시 사이드바 메뉴가 보이지 않던 권한 필터 오류 수정',
- '자산 관리 상세 정보에서 일반 사용자의 수정/삭제 버튼 노출 제한 (View-only)',
- 'CCTV 모듈 내 일반 사용자의 제어 권한 제한 재검토'
- ],
- type: 'fix'
- },
- {
- version: '0.3.1',
- date: '2026-01-24',
- title: '업데이트 가용성 및 캐시 정책 강화',
- changes: [
- '서버 사이드 No-Cache 헤더 적용으로 업데이트 후 강제 새로고침 현상 해결',
- 'Vite 빌드 아티팩트 서빙 안정화 패치'
- ],
- type: 'fix'
- },
- {
- version: '0.3.0',
- date: '2026-01-24',
- title: '시스템 업데이트 엔진 호환성 및 UI 개선',
- changes: [
- 'Windows 환경(CMD)에서도 자동 업데이트가 작동하도록 쉘 호환성 패치',
- '업데이트 성공 시 5초 카운트다운 후 자동 페이지 새로고침 기능 추가',
- 'Gitea 설정 시 브라우저 계정 자동 완성(Auto-fill) 방지 로직 적용'
- ],
- type: 'fix'
- },
- {
- version: '0.2.8',
- date: '2026-01-24',
- title: 'CCTV 모듈 관리 권한 강화',
- changes: [
- 'Supervisor 계정도 CCTV 추가, 설정, 삭제가 가능하도록 권한 확장',
- '카메라 드래그 앤 드롭 순서 변경 권한 보완'
- ],
- type: 'fix'
- },
- {
- version: '0.2.7',
- date: '2026-01-24',
- title: '시스템 환경 정보 시각화 및 캐싱 보정',
- changes: [
- '백엔드 서비스 엔진 카드에 실제 런타임(Node.js) 및 OS 정보 표시',
- '버전 정보 조회 시 브라우저 API 캐싱 보정 로직 적용',
- '플랫폼 업데이트 판단 기준을 프론트엔드 빌드 버전으로 일원화'
- ],
- type: 'feature'
- },
- {
- version: '0.2.6',
- date: '2026-01-24',
- title: '시스템 자동 업데이트 엔진 도입 (Hotfix)',
- changes: [
- 'Git Tag 기반 시스템 자동 업데이트 관리 모듈 신규 도입',
- '최고관리자 전용 업데이트 실행 UI 구축'
- ],
- type: 'fix'
- },
- {
- version: '0.2.1',
- date: '2026-01-22',
- title: 'IMS 서비스 코어 성능 최적화',
- changes: [
- 'API 서버 헬스체크 및 실시간 상태 모니터링 연동',
- '보안 세션 타임아웃 유동적 처리 미들웨어 도입',
- '자산 관리 모듈 초기 베타 릴리즈'
- ],
- type: 'fix'
- }
- ].map((entry, idx) => (
-
-