회사에서나 집에서나 하루종일 모니터를 보며 일하다 보니, 날씨 정보를 쉽게 확인할 수 있으면 좋겠다는 생각이 들었습니다. 물론 스마트폰으로 확인할 수도 있지만, 업무 중에 자주 확인하기엔 번거롭죠. 그래서 간단한 윈도우용 날씨 위젯을 만들어보기로 했습니다.
Python으로 윈도우용 날씨 위젯 만들기
왜 PySide6로 선택했나요?
윈도우용 애플리케이션을 개발하려면 다양한 기술 스택을 고려해야 합니다. Microsoft의 .NET과 WPF를 사용하거나, 웹 기술 기반의 Electron을 선택할 수도 있고, Python의 GUI 프레임워크인 Tkinter, PyQt, PySide 등을 활용할 수도 있죠. 검토 끝에 저는 PySide6를 선택했는데, 오픈소스이면서도 상용 라이선스 비용이 없고 Python의 풍부한 라이브러리를 활용할 수 있기 때문입니다.
- 오픈소스: LGPL 라이선스로 제공되어 상업적 이용에도 제약이 없습니다.
- Python 생태계: pip로 쉽게 설치할 수 있고, 풍부한 파이썬 라이브러리를 활용할 수 있습니다.
- Qt 기반: 안정적이고 성숙한 GUI 프레임워크인 Qt를 사용할 수 있습니다.
- 크로스 플랫폼: 향후 macOS나 Linux 버전 개발도 가능합니다.
프로젝트를 시작하면서 가장 중요한 것은 안정적인 날씨 데이터를 제공받는 것이었습니다. 여러 날씨 API 서비스를 검토한 결과, 무료로도 충분한 기능을 제공하고 개발자 친화적인 문서를 제공하는 OpenWeatherMap API를 선택했습니다. 이 글에서는 API 연동부터 시작해서 위젯 개발, 그리고 최종적으로 실행 파일로 패키징하는 과정까지 전체적인 개발 과정을 상세히 다루려고 합니다.
- PySide6로 투명한 위젯 만들기
- OpenWeatherMap API 연동
- 환경 변수로 API 키 관리
- PyInstaller로 실행 파일 만들기
프로젝트의 전체 소스 코드는 제가 운영하는 GitHub 저장소에서 확인할 수 있습니다. 핵심적인 구현 사항들을 하나씩 자세히 살펴보도록 하겠습니다.
프로젝트 파일 구조
프로젝트의 구조는 매우 단순합니다. 최상위 디렉토리 아래에 모든 필요한 파일들이 위치해 있습니다:
- `main.py`: 날씨 위젯의 모든 코드가 담긴 메인 프로그램 파일
- `.env`: OpenWeatherMap API 키를 저장하는 환경 변수 파일
- `install.bat`: Python 가상환경 생성과 필요한 패키지를 설치하는 스크립트
- `run.bat`: 위젯을 실행하는 스크립트
- `build.bat`: PyInstaller를 사용해 실행 파일을 생성하는 스크립트
- `requirements.txt`: 프로젝트에 필요한 파이썬 패키지 목록
간단한 위젯 프로그램이므로 복잡한 디렉토리 구조 대신, 모든 것을 한 곳에서 관리하는 방식을 선택했습니다. 이 프로젝트에 사용된 핵심 기술들을 살펴보면:
- Python 3.12: 안정성과 성능이 개선된 최신 버전의 파이썬을 사용했습니다. 특히 타입 힌트 지원이 강화되어 코드의 안정성을 높일 수 있었습니다.
- PySide6: Qt 기반의 강력한 GUI 프레임워크입니다. 특히 투명한 위젯을 만들고 항상 화면 위에 표시하는 기능을 구현하는 데 유용했습니다.
- OpenWeatherMap API: 실시간 날씨 데이터를 제공하는 API 서비스입니다. 무료 계정으로도 분당 60회의 API 호출이 가능해 5분마다 날씨를 업데이트하는 데 충분했습니다.
- python-dotenv: API 키와 같은 민감한 정보를 환경 변수로 관리하게 해주는 라이브러리입니다. 소스 코드에 직접 API 키를 노출시키지 않을 수 있습니다.
- PyInstaller: 파이썬 프로그램을 독립 실행 파일로 패키징해주는 도구입니다. 사용자가 파이썬을 설치하지 않아도 프로그램을 실행할 수 있게 해줍니다.
주의할 점은, OpenWeatherMap API 키는 반드시 안전하게 보관해야 하며, 실행 파일 배포 시 API 키가 노출되지 않도록 주의해야 합니다.
OpenWeatherMap API 키 설정하기
날씨 위젯을 실행하기 위해서는 가장 먼저 OpenWeatherMap에서 API 키를 발급받아야 합니다. OpenWeatherMap은 전 세계의 실시간 날씨 정보를 제공하는 서비스로, 개발자들이 쉽게 날씨 데이터를 활용할 수 있게 해줍니다.
가입 과정은 매우 간단합니다. OpenWeatherMap 웹사이트를 방문하여 계정을 만들고, 이메일 인증을 완료하면 됩니다. 계정 생성이 완료되면 자동으로 API 키가 발급되는데, 'My API keys' 메뉴에서 확인할 수 있습니다. 무료 계정으로도 하루 60회의 API 호출이 가능한데, 우리 위젯은 5분마다 날씨 정보를 갱신하므로 충분한 횟수입니다.
발급받은 API 키는 프로젝트의 .env 파일에 저장합니다. 이렇게 환경 변수로 관리하면 코드에 직접 키를 노출하지 않아도 되어 보안상 안전합니다. API 키는 매우 중요한 보안 정보이므로, 절대로 GitHub 같은 공개 저장소에 올리지 않도록 주의해야 합니다.
날씨위젯 실행하기
전체 코드는 제 GitHub 저장소에서 확인할 수 있으며, 주요 구현 내용만 간단히 살펴보도록 하겠습니다. 프로젝트를 실행하기 위해서는 두 개의 배치 파일을 순서대로 실행해야 합니다.
실행 방법
프로젝트를 실행하기 위해서는 두 개의 배치 파일을 순서대로 실행해야 합니다.
1. 개발 환경 설정 (install.bat)
먼저 install.bat
을 실행하여 필요한 환경을 구성합니다. install.bat은 위젯 실행에 필요한 모든 환경을 자동으로 구성해줍니다. 먼저 Python 가상환경을 생성하여 독립적인 개발 환경을 만들고, 여기에 PySide6, requests, python-dotenv와 같은 필수 패키지들을 설치합니다. 그리고 나중에 동일한 환경을 재현할 수 있도록 설치된 패키지 목록을 requirements.txt 파일로 저장하며, OpenWeatherMap API 키를 저장할 .env 파일도 자동으로 생성합니다.
.\install.bat
설치가 완료되면 "Installation complete!" 메시지가 표시됩니다.
2. 위젯 실행 (run.bat)
환경 설정이 완료되었다면 run.bat
을 실행하여 위젯을 시작할 수 있습니다:
.\run.bat
run.bat은 위젯을 실행하기 위한 모든 과정을 자동화합니다. Python 가상환경을 활성화하고 main.py를 실행하며, 프로그램이 종료될 때 가상환경도 자동으로 비활성화됩니다.
주의할 점은 반드시 install.bat을 먼저 실행하여 환경 설정을 완료한 후, run.bat을 실행해야 한다는 것입니다. 또한 .env 파일에 유효한 API 키가 설정되어 있어야 날씨 정보를 정상적으로 불러올 수 있습니다.
- 오른쪽 상단의 종료 버튼을 통해 프로그램을 종료할 수 있습니다
- 위젯은 드래그하여 원하는 위치로 이동할 수 있습니다
- 5분마다 자동으로 날씨 정보가 업데이트됩니다
- 반투명한 검은색 배경으로 화면을 가리지 않으면서도 날씨 정보를 잘 볼 수 있습니다
특히 위젯이 화면 위에 항상 떠있으면서도 방해되지 않게 구현한 것이 핵심 포인트입니다. 자세한 구현 방법은 소스 코드의 주석을 참고해 주세요.