2026. 6. 29. 20:50ㆍAI Product Building/SwiftBeam
"설치조차 귀찮을 때"
웹(Web)의 한계와 도전
브라우저라는 좁은 문을 통과하는 방법
"앱 설치 안 하고 그냥 브라우저에서 바로 보낼 수는 없나요?" SwiftBeam을 개발하며 가장 많이 들었던 질문 중 하나입니다. 앱스토어에 들어가서 앱을 검색하고 설치하는 과정조차 사치로 느껴질 때가 있죠. 특히 일회성 전송을 원하는 유저에게 '웹(Web)'은 최고의 접근성을 제공합니다. 하지만 파일 전송 앱에게 브라우저는 생각보다 훨씬 더 좁고 험난한 문이었습니다. 오늘은 SwiftBeam이 웹이라는 환경과 싸우며 마주한 한계와 이를 극복하기 위한 시도들을 공유합니다.
1. 브라우저라는 강력한 감옥
웹 브라우저의 최우선 가치는 '보안'입니다. 사용자가 웹사이트를 방문했다는 이유만으로 내 컴퓨터의 파일을 뒤적거리거나 로컬 네트워크를 헤집고 다닌다면 큰일이니까요. 이 보안 철학은 SwiftBeam의 핵심 기능인 '로컬 디스커버리(mDNS/UDP)'를 원천적으로 차단합니다.
웹 환경에서는 로컬 소켓에 직접 접근할 수 없으므로, 주변 기기가 "나 여기 있어!"라고 외쳐도 브라우저는 그 목소리를 들을 수 없습니다. 또한, 브라우저는 메모리 관리와 파일 시스템 접근에도 매우 엄격한 제약을 둡니다. 대용량 파일을 전송하는 데 필요한 '스트림 전송' 역시 브라우저의 종류와 버전마다 지원 여부가 천차만별인 상황이었죠.
2. WebRTC와 PWA: 웹의 한계를 넘는 열쇠
하지만 불가능은 없습니다. SwiftBeam 웹 버전은 두 가지 핵심 기술을 통해 돌파구를 찾았습니다.
- WebRTC (Web Real-Time Communication): 서버 없이 브라우저 간에 직접 데이터를 주고받을 수 있는 기술입니다. 탐색(Discovery) 단계에서는 아주 가벼운 시그널링 서버를 잠시 이용하되, 실제 파일 전송은 P2P로 처리하여 SwiftBeam의 철학인 '빠르고 안전한 전송'을 계승했습니다.
- PWA (Progressive Web App): 웹사이트를 마치 설치된 앱처럼 동작하게 만드는 기술입니다. 오프라인에서도 작동하고, 홈 화면에 아이콘을 추가할 수 있어 설치형 앱과 웹의 경계를 허물어줍니다.
- File System Access API: 최신 브라우저가 지원하는 이 API를 통해 사용자의 명시적인 허락 하에 파일을 직접 읽고 쓰는 기능을 구현했습니다.
3. Flutter Web: 화면 공유의 마법
14편에서 다룬 것처럼, SwiftBeam은 Flutter로 작성되었습니다. Flutter Web 덕분에 모바일과 데스크탑에서 구현한 그 유려한 전송 애니메이션과 복잡한 큐 관리 로직을 웹에서도 거의 그대로 재사용할 수 있었습니다.
비록 저수준의 네트워크 코드(C++ 소켓 등)는 웹용으로 다시 짜야 했지만, 사용자가 마주하는 'UI'와 '비즈니스 로직'은 동일하게 유지되었습니다. 이는 1인 개발자에게 웹 버전 출시라는 큰 산을 넘게 해 준 결정적인 동력이었습니다. "하나의 소스로 모든 곳에"라는 약속이 실현되는 순간이었죠.
4. "웹은 가장 가벼운 보조 도구입니다"
솔직히 말씀드리면, 웹 버전은 네이티브 앱만큼의 성능과 편의성을 100% 제공하지는 못합니다. 대용량 파일을 전송할 때의 안정성이나, 배경 상태에서의 전송 대기 등은 브라우저의 한계로 인해 제약이 많습니다.
그래서 SwiftBeam 웹 버전의 정체성을 '임시 수신 모드'에 맞췄습니다. 파일을 보낼 사람은 앱이 설치된 네이티브 환경(아이폰, 갤럭시, PC)에서 쏘고, 받을 사람만 웹 브라우저를 통해 링크나 QR 코드로 접속하여 즉시 다운로드하는 시나리오입니다. 이는 가장 현실적이면서도 사용자의 페인 포인트(Pain Point)를 정확히 찌르는 전략이었습니다.
5. 경계 없는 연결을 향한 마지막 조각
웹 버전 개발은 기술적으로 가장 고통스러웠지만, 동시에 가장 짜릿한 도전이었습니다. 브라우저라는 가장 대중적인 플랫폼을 포섭함으로써 SwiftBeam은 비로소 "어디서나(Anywhere)"라는 타이틀을 얻을 수 있게 되었습니다.
이제 플랫폼 확장에 대한 이야기는 충분히 나눈 것 같습니다. 하지만 앱의 완성도는 보이지 않는 엔진만큼이나 '보이는 부분'에서도 결정됩니다. 다음 편에서는 전송이라는 지루한 과정을 즐거운 경험으로 바꿔주는 '전송 속도 시각화와 진행률 표시'에 담긴 UX 디테일에 대해 알아보겠습니다.
다음 편 예고: [SwiftBeam #18] "느린 건 못 참아" - 전송 속도 시각화와 진행률 표시의 UX 미학
웹 브라우저의 한계를 넘는 Team M2Y의 기술 도전은
계속됩니다.
설치 없이도 강력한 기능을 제공하는 저희의 다양한 웹 기반 서비스들을 지금 확인해 보세요!
'AI Product Building > SwiftBeam' 카테고리의 다른 글
| [SwiftBeam #19] "전 세계 어디서든 편리하게" - l10n과 arb 파일로 글로벌 서비스 준비 (0) | 2026.07.01 |
|---|---|
| [SwiftBeam #18] "느린 건 못 참아" - 전송 속도 시각화와 진행률 표시의 UX 미학 (1) | 2026.06.30 |
| [SwiftBeam #16] "iOS의 폐쇄성 극복하기" - 샌드박스 안에서 파일 꺼내기 (0) | 2026.06.28 |
| [SwiftBeam #15] "안드로이드의 까다로운 권한" - Scoped Storage와 미디어 접근 완벽 대응 (0) | 2026.06.27 |
| [SwiftBeam #14] "윈도우 데스크탑의 감성" - 윈도우에서도 에어드랍처럼! Win32 API와 트레이 아이콘 구현기 (0) | 2026.06.26 |