## 📝 한줄 요약
업무노트북과 집 PC 사이에서 파일을 옮길 때마다 SCP 명령어와 긴 경로를 다시 확인하는 일이 번거로웠습니다. AI와 함께 로컬·원격 폴더를 나란히 보고 파일을 보내고 받을 수 있는 Windows 데스크톱 앱을 만들었고, 실제 설치 프로그램까지 완성했습니다.
**바쁘시면 이것만 읽어도 돼요:**
- Hermes Agent와 OMX/Codex를 활용해 SCP 명령어를 2단 탐색기형 앱으로 바꿨습니다.
- 설명이나 화면 목업에서 끝내지 않고 테스트, 실제 화면 검증, Windows 설치 파일 생성까지 진행했습니다.
- 비밀번호와 개인키 내용을 저장하지 않고, 전송 직전에 원본·도착지·충돌 정책을 확인하도록 만들었습니다.
- 자동화부터 시작하지 않고 수동 SSH·SCP 연결과 파일 전송을 먼저 검증한 것이 가장 효과적이었습니다.
- 다음 단계는 SCP가 설정되지 않은 PC도 OpenSSH와 공개키 등록을 순서대로 안내하는 연결 마법사입니다.
## 🎯 이런 분들께 도움돼요
- 개발자는 아니지만 여러 PC 사이에서 업무파일을 자주 옮기는 분
- Tailscale이나 원격 PC는 쓰고 있지만 터미널 명령어가 부담스러운 분
- AI에게 아이디어나 설명만 받는 데서 벗어나 실제 실행 프로그램까지 만들고 싶은 분
## 😫 문제 상황
업무노트북에서 받은 파일을 집 PC의 작업 폴더로 옮길 일이 자주 있습니다. SCP를 이용하면 안전하게 보낼 수 있지만 매번 사용자명, IP, 긴 폴더 경로를 확인해야 했습니다. 경로에 공백이나 한글이 들어가면 따옴표도 신경 써야 했고, 지금 입력한 명령이 업무노트북에서 실행되는지 집 PC에서 실행되는지도 헷갈렸습니다.
한두 번이면 터미널 명령어를 다시 찾아 입력할 수 있습니다. 그런데 같은 작업이 반복되니 생각이 바뀌었습니다. 명령어를 더 잘 외우는 것보다, 눈으로 양쪽 폴더를 보고 버튼으로 옮기는 편이 낫겠다고 판단했습니다.
제가 AI에게 처음 요청한 내용은 이랬습니다.
```text
업무노트북과 집 PC를 Tailscale과 Windows OpenSSH/SCP로 연결하고,
반복되는 파일 운반을 한 번의 클릭에 가깝게 처리할 수 있는
Windows 데스크톱형 SCP Route Manager를 만들고 싶다.
```
## 🛠️ 사용한 도구
- Hermes Agent: 요구사항 정리, 파일·프로세스 실행, 테스트, 화면 검증, 패키징
- OMX/Codex: Electron 앱의 초기 구조와 기능 구현
- 병렬 리뷰 에이전트: 보안 취약점과 기능 누락 검토
- Electron: Windows 데스크톱 앱
- Windows OpenSSH와 Tailscale: 두 PC 사이의 안전한 연결
## 🔧 작업 과정
### 먼저 수동 연결부터 확인했습니다
처음부터 자동화를 만들지는 않았습니다. 업무노트북에서 집 PC로 SSH 접속이 되는지, 작은 테스트 파일을 보냈다가 다시 가져올 수 있는지부터 확인했습니다.
이 순서가 중요했습니다. 앱부터 만들었다면 문제가 생겼을 때 네트워크 문제인지, SSH 설정 문제인지, 앱 문제인지 구분하기 어려웠을 겁니다. 수동 전송이 먼저 성공했기 때문에 이후 오류는 앱 안에서 찾을 수 있었습니다.
제가 이번 작업에서 가장 추천하고 싶은 방식도 이것입니다.
```text
처음부터 자동화를 요청하지 말고,
수동 연결과 파일 전송을 한 번 검증한 뒤 앱으로 확장해줘.
```
### 명령어 대신 2단 탐색기를 요청했습니다
제가 가장 원했던 화면은 복잡하지 않았습니다. 왼쪽에는 업무노트북 폴더, 오른쪽에는 집 PC 폴더가 보이고, 파일을 선택한 뒤 보내기 또는 받기를 누르는 방식이었습니다.
[이미지 1: 로컬·원격 2단 파일 탐색기 화면]
현재 앱에서는 다음 기능을 사용할 수 있습니다.
- PC별 Tailscale IP, SSH 사용자, 포트, 키 경로, 기본 폴더 저장
- 로컬과 원격 폴더 탐색
- 파일과 폴더 보내기·받기
- 전송 대기·진행·성공·실패·취소 상태 확인
- 같은 이름이 있을 때 버전 파일명 생성, 건너뛰기, 승인 후 덮어쓰기
- 파일 크기와 선택적 SHA-256 검증
- 폴더의 파일 개수와 전체 용량 검증
- 반복 업로드 경로 저장과 수동 실행
이제는 긴 SCP 명령어를 다시 입력하는 대신 양쪽 폴더를 보고 파일을 선택할 수 있습니다. 제가 가장 크게 체감한 변화입니다.
### OMX가 바로 끝나지는 않았습니다
과정이 순탄하지만은 않았습니다. OMX의 계획·구현 모드가 오래 실행된 채 결과가 바로 보이지 않는 일이 여러 번 있었습니다. 같은 명령을 무작정 기다리는 대신 실행 방식을 바꾸고, 생성된 파일이 있는지 확인하고, 중간 산출물부터 직접 테스트했습니다.
```text
OMX 실행이 오래 멈추거나 결과가 보이지 않으면,
현재 생성된 파일과 프로세스 상태를 먼저 확인하고 다른 실행 방식으로 이어가줘.
```
결국 프로젝트 구조와 기본 기능이 만들어졌고, 그 뒤부터는 생성된 코드를 버리지 않고 검토·수정·검증하는 방식으로 완성했습니다. AI 도구가 멈춘 것처럼 보일 때도 결과물이 일부 남아 있을 수 있다는 걸 배웠습니다.
### “테스트 통과”만으로는 부족했습니다
초기 자동 테스트는 통과했지만 실제 앱 화면을 캡처해보니 오류가 보였습니다. 사용자 폴더 안의 끊어진 링크 하나 때문에 로컬 탐색기 전체가 실패했고, 앱은 이 오류를 OpenSSH 미설치로 잘못 안내했습니다.
또 다른 화면에서는 PC에 설치된 OpenSSH 9.5를 “업데이트 필요”로 표시했습니다. Windows의 버전 문자열 형식을 파서가 제대로 읽지 못한 것이 원인이었습니다.
[이미지 2: OpenSSH 사전 점검 통과 화면]
두 문제 모두 실제 화면에 표시된 문구를 읽었기 때문에 발견했습니다. 테스트 코드가 통과하더라도 사용자가 보는 값이 맞는지는 별도로 확인해야 했습니다.
### 보안 검토에서 앱 구조를 다시 손봤습니다
파일 전송 앱은 편리함보다 안전이 먼저였습니다. 병렬 리뷰 에이전트에게 전송 승인, 명령어 실행, 비밀번호 저장, 개인키 노출, 덮어쓰기 위험을 따로 검토시켰습니다.
리뷰 과정에서 화면 쪽 코드가 임의로 승인값을 보내면 전송을 요청할 수 있다는 지적이 나왔습니다. 그래서 전송 승인을 앱 화면 내부가 아니라 Electron의 main process가 띄우는 Windows 확인창으로 옮겼습니다. 사용자는 전송 직전에 방향, 원본 전체 경로, 도착 전체 경로, 충돌 정책을 다시 확인해야 합니다.
앱에는 비밀번호 입력란이 없습니다. 개인키는 내용이 아니라 파일 경로의 존재만 확인합니다. 기존 파일 덮어쓰기는 별도 승인을 요구하고, 전송 성공을 확인하기 전에는 원본을 삭제하지 않습니다.
이 부분은 처음부터 요구사항에 금지사항을 적어둔 덕분에 방향을 잃지 않았습니다.
```text
비밀번호와 개인키 내용은 저장하지 말고,
기존 파일을 자동으로 덮어쓰지 말고,
전송 전 원본과 도착지를 보여주고 승인받게 해줘.
```
### 설명이 아니라 Windows 설치 파일이 나왔습니다
가장 “오!” 했던 순간은 AI가 기능 설명이나 코드 조각에서 멈추지 않고 실제 Windows 설치 파일을 만들었을 때였습니다.
[이미지 3: 첫 실행 3단계 안내 화면]
최종 확인 결과는 다음과 같습니다.
- 자동 테스트 18개 통과, 실패 0
- 개발용 Electron 앱 스모크 테스트 통과
- 패키징된 Windows 실행 파일 스모크 테스트 통과
- 1440×900 첫 실행·탐색기·사전 점검 화면 검증
- Windows NSIS 설치 프로그램 생성 성공
다만 공인 코드서명 인증서는 적용하지 않았기 때문에 다른 PC에서 실행하면 Windows SmartScreen 안내가 나올 수 있습니다. 실제 원격 PC에 파일을 쓰는 최종 양방향 시험도 별도 승인이 없는 상태에서는 실행하지 않았습니다. 자동화 도구일수록 “할 수 있다”와 “승인받고 했다”를 구분해야 한다고 생각합니다.
## ✅ 결과
### Before vs After
| 항목 | Before | After |
|---|---|---|
| 파일 전송 | SCP 명령어와 긴 경로를 매번 확인 | 양쪽 탐색기에서 파일 선택 후 보내기·받기 |
| 연결 정보 | IP, 사용자명, 포트, 경로를 따로 기억 | PC별 장치 프로필로 관리 |
| 중복 파일 | 명령 실행 전 직접 확인 | 버전명 생성·건너뛰기·승인 후 덮어쓰기 |
| 검증 | 전송 명령이 끝났는지만 확인 | 파일 크기·SHA-256 또는 폴더 개수·용량 확인 |
| 오류 대응 | 터미널 오류를 직접 해석 | 실패 원인과 다음 점검 행동 표시 |
| 새 PC 준비 | 설정 절차를 다시 검색 | 현재는 사전 점검, 다음 버전은 연결 마법사로 확장 예정 |
### 결과물
- Windows 설치 프로그램
- 첫 실행 설정 안내
- 로컬·원격 2단 파일 탐색기
- 장치 관리 화면
- 전송 대기열
- 반복 업로드 경로
- 비밀정보를 제거한 감사 로그
## 💬 이 과정에서 배운 AI 활용 팁
### 효과적이었던 것
1. 수동으로 한 번 성공시킨 뒤 자동화를 요청하기
- 네트워크·계정·권한 문제와 앱 문제를 분리할 수 있었습니다.
2. 기능과 함께 금지사항을 먼저 전달하기
- 비밀번호 저장 금지, 개인키 비노출, 자동 덮어쓰기 금지, 실제 전송 전 승인처럼 지켜야 할 경계를 구체적으로 적었습니다.
3. 테스트 결과와 실제 화면을 함께 확인하기
- 코드 테스트가 놓친 링크 오류와 OpenSSH 버전 표시 오류를 화면에서 발견했습니다.
4. 구현 에이전트와 리뷰 에이전트를 분리하기
- 만든 에이전트가 놓친 승인 우회와 입력 검증 문제를 별도 리뷰에서 찾았습니다.
### 이렇게 하면 안 돼요
1. SSH 연결도 안 된 상태에서 전체 자동화부터 만들기
2. 비밀번호를 설정 파일이나 AI 대화에 남기기
3. 테스트가 통과했다는 말만 듣고 실제 화면과 설치 파일을 확인하지 않기
4. AI가 멈춘 것처럼 보인다고 생성된 중간 산출물을 바로 버리기
## 🌍 다른 업무에 적용한다면?
이 구조는 SCP에만 한정되지 않습니다. 회사 PC와 개인 PC, 현장 노트북과 사무실 PC, 영상 편집 PC와 저장용 PC처럼 두 장치 사이에서 파일을 반복 이동하는 업무에 적용할 수 있습니다.
사람이 그때그때 파일을 찾아 편집한다면 네트워크 공유폴더가 편할 수 있습니다. 반면 정해진 입력 폴더로 보내고, 성공 여부를 확인하고, 중복이나 실패를 관리해야 한다면 이번처럼 승인 기반 전송 대시보드가 더 잘 맞습니다.
## 🚀 앞으로의 계획
다음 버전에서는 SCP가 전혀 설정되지 않은 컴퓨터도 연결할 수 있도록 “새 PC 연결 마법사”를 추가하려고 합니다.
마법사는 다음 순서로 동작하게 만들 계획입니다.
- 이 PC가 보내는 PC인지 받는 PC인지 선택
- Tailscale 설치와 연결 상태 확인
- Windows OpenSSH Client·Server 확인
- 기존 SSH 키 확인 또는 승인 후 새 키 생성
- 공개키 등록 위치와 권한 안내
- 사용자가 직접 처리해야 하는 UAC·최초 비밀번호·호스트 키 확인 구분
- 비밀번호 없는 연결 검사
- 승인 후 작은 테스트 파일 왕복 검증
목표는 모든 보안 단계를 무인으로 없애는 것이 아닙니다. 사람이 승인해야 하는 단계는 분명하게 남겨두고, 나머지를 “검사 → 설명 → 승인 → 실행 → 확인” 순서로 안내하는 것입니다.
## 📋 재사용 가능한 프롬프트
### 두 PC 사이의 파일 전송 앱 기획
> Windows PC 두 대 사이에서 반복적으로 파일을 옮기고 있습니다. 먼저 Tailscale과 OpenSSH/SCP를 이용한 수동 연결·업로드·다운로드를 작은 테스트 파일로 검증해주세요. 수동 검증이 끝난 뒤에만 로컬·원격 2단 탐색기, 장치 프로필, 전송 대기열, 충돌 처리, 크기·SHA-256 검증을 제공하는 데스크톱 앱으로 확장해주세요. 비밀번호와 개인키 내용은 저장하거나 출력하지 말고, 실제 전송 전에는 방향·원본·도착지·덮어쓰기 정책을 사용자에게 보여주고 승인받아야 합니다.
### 새 PC 연결 마법사 기획
> SCP가 설정되지 않은 Windows PC를 친절하게 연결하는 설정 마법사를 설계해주세요. 보내는 PC와 받는 PC의 역할을 구분하고, Tailscale 상태, OpenSSH Client·Server, SSH 키 존재 여부, 공개키 등록 위치, 서비스와 권한을 순서대로 점검해주세요. UAC, 최초 계정 비밀번호, 호스트 키 신뢰처럼 사용자가 직접 승인해야 하는 단계는 자동화하지 말고 정확한 이유와 다음 행동을 보여주세요. 비밀번호 저장·자동 입력, 개인키 전송, 기존 키 덮어쓰기는 금지합니다.
한국어 텍스트가 있는 검은 화면