3P by GN⁺ | ★ favorite | 댓글 1개
  • iCloud Drive의 숨겨진 파일 충돌 때문에 최근 작성한 문단이나 코드 변경분이 사라졌고, 백업이 저장되기 전 손실이 발생함
  • 충돌은 Mac과 iPhone에 같은 파일의 다른 버전이 있다고 판단된 상황이었지만, 문제 파일은 iPhone에서 열린 적이 없었음
  • Dropbox는 충돌 파일을 별도로 남기지만, iCloud Drive는 파일 시스템에 드러내지 않아 충돌 처리 지원 편집기에서만 선택 팝업을 볼 수 있음
  • Textifier, Xcode, Obsidian처럼 충돌 처리가 없는 편집기에서는 iCloud가 저장할 버전을 고르며, 시간이 지나면 올바른 버전이 백업에서 덮어써질 수 있음
  • 중요한 데이터는 iCloud Drive 밖에 두고 핵심 파일은 Git 저장소로 변경을 감시하는 편이 안전하며, iCloud에 남겨야 하는 파일용 Cloud Cub도 개발 중임

iCloud Drive의 숨겨진 파일 충돌

  • 문서 작성 중 방금 입력한 문단이 사라졌고, 앱 개발 중에는 Xcode가 이전까지 문제없던 코드에서 여러 오류를 표시함
    • 여러 파일의 최근 변경 사항이 지워진 상태였음
    • 손실은 Time Machine이나 Backblaze가 저장하기 전에 발생함
  • 원인은 iCloud Drive가 감지한 파일 충돌이었음
    • iCloud Drive는 Mac과 iPhone에 같은 파일의 다른 버전이 있고 자동 병합할 수 없다고 판단함
    • 하지만 영향을 받은 파일은 iPhone에서 열린 적이 없었음
    • Mac의 Documents 폴더를 iCloud로 옮겨둔 상태였기 때문에 해당 파일들이 iCloud에 있었음
  • Dropbox는 버전 충돌이 생기면 “(John Doe’s conflicted copy)”처럼 이름 붙인 충돌 파일을 함께 저장함
  • iCloud Drive는 같은 충돌을 파일 시스템에 표시하지 않음
    • 충돌 처리를 지원하는 편집기에서 파일을 열면 어떤 버전을 유지할지 묻는 팝업이 나타남
    • Textifier, Xcode, Obsidian처럼 충돌 처리가 없는 편집기에서는 iCloud가 디스크와 백업에 저장할 버전을 결정함

복구 조건과 대응 방법

  • 시간이 지나 새 백업이 올바른 버전이 들어 있던 이전 백업을 덮어쓰면 콘텐츠가 영구 손실될 수 있음
  • 복구하려면 충돌 해결을 지원하는 편집기로 해당 파일을 열어야 함
    • 예시로 사용한 편집기는 iA Writer
    • 파일을 iCloud Drive 밖으로 옮긴 뒤에는 이 방법도 도움이 되지 않음
    • 테스트에서는 변경하지 않은 파일을 다시 iCloud로 옮기면 충돌 버전 팝업이 다시 나타났지만, 파일이 편집됐거나 복사본으로 계속 작업한 경우에는 그렇지 않을 수 있음
  • 버전 충돌을 숨기는 방식은 사용자 친화적으로 보일 수 있지만, 중요한 문서를 몇 년 뒤 다시 열 때까지 데이터 손실을 발견하지 못할 수 있음
  • iCloud Drive가 파일 시스템이나 접근하기 쉬운 중앙 위치에 버전 충돌을 노출하기 전까지는 중요한 데이터를 iCloud Drive 밖으로 옮기는 편이 안전함
  • iCloud Drive에 남겨야 하는 파일을 위해 숨겨진 동기화 충돌을 감지하고 해결하는 Cloud Cub을 만들고 있음

댓글과 토론

