임베디드 관련 카테고리/Qt
Qt Creator를 활용한 자동 업데이트 설정: 구조와 계획
CBJH
2024. 11. 7. 16:37
728x90
반응형
목표: Qt Creator로 개발한 응용프로그램을 최신 버전으로 자동 업데이트하는 기능을 구축하는 것. 이 과정에서 현재 응용프로그램 경로에 새로운 버전을 설치하고, 불필요한 파일을 삭제하여 최신 상태를 유지하도록 합니다.
이 글은 "앞으로 이런 구조와 설정으로 자동 업데이트 기능을 개발할 예정"이라는 큰 그림을 설명하는 글입니다. 코드는 포함하지 않고, 업데이트 과정에 필요한 파일 구조, 설정 사항, 그리고 두 개의 런처를 사용하는 이유를 정리해보았습니다.
1. 자동 업데이트를 위한 기본 파일 구조
자동 업데이트 기능을 구현하기 위해, 프로젝트 폴더에 몇 가지 중요한 디렉터리와 파일을 배치해야 합니다. 파일 구조는 다음과 같습니다.
프로젝트 폴더/
├── main_app/ # 메인 응용프로그램 폴더
│ └── RockPaperScissors.exe # 실제 실행되는 응용프로그램
├── updater/ # 업데이트를 위한 첫 번째 런처 파일
│ └── UpdaterLauncher.exe # 업데이트 확인 및 다운로드 실행 파일
├── installer/ # 새로운 버전을 설치할 인스톨러 파일 위치
│ └── RockPaperScissorsOnlineInstaller.exe
├── token.txt # 인증 토큰 파일 (필요 시)
└── version.json # 현재 버전 정보가 기록된 파일
- version.json 관련 참고 링크 : https://cbjh-4.tistory.com/260
2. 주요 폴더와 파일 설명
- main_app 폴더: 실제 응용프로그램이 실행되는 위치입니다. RockPaperScissors.exe가 여기 배치되어 있으며, 이 파일을 사용자가 직접 실행하게 됩니다.
- updater 폴더: 자동 업데이트 시스템에서 첫 번째로 실행될 UpdaterLauncher.exe가 위치하는 폴더입니다. 이 프로그램이 최신 버전을 확인하고 다운로드하는 역할을 합니다.
- installer 폴더: 새로운 버전의 인스톨러 파일이 다운로드되어 배치되는 폴더입니다. RockPaperScissorsOnlineInstaller.exe가 여기에 위치하게 됩니다.
- token.txt: 인증이 필요한 경우 사용하는 토큰 파일입니다. 버전 정보를 서버로 업로드하거나 다운로드할 때 필요할 수 있습니다.
- version.json: 현재 설치된 버전 정보를 기록하는 파일입니다. UpdaterLauncher.exe가 이 파일을 참조하여 서버의 최신 버전과 비교합니다.
3. 업데이트 과정의 흐름
- 사용자가 응용프로그램을 실행:
- 사용자는 main_app/RockPaperScissors.exe를 실행합니다. 이 프로그램은 업데이트 확인을 위해 updater/UpdaterLauncher.exe를 호출합니다.
- 첫 번째 런처: UpdaterLauncher.exe의 역할:
- UpdaterLauncher.exe는 서버로부터 최신 버전 정보를 확인하고, 현재 버전과 비교합니다.
- 만약 새로운 버전이 존재할 경우, installer 폴더에 RockPaperScissorsOnlineInstaller.exe를 다운로드합니다.
- 다운로드가 완료되면, UpdaterLauncher.exe는 스스로 종료됩니다.
- 두 번째 단계: RockPaperScissorsOnlineInstaller.exe 실행:
- UpdaterLauncher.exe가 다운로드한 RockPaperScissorsOnlineInstaller.exe가 실행되어 현재 경로에 최신 버전을 설치합니다.
- 설치 전에 updater와 installer 디렉터리를 제외한 모든 파일을 삭제하여, 불필요한 파일이 남지 않도록 합니다.
- 설치가 완료되면, RockPaperScissorsOnlineInstaller.exe는 자동으로 종료됩니다.
4. 두 개의 런처가 필요한 이유
자동 업데이트를 구현할 때, **두 개의 런처(UpdaterLauncher.exe와 RockPaperScissorsOnlineInstaller.exe)**를 사용하는 이유는 다음과 같습니다:
- 다운로드와 설치의 분리: UpdaterLauncher.exe는 최신 버전을 확인하고 다운로드하는 역할만 수행합니다. 이렇게 하면 설치 파일이 완전히 다운로드되기 전까지 메인 프로그램의 설치 경로를 건드리지 않으므로, 다운로드 도중 예기치 않은 충돌이나 파일 손상이 발생할 가능성을 줄일 수 있습니다.
- 안전한 파일 정리: RockPaperScissorsOnlineInstaller.exe는 실제 설치를 진행하며, 기존 파일을 정리하고 새 파일을 덮어씁니다. UpdaterLauncher.exe가 종료된 이후에 설치가 진행되므로, 설치 과정에서 기존 업데이트 파일과의 충돌을 방지할 수 있습니다.
- 프로그램 안정성 보장: 두 개의 런처를 사용하면 메인 프로그램(RockPaperScissors.exe) 실행 중 업데이트 작업이 진행되더라도, 메인 프로그램이 안정적으로 동작할 수 있도록 분리된 작업 처리가 가능합니다.
5. Qt Creator에서 필요한 설정
Qt Creator에서 자동 업데이트 기능을 설정하기 위해 다음과 같은 사항을 준비합니다:
- 빌드 경로 설정: updater 폴더와 installer 폴더가 프로그램 실행 경로에 정확히 배치되도록 빌드 및 배포 설정을 조정합니다.
- 네트워크 접근 설정: UpdaterLauncher.exe가 서버로부터 최신 버전 정보를 가져올 수 있도록 QNetworkAccessManager와 같은 네트워크 모듈을 설정합니다.
- 버전 관리 파일 작성: version.json 파일에 현재 버전 정보를 기록하고, 서버에서 이를 읽어 최신 버전과 비교할 수 있도록 JSON 포맷으로 작성합니다.
6. 향후 개발 계획
- UpdaterLauncher의 기능 확장: 업데이트 확인과 다운로드뿐만 아니라, 다운로드 속도 표시 및 예상 완료 시간을 추가하여 사용자에게 친숙한 UI를 제공할 예정입니다.
- 서버와의 상호작용 강화: 토큰을 통한 인증, JSON 형식의 버전 정보 처리 등 서버와의 원활한 통신을 위해 안정적인 네트워크 모듈을 구성할 계획입니다.
- 예외 처리 추가: 네트워크 오류나 설치 중단 등 다양한 상황을 고려하여 예외 처리를 강화할 것입니다. 다운로드 실패 시 재시도 기능과, 설치 중 오류 발생 시 롤백 기능을 추가하여 사용자 경험을 개선할 계획입니다.