[SwiftBeam #13] "여러 장의 사진도 한 번에" - 멀티 파일 전송을 위한 큐(Queue) 시스템 설계

2026. 6. 25. 20:44AI Product Building/SwiftBeam

반응형

 

 
SwiftBeam Series #13

"수백 장의 사진도
막힘없이 쏜다"

지능형 멀티 파일 전송 큐 시스템

📁 📁 📁 🚀

파일 전송 앱을 사용할 때 우리는 단순히 파일 한 개만 보내지 않습니다. 지난 주말에 찍은 200여 장의 여행 사진, 혹은 수십 개의 문서가 담긴 프로젝트 폴더 전체를 한꺼번에 옮기고 싶어 하죠. 하지만 네트워크의 파이프라인은 한정되어 있습니다. 수백 개의 파일을 무작정 한꺼번에 쏟아부으면 시스템은 과부하에 걸리고 전송 속도는 오히려 떨어집니다. SwiftBeam이 이 거대한 데이터 뭉치를 어떻게 질서 정연하게 처리하는지, '큐(Queue) 시스템'의 설계 원리를 공개합니다.

1. "한 번에 하나씩? 아니면 한꺼번에?"

멀티 파일 전송을 구현할 때 개발자는 큰 선택의 기로에 섭니다. 100개의 파일을 100개의 소켓 연결로 동시에 보낼 것인가(병렬), 아니면 하나의 통로로 순서대로 보낼 것인가(직렬)입니다.

이론적으로는 병렬 전송이 빨라 보일 수 있지만, 실제 모바일 환경에서는 치명적인 단점이 있습니다. 수많은 소켓을 동시에 열면 기기의 배터리 소모가 급증하고, 공유기(라우터)가 이를 공격으로 간주하여 연결을 차단하기도 합니다. 무엇보다 대용량 파일 여러 개가 동시에 메모리를 점유하면 앱이 불안정해지죠.

SwiftBeam은 '직렬 전송 기반의 지능형 큐' 방식을 선택했습니다. 하나의 단단한 TCP 연결을 유지하면서, 큐에 쌓인 파일들을 순차적으로 처리하는 방식입니다. 이는 안정성을 극대화하면서도, 오버헤드를 줄여 결과적으로 전체 전송 시간을 단축시키는 가장 합리적인 선택이었습니다.

2. SwiftBeam 전송 큐의 3가지 상태 관리

효율적인 큐 관리를 위해 각 파일은 Pending(대기), Processing(전송 중), Completed(완료)라는 세 가지 상태를 가집니다.

  • Pending: 전송을 기다리는 파일들입니다. 사용자가 전송 도중 새로운 파일을 추가해도 이 대기열의 끝에 부드럽게 추가됩니다.
  • Processing: 현재 전송 엔진이 붙잡고 있는 파일입니다. 11편에서 다룬 스트림 전송 기법이 이 단계에서 활약합니다.
  • Completed: 전송이 끝난 파일입니다. 성공 여부와 함께 전송에 소요된 시간 등을 기록하여 나중에 '전송 히스토리'에서 보여줍니다.

이 모든 상태 변화는 Flutter의 ChangeNotifierStateProvider를 통해 UI에 즉각 반영됩니다. 사용자는 목록에서 파일들이 하나씩 체크 표시로 바뀌는 것을 보며 안심하고 기다릴 수 있습니다.

3. 폴더 구조라는 복잡한 미로 풀기

단순히 파일 목록을 보내는 것보다 어려운 것이 '폴더 구조'를 유지하는 것입니다. A/B/c.jpg라는 파일을 보냈다면, 수신 기기에서도 똑같이 A 폴더 안에 B 폴더가 생성되고 그 안에 파일이 들어가야 하죠.

SwiftBeam은 전송 시작 전 '메타데이터 동기화' 과정을 거칩니다. 전체 폴더 트리를 가벼운 JSON 형태로 먼저 전달하고, 수신 측은 파일이 도착하기 전에 미리 필요한 폴더 경로를 생성해 둡니다. 덕분에 사용자는 수백 개의 파일이 원래 있던 모습 그대로 상대방의 기기에 완벽하게 복제되는 경험을 하게 됩니다.

4. "하나가 실패해도 나머지는 가야 합니다"

100개를 보내는 중 50번째 파일에서 오류가 났다고 해서 전체 전송을 멈추는 것은 비효율적입니다. SwiftBeam의 큐 엔진은 '개별 예외 처리' 로직을 가지고 있습니다.

전송 중 특정 파일에서 에러가 발생하면, 해당 파일은 '실패' 상태로 기록하고 즉시 다음 대기 파일로 넘어갑니다. 모든 과정이 끝난 후 사용자에게 "100개 중 98개 성공, 2개 실패"라는 리포트를 보여주고, 실패한 파일만 골라서 다시 보낼 수 있는 옵션을 제공합니다.

5. 전송 엔진의 완성과 새로운 시작

이제 SwiftBeam의 전송 심장부는 완벽해졌습니다. 기기를 찾고, 암호화하고, 대용량 파일을 큐 시스템을 통해 안정적으로 실어 보낼 수 있게 되었죠. 전송 엔진 개발은 여기서 일단락됩니다.

하지만 지금까지의 논의는 주로 '안드로이드'와 'iOS'라는 모바일 환경에 치중되어 있었습니다. SwiftBeam의 진정한 위력은 데스크탑에서도 에어드랍 같은 편리함을 주는 데 있습니다. 다음 편부터는 본격적인 멀티 플랫폼 확장의 시작, '윈도우 데스크탑 환경에서의 네이티브 연동'에 대해 알아보겠습니다.

다음 편 예고: [SwiftBeam #14] "윈도우 데스크탑의 감성" - Win32 API와 트레이 아이콘 구현하기

수백 개의 데이터를 질서 정연하게 다루는 큐 시스템 기술은
Team M2Y가 만드는 모든 고성능 앱의 기반이 됩니다.
저희의 다른 혁신적인 앱들도 지금 확인해 보세요!

Team M2Y 앱 포트폴리오 살펴보기 →
TAGS: 멀티파일전송, 큐시스템, Queue, 데이터관리, Flutter, 플러터, 앱개발, SwiftBeam, 상태관리, 폴더전송, 기술블로그, 개발일지

 

반응형