DavRoll(이하 "본 앱")은 사용자가 직접 설정한 백업 대상(WebDAV, Amazon S3 호환 스토리지, SMB, SFTP, Google Drive, OneDrive, Dropbox App Folder, iCloud Drive, Android에서 사용자가 선택한 SAF 폴더)으로 기기의 사진·동영상, 연락처 백업 파일, 사용자가 선택한 PDF 문서를 백업하는 개인용 앱입니다. 본 방침은 본 앱이 어떤 정보를 어떻게 처리하는지 설명합니다.
| 항목 | 내용 | 저장 위치 |
|---|---|---|
| 백업 대상 자격 증명 | WebDAV/S3/SMB 접속 정보, SFTP 서버·계정·절대 경로·호스트 키 알고리즘과 SHA-256 지문, Google Drive·OneDrive·Dropbox·iCloud Drive 대상 메타데이터, OneDrive/Dropbox OAuth refresh token, Android SAF 폴더 표시 이름과 지속 URI 권한 token. OneDrive/Dropbox access token은 메모리에서만 사용하고 refresh token은 설정 내보내기에 포함하지 않음 | 평상시 기기 내 보안 저장소(flutter_secure_storage)에 저장. 사용자가 전체 설정 내보내기를 만들 때는 암호로 보호된 내보내기 파일에만 포함 |
| 설정 내보내기 파일 | 백업 대상 구성, 백업 범위, 백그라운드·알림·언어·테마 설정. 전체 내보내기는 자격 증명을 암호화해 포함하며, 설정만 내보내기는 자격 증명을 제외 | 사용자가 명시적으로 만든 로컬 파일 |
| 미디어 암호화 설정 | 암호화 백업 프로필, 키 파생 설정, 복원에 필요한 기기 내 파생 키 | 기기 내 보안 저장소(flutter_secure_storage) |
| JPEG XL 압축 설정 | WebDAV/S3 JPEG 무손실 재압축 사용 여부(기본 꺼짐) | 기기 내 보안 저장소(flutter_secure_storage) |
| XMP 사이드카 설정 | 새 사진의 태그 label을 평문 XMP 파일로 내보낼지 여부(기본 꺼짐) | 기기 내 보안 저장소(flutter_secure_storage) |
| 업로드 큐 메타데이터 | 사진 asset ID, 원격 경로, 파일명, payload mode, 고정된 원본 폴백 상태, 원본 크기·가로·세로, 상태, 재시도 횟수·시각, 실패 메시지, S3 멀티파트 재개 메타데이터 | 기기 내 로컬 데이터베이스 |
| 로컬 사진 태그 | 새 업로드를 기기 내 이미지 분류기로 분석한 최대 8개 일반 사물·장면 label과 신뢰도. OCR 텍스트는 생성하지 않음 | 기본값에서는 앱 전용 로컬 데이터베이스에만 저장. 사용자가 XMP 내보내기를 켜면 새 태그 사진 옆의 평문 .xmp 파일로 사용자가 설정한 백업 대상에 전송되어 저장소와 외부 사진 앱에서 볼 수 있음. 원본 사진, 로그, Analytics 또는 Crashlytics에는 기록하지 않음. Android ML Kit SDK 진단은 아래 별도 항목 참조 |
| Android ML Kit SDK 진단 | 기기·앱 정보, 앱별 설치 식별자, 성능, API 구성, 기능 입출력 크기, 버전·이벤트·오류 코드 | Google에서 이미지 라벨링 SDK 진단 및 사용 분석 목적으로 처리. HTTPS로 전송되며 사진 bytes와 생성 label 내용은 전송 대상이 아님 |
| 사진·동영상 원본 | 백업 대상으로 업로드할 사진·동영상 파일 | 본 앱은 원본을 별도 저장하지 않으며, 업로드 시점에만 사용자가 설정한 대상으로 전송. 기본 off인 백그라운드 신규 미디어 탐색을 켜면 이미 허용된 미디어 접근 범위와 저장된 백업 범위 안에서 한 번에 최대 80개를 확인. JPEG XL 옵션은 새 WebDAV/S3 JPEG 사진에만 적용. 미디어 암호화를 켜면 .droll 객체로 전송. Live Photo의 paired MOV는 현재 백업하지 않음 |
| 연락처 백업 파일 | 사용자가 연락처 백업을 실행할 때 기기 연락처에서 만든 vCard(.vcf) 파일. 연락처 사진 바이트는 포함하지 않음 |
업로드를 위해 임시 파일로만 만들고 처리 후 삭제. 사용자가 설정한 백업 대상으로만 전송 |
| PDF 문서 백업 파일 | 사용자가 문서 백업용으로 선택한 폴더 안의 PDF 파일 | 선택 폴더 접근 토큰은 기기 내 보안 저장소에 저장. PDF는 임시 업로드 파일로만 복사하고 처리 후 삭제. 사용자가 설정한 백업 대상으로만 전송 |
| 선택적 정리 도우미 입력 | 사용자가 미리보기 또는 이름 제안을 명시적으로 요청할 때 입력한 자연어 정리 지침과 앱 언어. 이벤트 이름 제안에는 로컬 달력 날짜 범위, 대략적인 미디어 수량 구간, 이미지·동영상 구성만 포함 | 승인된 HTTPS DavRoll backend와 self-hosted LLM에서 요청 처리 중에만 사용하며 요청·응답 본문을 저장하거나 로그에 기록하지 않음. 미디어 bytes, 썸네일, 파일명, asset ID, 경로, 태그, 앨범, 정확한 시각, EXIF, 위치, 백업 대상 또는 자격 증명은 전송하지 않음 |
| 앱 무결성 확인 정보 | 선택적 정리 도우미를 보호하기 위한 Firebase App Check 무결성 증거와 단기 token. Android는 Play Integrity, iOS는 App Attest 사용 | Firebase(Google)와 해당 플랫폼 제공자가 처리. token은 앱 메모리에서만 사용하며 URL, 기기 저장소, Analytics, Crashlytics 또는 일반 로그에 기록하지 않음. 정리 지침과 미디어 정보는 무결성 확인 요청에 포함하지 않음 |
| 진단/분석 데이터 | 크래시 로그(기기 모델, OS·앱 버전, 스택 트레이스), 집계 사용 이벤트·화면 조회 | Firebase(Google)에서 처리 |
본 앱은 백업 대상으로 선택된 사진·동영상을 식별하기 위해 사진 라이브러리 접근 권한을 요청합니다. Android에서는 이미지와 동영상 미디어 읽기 권한을 사용합니다. 본 앱은 사진 라이브러리의 원본 파일을 삭제하지 않습니다.
새 업로드의 검색용 사진 태그는 iOS Vision 또는 Android ML Kit를 사용해
기기 안에서만 생성합니다. 기본값에서는 태그를 앱 전용 로컬 검색 인덱스에만
저장하며 사진 원본과 metadata를 변경하지 않습니다. 사용자가 기본 off인
XMP 사이드카 내보내기를 켜면 새로 백업하는 태그 사진의 label만 평문
.xmp 파일로 같은 백업 대상에 전송합니다. 이 label은 백업 저장소와
XMP를 읽는 외부 앱에서 볼 수 있지만 개발자에게 전송되지 않습니다. 기존
사이드카는 덮어쓰지 않고 기존 백업을 자동으로 변환하지 않습니다. 미디어
암호화를 사용하면 평문 XMP 내보내기는 꺼지고 차단됩니다. 민감한 화면·문서
텍스트가 별도로 색인되지 않도록 OCR은
지원하지 않습니다. Android의 번들 ML Kit 모델은 사진을 서버 추론에
보내지 않지만, SDK 진단과 사용 분석 정보는 위 표와 같이 Google에서
처리됩니다.
백그라운드 신규 미디어 탐색은 수동 백업 및 기존 대기열 처리와 분리된 선택 기능이며 기본값은 꺼져 있습니다. 사용자가 이 기능을 켠 경우에만, foreground에서 이미 허용한 미디어 접근 범위와 앱에 저장된 백업 범위 안에서 한 번에 최신 항목 최대 80개를 비대화형으로 확인합니다. 실행 사이에 미디어를 80개 넘게 추가하거나 대량으로 가져온 경우에는 앱에서 지금 백업을 실행해 저장된 범위를 직접 확인해야 합니다. 본 앱은 백그라운드에서 미디어 권한을 새로 요청하지 않습니다. iOS에서 제한된 사진 접근 권한과 앨범 범위를 함께 사용하는 경우에는 자동 탐색을 건너뛰며, 사용자가 앱을 열어 권한 또는 범위를 확인한 뒤 수동 백업을 실행할 수 있습니다. 발견된 사진·동영상은 현재 암호화/JPEG XL 설정과 호환되는 활성 백업 대상의 중복 방지 대기열에 한 번만 추가됩니다. 실제 탐색 및 업로드 시점은 Android와 iOS가 허용하는 백그라운드 실행 시간에 따른 best-effort 방식이며 즉시 실행을 보장하지 않습니다.
사용자가 Restore Center에서 명시적으로 확인하면 선택한 지원 사진·동영상을 기기 사진 라이브러리에 추가할 수 있습니다. iOS에서는 추가 전용 권한을 사용하고, Android 9 이하에서만 사진 저장을 위한 legacy 쓰기 권한을 사용합니다. 가져오기 결과와 진행 상태는 집계 수치로만 표시하며 로컬 경로와 사진 라이브러리 식별자를 저장하거나 기록하지 않습니다. 로컬 복원 파일은 가져온 뒤에도 유지됩니다.
연락처 백업을 사용자가 직접 실행할 때 연락처 읽기 권한을 요청합니다. 본 앱은 연락처를 수정하거나 삭제하지 않으며, 연락처 쓰기 권한은 선언하지 않습니다.
PDF 문서 백업을 설정할 때 본 앱은 시스템 폴더 선택기를 열고 사용자가 선택한 폴더에만 접근합니다. Android의 PDF 문서 소스와 백업 대상 폴더는 Storage Access Framework의 지속 URI 권한을, iOS는 문서 선택기 bookmark 흐름을 사용합니다. 본 앱은 전체 파일 시스템 접근 권한을 요청하지 않습니다. Android SAF 백업 대상은 사용자가 선택한 폴더와 하위 항목에만 접근하며 실제 파일 시스템 경로와 하위 document URI를 저장하거나 로그에 기록하지 않습니다.
런타임 네트워크 트래픽은 사용자가 설정한 WebDAV/S3 엔드포인트, SMB/SFTP 서버,
Google OAuth/Drive 엔드포인트, Microsoft OAuth/Graph OneDrive 엔드포인트, Dropbox OAuth/API 엔드포인트, Files/iCloud Drive 및 Android SAF 제공자 동작, 플랫폼
문서 선택기/제공자 동작, 플랫폼 백그라운드 동기화, Firebase, Android
ML Kit(Google), 그리고 기능이 활성화되고 사용자가 명시적으로 요청한 경우의
승인된 HTTPS DavRoll 정리 backend로
제한됩니다. WebDAV URL과 S3 엔드포인트는 앱 UI에서 HTTPS를 요구하고, SFTP는 SSH 암호화와 사용자가 입력한 SHA-256 호스트 키 지문을 검증합니다.
OneDrive는 Microsoft OAuth의 최소 위임 권한인 Files.ReadWrite.AppFolder만 요청하여 사용자 OneDrive의 DavRoll 앱 폴더에만 접근합니다.
Dropbox는 App Folder 콘텐츠 접근 유형과 account_info.read, files.metadata.read, files.content.read, files.content.write만 사용하여 Dropbox의 DavRoll 전용 앱 폴더에만 접근합니다.
정리 backend 요청에는 Firebase App Check token을 header로만 전송하며 URL이나
요청 본문에는 넣지 않습니다.
사용자는 기기 설정에서 사진·연락처·문서 폴더·알림 권한을 언제든지 철회할 수 있으며, 앱 내에서 백그라운드 신규 사진 탐색을 끄고 저장된 자격 증명·대상 설정을 삭제할 수 있습니다. 정리 도우미가 제공되는 release에서도 해당 기능을 사용하지 않을 수 있으며, 명시적으로 제안을 요청하기 전에는 정리 입력이 전송되지 않습니다. 앱을 삭제하면 기기 내 모든 로컬 데이터가 제거됩니다.
본 앱은 아동을 대상으로 하지 않으며 아동의 개인정보를 의도적으로 수집하지 않습니다.
본 방침이 변경되는 경우 본 페이지에 변경 내용과 시행일을 게시합니다.
개인정보 관련 문의: me@nine20.net
운영 주체: nine20