5.4 KiB
Secure Tools - Fyne 기반 Go GUI 애플리케이션
이 프로젝트는 Go 언어와 Fyne GUI 라이브러리를 사용하여 개발된 간단한 보안 유틸리티 도구다. 사용자가 강력한 비밀번호를 생성하고, 다양한 형식으로 텍스트를 인코딩/디코딩할 수 있는 직관적인 인터페이스를 제공한다.
주요 기능
1. 강력한 비밀번호 생성
- 길이 지정: 사용자가 원하는 비밀번호 길이를 직접 입력할 수 있다. (최소 5자, 최대 64자)
- 보안 규칙 적용: 생성되는 모든 비밀번호는 아래 규칙을 따른다.
- 최소 1개 이상의 특수문자 (
!@#$%&*) - 최소 1개 이상의 숫자
- 최소 2개 이상의 대문자
- 첫 글자는 반드시 알파벳으로 시작
- 최소 1개 이상의 특수문자 (
- 결과 처리:
- 생성된 비밀번호를 클립보드로 쉽게 복사할 수 있다.
- 생성된 비밀번호를 텍스트 파일(
.txt,.log등)로 저장하는 기능을 제공한다.
2. 다양한 인코딩 / 디코딩
- 지원 형식:
- Base64
- Hex
- URL
- ROT13
- 편의 기능:
- 인코딩 또는 디코딩 작업을 선택할 수 있다.
- 방금 생성한 비밀번호를 인코딩 입력값으로 바로 가져올 수 있다.
- 처리된 결과를 클립보드로 복사할 수 있다.
3. 사용자 경험(UX)
- 어두운 테마(Dark Theme)를 기본으로 적용하여 눈의 피로를 줄였다.
- 하단 알림 메시지를 통해 작업 결과를 사용자에게 명확히 전달한다.
- 파일 저장 시 별도의 팝업 창을 통해 폴더와 파일명을 직관적으로 설정할 수 있다.
- 예기치 않은 오류 발생 시 프로그램이 강제 종료되지 않도록 패닉 복구(Panic Recover) 로직을 포함했다.
사용된 기술 및 라이브러리
- 언어: Go
- GUI 프레임워크:
fyne.io/fyne/v2 - 주요 의존성:
fyne.io/fyne/v2: 핵심 GUI 툴킷github.com/go-gl/glfw: Fyne의 데스크톱 백엔드 (OpenGL 컨텍스트 및 창 관리)golang.org/x/image,golang.org/x/text: 이미지 및 텍스트 렌더링 지원
빌드 및 실행
사전 준비 사항
-
Go 설치: 시스템에 Go 언어 (버전 1.18 이상 권장)가 설치되어 있어야 한다.
-
Fyne 시스템 의존성 설치: Fyne은 GUI 렌더링을 위해 C 컴파일러(GCC) 및 그래픽 라이브러리가 필요하다. 아래 Fyne 공식 문서를 참고하여 운영체제에 맞는 의존성을 설치한다.
Linux (Debian/Ubuntu 기준):
sudo apt-get install gcc libgl1-mesa-dev xorg-devWindows:
TDM-GCC또는MSYS2/MinGW-w64와 같은 GCC 컴파일러를 설치하고 PATH에 등록해야 한다.
-
Go 모듈 다운로드: 프로젝트 루트 디렉토리에서 아래 명령을 실행하여 필요한 패키지를 다운로드한다.
go mod tidy
1. 일반 빌드
프로젝트 루트 디렉토리에서 다음 명령을 실행하면 현재 운영체제에 맞는 실행 파일이 생성된다.
go build
- Windows:
random.exe(프로젝트 폴더명에 따라 다를 수 있음) - macOS/Linux:
random
2. 저용량 최적화 빌드 (릴리스용)
Go로 빌드된 실행 파일은 디버깅 정보 등을 포함하여 용량이 다소 클 수 있다. 아래 방법으로 파일 크기를 크게 줄일 수 있다.
방법 1: Go 빌드 옵션 사용
ldflags를 사용하여 디버깅 심볼 정보와 DWARF 정보를 제거한다. 이 방법만으로도 파일 크기를 50% 이상 줄일 수 있다.
go build -ldflags="-s -w" .
-s: 디버깅 심볼 테이블 제거-w: DWARF 디버깅 정보 제거
방법 2: UPX로 실행 파일 압축 (추가 최적화)
UPX(Ultimate Packer for eXecutables)는 실행 파일을 압축하는 도구다. 위 ldflags 옵션으로 빌드한 파일에 UPX를 적용하면 용량을 극적으로 줄일 수 있다.
-
UPX 설치
- UPX 공식 홈페이지에서 다운로드하거나, 패키지 매니저로 설치한다.
- 예:
sudo apt-get install upx-ucl(Ubuntu),brew install upx(macOS)
-
빌드 및 압축 실행
- 먼저
ldflags옵션으로 빌드한다.go build -ldflags="-s -w" -o secure-tools . - 생성된 실행 파일(
secure-tools)에 UPX를 적용한다.upx secure-tools
- 먼저
이 두 가지 방법을 함께 사용하면 원본 빌드 파일 대비 70-80% 이상 용량을 절감하여 배포하기 좋은 저용량 실행 파일을 만들 수 있다.
코드 구조 및 특징
- 단일 파일 구조: 모든 로직이
random.go파일 하나에 포함되어 있어 코드를 이해하기 쉽다. - UI 헬퍼 함수:
createEntryWithBackground와 같은 함수를 통해 반복적인 UI 컴포넌트 생성을 표준화하고 코드 중복을 줄였다. - 모달 팝업 구현: 파일 저장 기능은 Fyne의
app.NewWindow()를 사용하여 모달(modal) 형태의 팝업 창으로 구현되었다. 이는 사용자 입력을 가이드하고 메인 창과의 상호작용을 일시적으로 차단하는 효과적인 방법이다. - 상태 관리:
currentPassword와 같은 전역 변수를 사용하여 UI 컴포넌트 간의 상태를 간단하게 공유한다.