# Secure Tools - Fyne 기반 Go GUI 애플리케이션 이 프로젝트는 Go 언어와 [Fyne](https://fyne.io/) GUI 라이브러리를 사용하여 개발된 간단한 보안 유틸리티 도구다. 사용자가 강력한 비밀번호를 생성하고, 다양한 형식으로 텍스트를 인코딩/디코딩할 수 있는 직관적인 인터페이스를 제공한다. ## 주요 기능 ### 1. 강력한 비밀번호 생성 - **길이 지정**: 사용자가 원하는 비밀번호 길이를 직접 입력할 수 있다. (최소 5자, 최대 64자) - **보안 규칙 적용**: 생성되는 모든 비밀번호는 아래 규칙을 따른다. - 최소 1개 이상의 특수문자 (`!@#$%&*`) - 최소 1개 이상의 숫자 - 최소 2개 이상의 대문자 - 첫 글자는 반드시 알파벳으로 시작 - **결과 처리**: - 생성된 비밀번호를 클립보드로 쉽게 복사할 수 있다. - 생성된 비밀번호를 텍스트 파일(`.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`: 이미지 및 텍스트 렌더링 지원 ## 빌드 및 실행 ### 사전 준비 사항 1. **Go 설치**: 시스템에 Go 언어 (버전 1.18 이상 권장)가 설치되어 있어야 한다. 2. **Fyne 시스템 의존성 설치**: Fyne은 GUI 렌더링을 위해 C 컴파일러(GCC) 및 그래픽 라이브러리가 필요하다. 아래 Fyne 공식 문서를 참고하여 운영체제에 맞는 의존성을 설치한다. - [Fyne Installation Guide](https://developer.fyne.io/started/) **Linux (Debian/Ubuntu 기준):** ```bash sudo apt-get install gcc libgl1-mesa-dev xorg-dev ``` **Windows:** - `TDM-GCC` 또는 `MSYS2/MinGW-w64`와 같은 GCC 컴파일러를 설치하고 PATH에 등록해야 한다. 3. **Go 모듈 다운로드**: 프로젝트 루트 디렉토리에서 아래 명령을 실행하여 필요한 패키지를 다운로드한다. ```bash go mod tidy ``` ### 1. 일반 빌드 프로젝트 루트 디렉토리에서 다음 명령을 실행하면 현재 운영체제에 맞는 실행 파일이 생성된다. ```bash go build ``` - Windows: `random.exe` (프로젝트 폴더명에 따라 다를 수 있음) - macOS/Linux: `random` ### 2. 저용량 최적화 빌드 (릴리스용) Go로 빌드된 실행 파일은 디버깅 정보 등을 포함하여 용량이 다소 클 수 있다. 아래 방법으로 파일 크기를 크게 줄일 수 있다. #### 방법 1: Go 빌드 옵션 사용 `ldflags`를 사용하여 디버깅 심볼 정보와 DWARF 정보를 제거한다. 이 방법만으로도 파일 크기를 50% 이상 줄일 수 있다. ```bash go build -ldflags="-s -w" . ``` - `-s`: 디버깅 심볼 테이블 제거 - `-w`: DWARF 디버깅 정보 제거 #### 방법 2: UPX로 실행 파일 압축 (추가 최적화) UPX(Ultimate Packer for eXecutables)는 실행 파일을 압축하는 도구다. 위 `ldflags` 옵션으로 빌드한 파일에 UPX를 적용하면 용량을 극적으로 줄일 수 있다. 1. **UPX 설치** - [UPX 공식 홈페이지](https://upx.github.io/)에서 다운로드하거나, 패키지 매니저로 설치한다. - 예: `sudo apt-get install upx-ucl` (Ubuntu), `brew install upx` (macOS) 2. **빌드 및 압축 실행** - 먼저 `ldflags` 옵션으로 빌드한다. ```bash go build -ldflags="-s -w" -o secure-tools . ``` - 생성된 실행 파일(`secure-tools`)에 UPX를 적용한다. ```bash upx secure-tools ``` 이 두 가지 방법을 함께 사용하면 원본 빌드 파일 대비 70-80% 이상 용량을 절감하여 배포하기 좋은 저용량 실행 파일을 만들 수 있다. ## 코드 구조 및 특징 - **단일 파일 구조**: 모든 로직이 `random.go` 파일 하나에 포함되어 있어 코드를 이해하기 쉽다. - **UI 헬퍼 함수**: `createEntryWithBackground`와 같은 함수를 통해 반복적인 UI 컴포넌트 생성을 표준화하고 코드 중복을 줄였다. - **모달 팝업 구현**: 파일 저장 기능은 Fyne의 `app.NewWindow()`를 사용하여 모달(modal) 형태의 팝업 창으로 구현되었다. 이는 사용자 입력을 가이드하고 메인 창과의 상호작용을 일시적으로 차단하는 효과적인 방법이다. - **상태 관리**: `currentPassword`와 같은 전역 변수를 사용하여 UI 컴포넌트 간의 상태를 간단하게 공유한다.