diff --git a/docs/project_spec.md b/docs/project_spec.md index 1f2f0e1..f92d2f5 100644 --- a/docs/project_spec.md +++ b/docs/project_spec.md @@ -472,21 +472,58 @@ class AutoUpdater: --- -### 10.6 업데이트 설치流程 +### 10.6 아키텍처: updater.exe 분리 ⭐ 중요 +**구조**: ``` -temp 폴더에 다운로드 -├── 예: temp/voc_monitor_3.1.0.exe -├── 배치 파일 생성 (업데이트 스크립트) -│ @echo off -│ timeout /t 2 /nobreak > nul -│ xcopy /y "voc_monitor_3.1.0.exe" "원본 폴더/" -│ start "" "voc_monitor.exe" -│ del "voc_monitor_3.1.0.exe" -│ del "%~f0" -└── 배치 파일 실행 후 현재 프로세스 종료 +메인 프로젝트 (cx_freeze 패킹) +├── updater.exe (별도 패킹, 최소 GUI 포함) +├── app/ +│ └── updater/ +│ ├── __init__.py +│ ├── __version__.py # 버전 정보 +│ ├── update_manager.py # 메인 프로그램용 업데이트 관리자 +│ ├── updater_gui.py # updater.exe용 GUI +│ └── updatelog.md # 업데이트 로그 +└── ... ``` +**실행 흐름**: +``` +1. update_manager.py (메인 프로그램 내): + ├── Supabase에서 새 버전 확인 + ├── 업데이트 config.json 생성 (%TEMP%/voc_updater_config.json) + │ { + │ "download_url": "https://supabase.../voc_noti_3.2.0.zip", + │ "target_path": "C:/Program Files/voc_noti", + │ "version": "3.2.0", + │ "restart_exe": "voc_noti.exe" + │ } + ├── updater.exe를 %TEMP%로 복사 + └── updater.exe 실행 후 메인 프로그램 종료 + +2. updater.exe (별도 프로세스): + ├── config.json 읽기 + ├── zip 다운로드 (진행률 표시 - CustomTkinter GUI) + ├── 압축 해제 → 파일 교체 + └── 메인 프로그램 재실행 +``` + +**updater.exe UI**: +- CustomTkinter 기반 최소 GUI 창 +- 다운로드 진행률 표시 (Progress Bar) +- 상태 메시지 표시 (다운로드 중, 압축 해제 중, 완료) +- 성공/실패 결과 표시 + +**파일 교체 방식**: +- **전체 교체**: zip 다운로드 후 압축 해제 +- 백업 폴더 생성 (이전 버전 보존) +- 실패 시 롤백 가능 + +**통신 방식**: +- 임시 JSON 파일 (`%TEMP%/voc_updater_config.json`) +- 메인 프로그램이 파일 생성 → updater.exe가 읽기 + --- ### 10.7 예외 케이스 처리 @@ -545,10 +582,9 @@ updater = AutoUpdater( - [ ] 통계 대시보드 - [ ] 엑셀 내보내기 - [ ] 자동 응답 템플릿 -- [ ] 자동 업데이트 시스템 --- 작성자: KH.Choi 최종 수정: 2026-02-18 -버전: 3.1 \ No newline at end of file +버전: 3.2 \ No newline at end of file