Hacker News 의견들
  • 비슷한 일을 겪었음: 아내 iPhone의 Notes에서 클라우드 동기화가 켜져 있었고, 필요 없을 것 같아 꺼버렸더니 아내가 “내 노트 다 어디 갔어? 뭘 한 거야?”라고 했음
    식은땀이 났지만, 동기화된 Notes 앱이 있는 iPad가 떠올라 바로 열고 WiFi를 꺼서 노트를 “보존”했음
    Apple에 전화했고, 지원 담당자가 각 노트를 새 폴더로 복사해 붙여넣으면 지워지지 않게 할 수 있다는 방법을 찾아줬음
    몇 시간 동안 꽤 스트레스였고, Apple이 이런 작업의 전체 영향에 대해 경고나 팝업을 더 줬어야 한다고 봄
    덧붙여 Apple 기술지원이 사실상 휴대폰에 “VNC”처럼 접속해 보고 설정을 바꿀 수 있다는 것도 알게 됐음. 권한 요청을 하고 “승인”을 눌렀던 것 같지만, 실제로 보기 전까지는 이런 기능이 있는 줄도 몰랐음

    • 이 문제를 변명하려는 건 아니지만, Apple 담당자가 Notes 동기화 문제를 전화로 도와주고 복구까지 해줬다는 게 놀라움
      게다가 원인이 본인 실수처럼 보였는데도 도와줬음. 회사가 Google 제품에 많은 돈을 내지만, Google은 이런 일을 전화로 도와줄 가능성이 거의 없음
      예전에 접근 제어 같은 건 담당자와 통화한 적이 있지만, Keep 노트가 사라졌을 때 도와달라고 하면 정중하게 꺼지라는 답을 들을 것 같음. 실제로 Keep 노트도 가끔 사라짐
    • 생각하는 그 상황이 맞다면, 그냥 동기화를 다시 켜면 모든 노트가 다시 나타났을 것 같음
    • 기억으로는 동기화를 끌 때 “계속하시겠습니까? 모든 iCloud 노트가 iPhone에서 제거됩니다”라는 질문이 나옴
      아내의 문제는 Apple보다 iOS 기기를 관리한 사람 쪽에 있었던 것 같음
    • Apple 기술지원이 휴대폰에 “VNC”처럼 들어와 내용을 보고 설정을 바꿀 수 있다는 건 잠재적 보안 취약점처럼 보임. 이걸 영구적으로 끄는 방법이 있는지 궁금함
    • 그 “VNC” 기능에 대한 자세한 내용이 궁금함. iPad 전용인지 iOS도 되는지, 승인 요청이 시스템 팝업이었는지, 이름 있는 앱이 열렸는지, 화면에서 실제로 뭘 하는지 보였는지, 어디에 문서화된 적이 있는지 궁금함
  • 정말 백만 번 동의함. 그런데 이건 iCloud만의 문제가 아니라 Apple 소프트웨어 전반의 근본적인 성향처럼 보임
    Books에서 PDF에 형광펜 표시를 할 때도 반복적으로 겪음. 가끔 PDF를 다시 열어보면 최근에 표시한 여러 페이지가 사라져 있음
    작업 중에는 계속 저장되는 것 같지만, 알 수 없는 이유로 11:45 버전이 아니라 11:35 버전을 최신 주 버전으로 판단함
    Apple이 새 내용을 오래된 버전으로 조용히 덮어쓰는 문제는 최소 10년은 계속돼 왔음
    이런 치명적 결함이 애초에 어떻게 시스템에 들어갔고 아직도 고쳐지지 않았는지 이해가 안 됨

    • 소프트웨어에서 가장 어려운 두 가지 문제는 캐시 무효화, 이름 짓기, 하나 차이 오류, 배열 인덱스 강제 부재로 인한 버퍼 오버플로임
    • macOS 기본 소프트웨어로 형광펜이나 주석을 달 때도 여러 이상한 일을 겪었고, Skim이 꽤 훌륭한 대체재였음
      무료이고 BSD 라이선스지만, 다른 앱에서도 변경 사항을 보려면 주석이 들어간 PDF로 내보내야 한다는 점은 기억해야 함
      Apple의 대비를 죽이는 주황빛 배경이나 진짜 노란색 형광펜이 없는 게 지친 사람이라면 써볼 만함. 관련자는 아니고, 존재해서 고마울 뿐임
      https://skim-app.sourceforge.io/
    • 흥미로운 지점임. Apple 컴퓨터를 오가며 써왔고 최근에는 2015년부터 올해 초까지 썼는데, 철학의 문제라는 말에 일리가 있어 보임
      하드웨어 쪽에서도 플로피 디스크, 광학 드라이브, CPU 아키텍처 전체를 세 번이나 꽤 잔인하게 잘라냈던 기억이 있음
      iCloud에서는 그 태도가 파일에도 적용되는 것 같음. 전부 나쁘다고 하진 않겠지만, 나이가 들수록 점점 내 취향과는 멀어짐
    • iCloud 인프라 대부분은 Cassandra 인스턴스 위에 구축돼 있음. 관련 논문이 좋은 게 있는데 지금은 찾지 못하겠음
    • 11:35 버전을 최신으로 판단했다면, 일부 서버의 시계가 틀렸던 걸까?
  • 글쓴이는 git 사용을 제안하지만, git은 iCloud Drive와 잘 맞지 않음
    예전에 iCloud Drive에 수백 개의 git 저장소를 뒀는데, 큰 커밋을 하면 수백 GB짜리 iCloud Drive 전체가 Apple 서버와 다시 동기화되곤 했고 하루가 걸렸음
    Apple 지원을 꽤 높은 단계까지 올려 해결하려 했지만 끝내 해결되지 않았음. 지금은 git 저장소를 iCloud Drive 밖에 둠
    마지막 큰 변경 동기화가 끝나기 전에 수백 개 파일을 빠르게 동시에 바꾸면 이 현상이 촉발되는 것 같음

    • git 같은 버전 관리 시스템과 iCloud, OneDrive, Google Drive 같은 클라우드 드라이브의 클라우드 기반 버전 관리를 섞으면 안 된다는 건 상식에 가깝다고 생각했음
      둘은 잘 맞지 않고, 특히 여러 기기가 같은 클라우드 드라이브에 동기화돼 있으면 온갖 이상하고 예상 못 한 동작이 생길 여지가 있음
    • 원글 작성자임. 공유해줘서 고마움
      문제는 꼭 써야 하는 앱이 다른 동기화 방법을 지원하지 않아서, 중요한 파일 일부는 iCloud Drive를 써야 한다는 것임
      git이 없었다면 어떤 파일이 바뀌었는지도 알아내지 못했을 것임. git이 있어도 전부 잡았다고 확신할 수는 없음. iCloud 동기화 충돌로 git 내용도 바뀔 수 있을 것 같음
    • git은 애초에 큰 바이너리 객체와도 잘 맞지 않음
    • 중요한 iCloud Drive 폴더는 자동 프로세스로 어딘가에 rsync하고, 그쪽에서 Git이나 Dropbox 등으로 자동 버전 관리하는 방식을 주로 씀
      아주 큰 데이터에는 좋지 않겠지만, iCloud Drive에 있으면서 공격적으로 버전 관리하고 싶은 것들은 대부분 텍스트이거나 작아서 두 벌을 두는 부담이 거의 없음
    • 참고로 Dropbox에서도 비슷한 이유로 git이 꽤 기묘하게 실패할 수 있음. 예전에 Dropbox를 git 서버처럼 쓰려고 git-remote-dropbox를 사용했음
      [1] https://github.com/anishathalye/git-remote-dropbox
  • iCloud Drive를 쓰지 말아야 할 더 큰 이유는 종단 간 암호화가 기본이 아니라는 점임
    거기에 저장한 모든 것은 Apple 시스템 관리자, 지원 담당자, 그리고 Apple에 요구할 수 있는 사람들, 예컨대 지금은 영장 없이도 가능한 미국 정부가 읽을 수 있음
    종단 간 암호화가 아닌 서비스는 쓰지 않는 게 좋음
    지금 iCloud에 선택형 종단 간 암호화가 있기는 하지만, 기본값이 꺼져 있고 설정 깊숙이 묻혀 있어서 거의 아무도 쓰지 않음
    나는 Syncthing을 써서 모든 기기에서 파일을 유지함. 종단 간 암호화가 되고 자유 소프트웨어이며, 충돌 처리와 버전 백업도 합리적임
    평문을 절대 보지 못하는 신뢰하지 않는 동기화 전용 기기도 지원해서, VPS나 외부 장소에 노드를 안전하게 둘 수 있음

    • “종단 간 암호화가 아닌 서비스는 쓰지 말라”면서 “iCloud에도 선택형 종단 간 암호화가 있다”고 하는 건 서로 모순임. iCloud도 종단 간 암호화가 됨
      친구나 가족에게 메뉴 두 번 눌러 켜라고 설득하는 건 쉽지만, 여러 기기에 Syncthing을 설치하고 설정하라고 설득하는 건 쉽지 않음
      Syncthing을 옹호하는 건 좋지만, 평균 사용자가 키를 잃으면 모든 데이터를 잃을 수 있는 설정을 기본으로 켜지 않는다고 iCloud Drive가 나쁘다고 하는 건 좀 우스움
      할머니라면 기본으로 더 안전한 것보다, 비밀번호를 잊었을 때 Apple에 전화해서 어린 Johnny 사진을 되찾는 걸 훨씬 더 원할 거라고 장담함
    • 종단 간 암호화에 대한 현실적인 반론도 있음. 대다수 사람은 관리자나 정부에 데이터가 유출되는 것보다, 암호화 키를 잊거나 잃어버려 모든 데이터를 잃을 가능성이 훨씬 큼
      나도 종단 간 암호화를 켜고 싶지만, 키를 잃지 않을 만큼 스스로를 신뢰하지 못하겠음
    • iCloud의 종단 간 암호화를 수동으로 켜는 것과, 종단 간 암호화를 기본 지원하는 제공자를 직접 찾아 쓰는 것이 어떻게 다른지 모르겠음
      메시징처럼 상대방도 종단 간 암호화를 켜야 하는 상황도 아님
    • 클라우드 저장소 제공자를 통째로 바꾸는 것보다, iCloud에서 버튼 하나 눌러 종단 간 암호화를 켜는 게 당연히 더 쉬워 보임
    • iCloud 계정 설정의 고급 데이터 보호로 종단 간 암호화를 켤 수 있음
      https://support.apple.com/en-ca/HT212520
  • 나도 이것 때문에 꽤 화가 남. Calibre 라이브러리를 Documents 폴더에 뒀었음. 달리 어디에 두겠나, 무료 백업도 포함되니 말임
    그런데 얼마 전 라이브러리 안의 몇몇 책 폴더가 실제 epub 파일을 담고 있어야 하는데 비어 있는 걸 발견함
    디렉터리 구조와 데이터베이스 항목은 있는데 책 파일만 사라졌음. 전부는 아니고 무작위로 약 40% 정도였음
    결론은 좋아하는 것은 iCloud Drive에 저장하지 말라는 것, 특히 책은 더더욱 안 됨

    • 장난스러운 팁이지만, 아마 Libgen에서 다시 구할 수 있을 것임
  • “충돌 처리를 지원하는 편집기에서 파일을 열면 어떤 버전을 유지할지 묻는 팝업이 뜬다. Textifier, Xcode, Obsidian처럼 충돌 처리가 없는 편집기는 iCloud가 디스크와 백업에 어떤 버전을 저장할지 결정하게 둔다”는 부분에 대해, iCloud 지원을 넣으면서 충돌 처리 메커니즘을 추가하지 않은 앱 개발자에게도 일부 책임이 있다고 봄
    하지만 Apple 자체 앱인 Xcode가 왜 충돌 처리를 지원하지 않는가? Apple 소프트웨어가 서드파티 개발자의 기준을 세워야 함
    Apple도 버전 충돌을 처리하지 않으면, 당연히 다른 개발자들도 안 할 것임

    • 원글 작성자임. 내가 조금 오해를 부르게 쓴 것 같음. 핵심은 편집기와 무관하다는 점임
      충돌 처리를 지원하는 편집기를 써도 내용을 잃을 수 있음
      무언가를 쓰고 저장한 뒤 편집기를 닫고 다시 열지 않는다고 가정하면, iCloud가 그 파일 내용을 바꿔치기할 수 있고 사용자는 알 방법이 없음
      데이터를 잃지 않는 유일한 방법은 Git 저장소를 만들거나, 중요한 모든 파일을 충돌 처리를 지원하는 편집기에서 정기적으로 여는 것임
    • 앱이 기능을 구현하지 않았다고 해서 시스템 API가 중요한 데이터를 조용히 삭제하면 안 됨
      이건 Xcode 버그가 아니라 iCloud 버그임
  • iCloud Drive에 파일을 두면 iPhone이 언제든 로컬 복사본을 제거할 수 있음
    파일을 동기화하면서도 로컬 복사본이 100% 있다고 확신하고 싶다면, 같은 파일을 iCloud Drive와 “나의 iPhone” 폴더 양쪽에 둬야 함
    Apple Books, Numbers, 그리고 iCloud Drive를 쓰는 모든 앱이 로컬 복사본을 계속 제거하는 이유가 이것임
    iCloud Drive를 이용하는 간단한 메모 앱을 만들었는데, 앱을 닫으면 iCloud가 2KB짜리 txt 파일도 탐욕스럽게 제거했음. 가끔은 안 지우기도 해서 꽤 무작위적임
    저장 공간이 많이 남아 있어도 상관없고, iCloud는 계속 쓰는 파일의 로컬 버전도 제거할 수 있음
    Apple 개발자 지원은 할 수 있는 게 없다고 했음. 개발자에게도 파일을 절대 제거하지 말라고 표시할 방법이 없음
    공식 문서에서 Apple은 실제로 사용자의 모든 파일을 iCloud Drive에 보관하고 “나의 iPhone”에는 복사본을 두지 말라고 권장함

  • Contacts가 사라지는 비슷한 문제를 겪었음. 한동안 발생했지만 처음에는 내 실수라고 생각했음
    어느 날 아침, 전날 밤 문자하던 친구의 연락처가 사라진 걸 보고 문제가 iCloud라는 걸 깨달음
    Apple 지원에 연락했고, 기본적인 안내를 다 해본 뒤 담당자가 이것이 알려진 문제지만 근본 원인을 찾지 못했고 해결책도 없다고 인정함
    삭제가 언제 발생하는지 알 수 있게 연락처를 모니터링하라고 했는데, 몇 분 단위의 범위를 알려줘야 한다고 했음
    “iPhone은 로그를 많이 만들기 때문에 정확히 언제 일어났는지 짚지 못하면 엔지니어가 볼 수 없다”는 이유였음
    8시간 범위로 버그를 좁힌 것도 충분히 괜찮다고 생각했지만, 담당자는 엔지니어들이 그렇게 말했다며 몇 분 단위 정확도를 요구함
    결국 Apple 지원에 어려운 문제를 맡길 때마다 그랬듯 담당자는 후속 연락을 하겠다고 했지만 다시 전화하지 않았고, 아무 일도 일어나지 않았음
    연락처를 Google로 옮기고 그냥 잊어버렸음

  • 이 문제를 살펴봤음. Apple은 사용자를 충돌로 너무 귀찮게 하지 않으려고, 특정 조건에서 사용자 데이터를 잃는 동기화 전략을 선택했음
    충돌한 개정판을 보존할 수 있었던 훨씬 오래된 기법들을 쓰지 않기로 한 것임
    정리는 여기 있음
    https://www.youtube.com/watch?v=q8k1q6kf1W0

    • 사용자에게 방해가 되지 않게 하려면 중복 파일을 충돌 폴더 같은 곳에 넣을 수도 있었음
      그러면 사람들이 “Apple이 내 파일에 무슨 짓을 했나?”를 검색해서 복구 방법을 찾을 수 있었을 것임
      방해하지 않는다는 얘기를 곁들이면, iOS가 어떤 업데이트에서 내 통화 설정을 조용히 바꿔 일부 발신자에게 전화벨이 울리지 않게 했음
      일종의 마음을 차분하게 해주는 헛소리 기능이었는데, NHS 특성상 다시 전화하기 어려운 암 외과 의사의 전화를 놓쳐서 크게 불안했음
  • 내 경우 iCloud Drive가 가끔 그냥 동기화되지 않고 뭔가에 걸려 있음. Finder의 iCloud Drive 아이콘에서 동기화 상태를 볼 수 있음
    macOS와 iOS의 모든 앱을 닫고 killall bird를 실행하면 가끔 해결됨. bird는 iCloud 동기화 서비스임