Files
passgen/README.md
2025-09-15 13:51:43 +09:00

108 lines
5.4 KiB
Markdown

# 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 컴포넌트 간의 상태를 간단하게 공유한다.