SFTP 서버에서 파일을 다운로드하는 웹 기반 GUI 애플리케이션입니다. 원격 서버의 디렉토리 구조를 유지하면서 여러 파일을 동시에 다운로드할 수 있습니다.
주요 기능
- 🌐 웹 기반 GUI: 브라우저를 통한 직관적인 사용자 인터페이스
- ⚡ 동시 다운로드: 여러 SFTP 세션을 사용한 병렬 다운로드 지원
- 📁 경로 유지: 원격 서버의 디렉토리 구조를 로컬에 그대로 유지
- 🔄 실시간 진행 상황: 다운로드 진행률을 실시간으로 확인
- ✅ 중복 파일 감지: 동일한 파일의 중복 다운로드 방지
- 📝 파일 목록 관리: 파일 목록을 저장하고 재사용 가능
- ⚙️ 설정 저장: SFTP 연결 정보를 설정 파일에 저장
요구사항
- Go 1.21.6 이상
- Windows, Linux, macOS 지원
설치
소스에서 빌드
- 저장소 클론:
git clone <repository-url> cd SftpDownloader
- 의존성 설치:
- 빌드:
- Windows:
make.bat실행 - Linux/macOS:
make.sh실행
- Windows:
빌드된 실행 파일은 프로젝트 루트 디렉토리에 생성됩니다.
사용 방법
1. 애플리케이션 실행
실행 파일을 실행하면:
- 자동으로 웹 서버가 시작됩니다 (포트 8888)
- 기본 웹 브라우저가 자동으로 열립니다
http://localhost:8888에서 웹 인터페이스에 접근할 수 있습니다
2. SFTP 서버 설정
웹 인터페이스에서 다음 정보를 입력합니다:
- IP Address: SFTP 서버 주소
- Port: SFTP 포트 (기본값: 22)
- ID: SFTP 사용자 ID
- Password: SFTP 비밀번호
- Local Directory: 파일을 다운로드할 로컬 디렉토리 경로
3. 다운로드할 파일 목록 입력
"File List" 텍스트 영역에 다운로드할 원격 파일 경로를 한 줄에 하나씩 입력합니다:
/home/user/documents/file1.txt
/home/user/documents/file2.txt
/home/user/images/photo.jpg
주석은 #으로 시작하는 줄을 사용할 수 있습니다.
4. 다운로드 시작
"Download" 버튼을 클릭하면 다운로드가 시작됩니다. 다운로드 진행 상황은 실시간으로 업데이트됩니다.
설정 파일
default.yaml
SFTP 연결 정보가 저장되는 설정 파일입니다:
sftp.ip: 10.1.14.186 sftp.port: 22 sftp.id: username sftp.password: password local.directory: C:\Users\Username\Downloads sftp.session-count: 10 sftp.over-write: true
설정 항목:
sftp.ip: SFTP 서버 IP 주소sftp.port: SFTP 포트 번호 (기본값: 22)sftp.id: SFTP 사용자 IDsftp.password: SFTP 비밀번호local.directory: 로컬 다운로드 디렉토리sftp.session-count: 동시 다운로드 세션 수 (기본값: 10)sftp.over-write: 기존 파일 덮어쓰기 여부 (true/false)
files.lst
다운로드할 파일 목록이 저장되는 파일입니다. 각 줄에 하나의 원격 파일 경로를 입력합니다.
프로젝트 구조
SftpDownloader/
├── main.go # 메인 진입점 및 HTTP 서버
├── SftpDown.go # SFTP 다운로드 로직
├── SftpSession.go # SFTP 세션 관리
├── DownInfo.go # 다운로드 정보 및 설정 관리
├── FileInfo.go # 파일 정보 구조체
├── DownStat.go # 다운로드 상태 구조체
├── Path.go # 경로 처리 유틸리티
├── html.go # 웹 UI HTML 템플릿
├── Version.go # 버전 정보
├── default.yaml # 기본 설정 파일
├── files.lst # 파일 목록
├── go.mod # Go 모듈 정의
├── go.sum # 의존성 체크섬
├── make.bat # Windows 빌드 스크립트
└── make.sh # Linux/macOS 빌드 스크립트
주요 기능 설명
동시 다운로드
여러 SFTP 세션을 사용하여 파일을 병렬로 다운로드합니다. sftp.session-count 설정으로 동시 세션 수를 조절할 수 있습니다.
경로 유지
원격 파일의 디렉토리 구조를 분석하여 공통 경로를 찾고, 로컬 디렉토리에 상대 경로를 유지하면서 다운로드합니다.
예를 들어:
- 원격 파일:
/home/user/docs/file1.txt,/home/user/docs/file2.txt - 로컬 디렉토리:
C:\Downloads - 다운로드 결과:
C:\Downloads\docs\file1.txt,C:\Downloads\docs\file2.txt
중복 파일 감지
동일한 경로의 파일이 목록에 여러 번 포함된 경우 중복으로 표시하고 다운로드하지 않습니다.
파일 존재 확인
다운로드 전에:
- 원격 서버에서 파일 존재 여부 확인
- 로컬에 이미 동일한 크기의 파일이 있는지 확인
sftp.over-write가false인 경우 기존 파일은 건너뜀
API 엔드포인트
GET /: 메인 설정 페이지POST /download: 다운로드 시작POST /downloading: 다운로드 상태 조회 (JSON)
의존성
github.com/pkg/sftp v1.13.6: SFTP 클라이언트golang.org/x/crypto v0.19.0: SSH 암호화gopkg.in/yaml.v3 v3.0.1: YAML 설정 파일 파싱
빌드 옵션
빌드 시 다음 변수를 설정할 수 있습니다:
VERSION: 애플리케이션 버전BUILDDT: 빌드 날짜/시간
빌드 스크립트는 Git 정보를 자동으로 포함합니다.
문제 해결
연결 실패
- SFTP 서버 주소와 포트가 올바른지 확인
- 방화벽 설정 확인
- 사용자 ID와 비밀번호 확인
파일을 찾을 수 없음
- 원격 파일 경로가 정확한지 확인
- SFTP 서버에서 파일 접근 권한 확인
다운로드 속도가 느림
sftp.session-count값을 증가시켜 동시 세션 수를 늘림- 네트워크 연결 상태 확인
라이선스
이 프로젝트의 라이선스 정보는 저장소를 확인하세요.
기여
버그 리포트나 기능 제안은 이슈로 등록해 주세요.