Vibe Share는 처음부터 큰 플랫폼을 목표로 한 서비스가 아니었습니다. 출발점은 PC와 휴대폰 사이에서 파일 하나를 옮기려 할 때 매번 케이블, 메신저, 이메일, 클라우드를 돌아가야 하는 불편이었습니다. 특히 PC에는 카메라가 없을 수 있다는 조건이 중요했습니다. 그래서 QR은 휴대폰이 PC 화면을 한 번 스캔하는 용도로만 쓰고, 이후 같은 세션에서 양방향 전송이 가능해야 했습니다.
ChatGPT와 Codex를 도구로 쓴 방식
제작 과정에서는 ChatGPT와 Codex를 설계 검토, 코드 작성 보조, 오류 원인 정리 도구로 사용했습니다. 그렇지만 Vibe Share는 OpenAI의 공식 서비스, 후원 서비스, 제휴 서비스가 아닙니다. OpenAI나 ChatGPT가 이 서비스를 승인했다는 의미도 아닙니다.
도구가 만든 초안을 그대로 믿기보다 실제 실행, 빌드, 스모크 테스트, 공개 URL 확인으로 고쳤습니다. 예를 들어 QR에 어떤 주소가 들어가야 하는지, 휴대폰에서 localhost가 왜 실패하는지, R2 업로드 후 ETag를 어떻게 확인해야 하는지는 코드와 운영 확인을 반복하며 정리했습니다.
실제로 막혔던 문제
- QR 라우팅: 모바일 웹이
/j/123456경로로 들어왔을 때 오래된 세션 저장값을 무시하고 현재 코드로 연결해야 했습니다. - Safari 다운로드: iPhone에서 다운로드가 조용히 끝나는 것처럼 보일 수 있어 Safari 다운로드 또는 파일 앱 Downloads 위치 안내를 앱 문구와 가이드에 넣었습니다.
- R2와 CORS: 공개 운영은 Cloudflare R2를 S3 호환 스토리지로 쓰며, 서명 URL과 ETag 노출, 버킷 엔드포인트 형식이 맞아야 업로드가 이어집니다.
- DB 저장 순서: 세션, 페어링, 디바이스 trust, 전송 상태가 따로 기록되므로 수락/거절과 다운로드 완료 시점의 상태 업데이트 순서가 중요했습니다.
- 배포 분리: 공식 사이트는
getvibeshare.com, 실제 웹앱은app.getvibeshare.com, API는api.getvibeshare.com으로 나누어 사용자가 API 주소를 직접 입력하지 않게 했습니다.
배운 점
가장 중요한 결정은 PC에 카메라를 요구하지 않는 것이었습니다. QR은 PC가 스캔하는 것이 아니라 휴대폰이 스캔하는 정보이므로, 데스크톱 PC에서도 첫 연결을 만들 수 있습니다.
두 번째는 과장하지 않는 것입니다. Vibe Share는 HTTPS, 세션, 수락/거절, 임시 저장 정리를 제공하지만 모든 브라우저, 모든 네트워크, 모든 파일 형식에서 완벽하다고 말하지 않습니다. 전송 중 페이지를 닫으면 끊길 수 있고, 모바일 백그라운드 전송은 제한을 받을 수 있습니다.