me

[python/development] project xelloss m2 개발

project xelloss m2 란?

project xelloss m2

project xelloss m2 는 약 4년 전 인수·인계 받았던 업무 관련 검수 프로그램을 새로 리뉴얼한 버전이다. 기존 3.5버전의 파이참 지원 중지에 따라 3.12로 업그레이드시키면서 신규 기능 추가 및 국가별 멀티 태스킹 검수가 되도록 기능을 개선하였다. 그리고 개인적 대망의 EXE 배포인데도 자동 업데이트할 수 있게 되었다!

프로젝트 기간: 2024.11.27 ~ 2025.03.27


기본 환경 세팅

검수 툴 기반이라 폴더와 파일에 직접적 개입이 있어서 응용프로그램 형식으로 제작 진행

파이썬 tkinter 기반으로 진행하다가… 보더에 라운드 안 되는 거에 충격받고.. customtkinter 로 바꿈.

기존 ver1에서는 pyqt5였는데 pyuic5 form.ui -o form.py 해주는게 귀찮아서 흐흐..

기본 설치

D:\Python\python311\python.exe -m venv vMobis   # 가상환경 설치
D:\Develop\D_mobis\vMobis\Scripts\activate      # 가상환경 활성화

추가 설치

pip install customtkinter
pip install pillow requests
pip install pyinstaller==6.11.1
pip install pandas
pip install openpyxl
pip install beautifulsoup4
pip install addict            # Python 객체를 딕셔너리처럼 다룰 수 있게 해주는 라이브러리
pip install netifaces         # 네트워크 인터페이스 및 IP 정보를 확인할 수 있는 라이브러리
pip install lxml              # xml 처리
pip install pefile
pip install python-dateutil
pip install psutil            # 강제 종료 관련 프로세스 관리오 모니터링

pip install auto-py-to-exe


모아서:
pip install -r requirements.txt

project xelloss m2 개발 내용

A. 검사 전:

최근 경로 기능

탭 헤더 아이콘 결과에 따라 변경

하단에 오류 메시지 제공

자동 업데이트

B. 폴더 선택 단계:  

[기본검사] 템플릿, 지역 향, 언어 수 및 값 체크

IP 체크 – 보안실 분리

단일 언어 / 지역향 언어 모두 되게 처리(지역향은 폴더 명 상관 없이)

C. 검사 시작 후 – 멀티쓰레드 / 언어별

[Tab1/DB생성] search_db 파일로 저장

[Tab1/기본검사] 필수 파일 검사 + HTML 파일 전부 있는지 검사

[Tab1/챕터 아이콘] 챕터 이미지 실제 있는지 검사

[Tab1/C_Option] 개수 카운트

[Tab2] C 링크 검사 – 링크 체커 (c_crossreference, c_url 검사)

[Tab3] 이미지 파일 검사 – src 검사. 이미지 파일 실제 있는지 검사. GIF 파일 실제 있는지 검사.

[Tab4] Heading1 검사 – h1이 존재하는지. 텍스트가 있는지 검사.

[Tab5] 파일명 검사 – 파일명은 영문 소문자(단, HTML파일명과 폰트명은 영문 대문자 허용)
허용 확장자(‘.html’, ‘.css’, ‘.js’, ‘.gif’, ‘.png’, ‘.svg’, ‘.jpg’, ‘.ico’, ‘.ttf’, ‘.otf’, ‘.eot’, ‘.woff’, ‘.woff2‘) 외의 파일은 오류로 검사.


project xelloss m2 개선점

검사 속도 개선

내용 부분 클릭 시 텍스트 복사(기존 더블 클릭에서 변경)

폴더 명을 지역 향으로 하지 않아도 검사 되도록 기능 개선

최신 검사 경로 기록 삭제 기능 추가

하단 진행 및 오류 메시지 추가

HTML 파일 누락 검사 개선

챕터 아이콘 및 GIF 파일이 실제 있는지 확인 기능 추가

더블 클릭 시 해당 텍스트 복사되도록 변경

상호 참조 키 없음 오류 메시지 쪽 개선

자동 업데이트


최적화

UPX 설치

UPX (Ultimate Packer for eXecutables)는 실행 파일 (EXE) 및 동적 링크 라이브러리 (DLL) 파일을 압축하여 파일 크기를 줄이는 도구로 공식 홈페이지 :https://github.com/upx/upx/releases upx-5.0.0-win64.zip 받아서 설치~

upx 설치

환경 변수 – path에서 내가 방금 받은 upx 폴더 넣어주기

환경변수

그리고 확인하면 잘 설치 되어 있다.

upx --version

그런데 가상 환경에서 안 돼서 추가로 시스템 환경 변수에도 추가~

환경변수 추가
가상환겨에서 사용

이제 가상 환경에서도 사용 가능~!

스펙 파일에도 추가

def compress_with_upx():
    upx_exe = "D:\\Python\\upx-5.0.0-win64\\upx.exe"

    # EXE 압축
    exe_path = os.path.join(dist_folder, "Xelloss_MOBIS.exe")
    subprocess.run([upx_exe, '--best', '--lzma', '--force', exe_path])

    # DLL 압축
    dll_folder = os.path.join(dist_folder, "_internal")
    subprocess.run([upx_exe, '--best', '--lzma', '--force', f"{dll_folder}\\*.dll", '--exclude=api-ms-*', '--exclude=python*.dll'])

compress_with_upx()

project xelloss m2 프로젝트에서 가장 어려웠던 점

아무래도 배포형 파이썬 응용프로그램의 자동 업데이트가 가장 어려웠다.

응용프로그램이다보니 EXE로 나가게 되는데 자동 업데이트를 하게 되면 이리저리 꼬인달까?

일단 총 5가지 방법으로 테스트 진행되었다.

타입1. 포터블 – pyinstaller + .bat 사용 업데이트 : 실패 (파이썬 파일이 아닌 파일들 자동 설치 오류 ex>blue.json 배포 포함은 되나 임시 폴더에 설치가 안 됨 – 파일인스톨러 문제 등)

타입2. 설치형 – NSIS : 실패 (설치는 잘 되나 설치형도 결국 자동 업데이트 처리하려면 포터블과 동일하게 진행 해야 해서 굳이 설치를 쓸 필요가 없었음.)

타입3. 설치형 – Inno Setup : 실패 (설치형 nsis보다 ui 디자인이 좋으나 업데이트에서 위와 동일 문제 발생)

타입4. 포터블 – PyUpdater : 실패 (3.9버전 이하로만 되고 현재 연결된 라이브러리 버전 종료로 직접 파일 수정해도 연결된 코드들이 제대로 동작 안 함)

타입5. 포터블 – auto-py-to-exe + .exe : 자동 업데이트 가능!

결론은 포터블 – auto-py-to-exe + .exe 됨! 이번에 전체 개발 시간 중에 가장 많이 투자된 게 이 자동 업데이트 부분이었다. 흐…


project xelloss m2 결과

문제가 됐던 자동 업데이트도

project xelloss 업데이트

이렇게 가능해짐!

확실히 자동 업데이트가 되니 배포하기 편하고, 사용자들도 일일이 다운 받는 수고가 적어서 좋고 저번이 달라져 놓치는 부분 없어서 좋음!


기타 프로젝트: https://pixiclue.com/tag/project/