본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

클라우드 파일을 실수로 내려받지 마

~11 min · cloud-placeholders, no-accidental-download, visible-consequence

Level 0Finder 에서 헤매는 중
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"iCloud 폴더의 그 4 GB 영상이 이 Mac 에선 0 바이트일 수도 있어. 잘못 건드리면 방금 그걸 다 내려받은 거고, 디스크까지 채웠을지 몰라."

사실 거기 없는 파일

요즘 macOS 엔 이름만 있는 파일이 많아. 폴더에 보이고 이름과 크기도 뜨는데, 실제 내용은 서버에 있고 이 기계엔 안 내려와 있는 파일 말이야. iCloud Drive 의 저장 공간 최적화, Dropbox 의 온라인 전용 파일, 그 밖의 file provider 들이 다 그래. 이름과 속성으로는 진짜 파일이고, 내용은 누가 달라고 하면 그때 OS 가 가져다주겠다는 약속이야.

실수로 내려받는 순간

함정이 여기 있어. Waygate 가 미리보기 그림을 만들려고 폴더를 훑으면서 그런 파일의 내용을 읽거나, 여러 개를 복사하다가 열면, OS 는 그 요청을 채우려고 파일을 통째로 내려받아. 그런 파일이 가득한 폴더에서 그러면 조용히 몇십 기가가 딸려와. 정리하려던 디스크를 채우고, 종량제 회선이면 요금까지 나가지. 사용자는 폴더를 보자고 했지 밀린 클라우드 파일을 다 받자고 한 게 아닌데.

결과가 눈에 보여야 해

그래서 Waygate 는 클라우드 파일을 실수로 내려받지 않아. 폴더를 훑을 땐 내려받기를 부르지 않는 속성만 읽고, 아직 안 받은 파일의 미리보기는 억지로 받아오는 대신 '아직 안 받음' 으로 보여줘. 작업이 정말로 내용이 필요할 때 — 그 파일을 어딘가로 진짜 복사하는 중일 때 — 는 내려받게 된다는 걸 먼저 알려. 결과가 뜻밖에 벌어지는 게 아니라 네가 고른 게 되도록. 몇십 기가짜리 뜻밖이라면 더더욱.

클라우드 파일은 미리보기나 폴더 훑기 때문에 조용히 내려받히지 않아. 진짜로 내려받아야 하는 작업이면 그 사실을 먼저 보여줘. Waygate 는 내용을 안 당기고 속성만 읽고, 작업이 정말 필요할 때만 눈에 보이게 받아. 실수로는 안 받아.
속성은 공짜, 내용은 아니야. 핵심은 이거야. 아직 안 받은 파일도 이름·크기·날짜·종류는 내려받기 없이 알 수 있어. 그래서 폴더를 정직하게 보여줄 수 있는 거고. 내려받기를 부르는 건 내용을 읽을 때야. 폴더를 훑는 길은 전부 속성만 만지게 설계하고, 내용 읽기는 받아야 한다는 걸 이미 보여준 작업에만 남겨둬.

Code

내려받지 않고 상태만 확인하기·swift
func classifyForDisplay(_ url: URL) throws -> RowState {
    let vals = try url.resourceValues(forKeys: [
        .isUbiquitousItemKey,
        .ubiquitousItemDownloadingStatusKey,   // .notDownloaded / .downloaded / .current
        .fileSizeKey                            // METADATA -- safe, no download
    ])
    if vals.isUbiquitousItem == true,
       vals.ubiquitousItemDownloadingStatus == .notDownloaded {
        return .placeholder(size: vals.fileSize)   // show it as online-only
    }
    return .local(size: vals.fileSize)
}
// Reading .fileSize / dates / type does NOT materialize the file.
// Reading its CONTENTS would. Display paths must stay on the metadata side.

External links

Exercise

온라인 전용 4K 영상 200개가 든 iCloud 폴더가 있어. 하나에 4 GB 쯤이고. 어떤 파일 관리자가 스크롤할 때마다 파일 내용을 읽어 미리보기를 만든다면, 폴더를 한 번 훑는 동안 디스크에 뭐가 벌어질지 계산해봐. 그다음 폴더를 둘러보는 것만으로는 아무것도 안 받고, 네가 직접 뭔가 할 때만 받도록 미리보기 경로를 다시 설계해봐.
Hint
200개를 각 4 GB 씩 읽어 그림을 만들면 스크롤만으로 800 GB 를 받으려 들어. 디스크도 회선도 남아나지 않지. 고치는 법은 속성으로 '아직 안 받음' 을 알아내서 구름 표시가 붙은 자리 표시 그림을 그리는 거야. 내려받기는 사용자가 특정 파일을 열거나 복사할 때, 받게 된다는 걸 보고 나서만 일어나.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.