1page.title=앱용 자동 백업 2page.tags=backup, previewresources, androidm 3page.keywords=백업, 자동 백업, 미리 보기 4page.image=images/cards/card-auto-backup_2x.png 5@jd:body 6 7<div id="qv-wrapper"> 8 <div id="qv"> 9 <h2>이 문서의 내용</h2> 10 <ol> 11 <li><a href="#overview">개요</a></li> 12 <li><a href="#configuring">데이터 백업 구성</a></li> 13 <li><a href="#testing">백업 구성 테스트</a></li> 14 <li><a href="#issues">알려진 문제</a></li> 15 </ol> 16 </div> 17</div> 18 19<p> 20 사용자는 앱 내에서 데이터를 생성하고 기본 설정을 설정하는 데 상당한 시간과 노력을 들이는 경우가 빈번합니다. 21 사용자가 고장 난 기기를 교체하거나 새것으로 업그레이드하면 그러한 데이터를 보존해 두는 것이 훌륭한 사용자 환경을 보장하는 데 중요한 부분을 차지합니다. 22 Android M 미리 보기 시스템에서 실행되는 기기는 이러한 상황에서 사용자에게 좋은 환경을 보장하는 데 도움을 주기 위해 앱 데이터를 Google Drive에 자동으로 백업합니다. 23 24 이런 앱 데이터는 사용자가 기기를 바꾸거나 업그레이드하면 자동으로 복원됩니다. 25 26</p> 27 28<p> 29 자동 백업 기능은 Android M 미리 보기에서 실행되는 기기에 설치된 모든 앱에 활성화되어 있습니다. 달리 앱 코드를 추가하지 않아도 됩니다. 30 시스템은 사용자에게 자동 데이터 백업에서 옵트아웃할 수도 있습니다. 31 앱에서 어떤 데이터를 백업할지 제한하는 쪽을 선택할 수도 있습니다. 32</p> 33 34<p> 35 이 문서에서는 새로운 시스템 동작과 앱에 대해 어느 데이터를 백업할지 지정하는 방법을 설명합니다. 36 37</p> 38 39<h2 id="overview">개요</h2> 40 41<p> 42 자동 백업 기능은 앱이 사용자 기기에서 생성한 데이터를 보존하기 위해 해당 데이터를 사용자의 Google Drive 계정에 업로드하고 암호화합니다. 43 데이터 저장에 대해 개발자나 사용자에게 아무런 요금도 부과하지 않고, 저장된 데이터는 사용자 개인의 Drive 할당량을 사용한 것으로 감안하지 않습니다. 44 M 미리 보기 시행 기간 중 사용자는 Android 앱 한 개당 최대 25MB까지 저장할 수 있습니다. 45 46</p> 47 48<p> 49 자동 백업은 24시간마다 한 번씩, 기기가 유휴 상태일 때, 충전 중일 때 및 Wi-Fi 네트워크에 연결될 때마다 수행합니다. 50 이러한 조건에 부합하면 백업 관리자 서비스가 이용 가능한 모든 백업 데이터를 클라우드에 업로드합니다. 51 사용자가 새 기기로 전환하거나 백업된 앱을 제거했다가 다시 설치하면 복원 작업이 백업된 데이터를 새로 설치된 앱의 데이터 디렉터리 안에 복사합니다. 52 53 54</p> 55 56<p class="note"> 57 <strong>참고:</strong> 레거시 <a href="{@docRoot}google/backup/index.html">Android 백업 서비스</a>를 이용하는 앱의 경우, 이 새 동작이 적용되지 않고 기존 백업 동작이 평소처럼 작동합니다. 58 59 60</p> 61 62 63<h3 id="auto-exclude">자동으로 배제된 데이터 파일</h3> 64 65<p> 66 데이터 중에는 예를 들어 임시 파일과 캐시 등 백업하지 않아도 되는 것도 있습니다. 따라서 자동 백업 서비스는 특정 데이터 파일을 기본적으로 배제합니다. 67 68</p> 69 70<ul> 71 <li>디렉터리 내의 파일 중 {@link android.content.Context#getCacheDir 72 getCacheDir()} 및 {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()} 73 메서드로 참조되는 파일. 74 </li> 75 76 <li>외부 저장소에 위치한 파일 중(디렉터리에 상주하는 것이 아닌 한) 77{@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 78 메서드로 참조되는 파일. 79 </li> 80 81 <li>디렉터리에 위치한 파일 중 82{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} 메서드로 참조되는 파일. 83 </li> 84</ul> 85 86<h2 id="configuring">데이터 백업 구성</h2> 87 88<p> 89 M 미리 보기 기기에 설치된 앱이 생성한 데이터는 모두 백업됩니다. 다만 이전 섹션에서 나열한 자동으로 배제되는 파일만은 예외입니다. 90 앱에서 어느 데이터를 백업할지 좀 더 상세하게 제한하고 구성하려면 앱 매니페스트에 있는 설정을 사용하면 됩니다. 91 92</p> 93 94<h3 id="include-exclude">데이터 포함 또는 배제</h3> 95 96<p> 97 앱에 필요한 데이터가 무엇이며 어떤 식으로 저장하는지에 따라 특정 파일이나 디렉터리를 포함 또는 배제하기 위해 특정한 규칙을 설정해야 할 수 있습니다. 98 자동 백업 서비스는 이러한 백업 규칙 설정을 지원하는 데 XML 구성 파일과 앱 매니페스트를 사용하는 방식을 씁니다. 99 100 앱 매니페스트에서는 다음 예에서 표시된 것처럼 백업 구성표 구성 파일을 지정하면 됩니다. 101 102</p> 103 104<pre> 105<?xml version="1.0" encoding="utf-8"?> 106<manifest xmlns:android="http://schemas.android.com/apk/res/android" 107 xmlns:tools="http://schemas.android.com/tools" 108 package="com.my.appexample"> 109 <uses-sdk android:minSdkVersion="MNC"/> 110 <uses-sdk android:targetSdkVersion="MNC"/> 111 <app ... 112<strong> android:fullBackupContent="@xml/mybackupscheme"></strong> 113 </app> 114 ... 115</manifest> 116</pre> 117 118<p> 119 이 예시 코드에서는 <code>android:fullBackupContent</code> 특성이 XML 파일을 나타냅니다. 이는 앱 개발 프로젝트의 <code>res/xml/</code> 디렉터리 내에 위치하며, 일명 <code>mybackupscheme.xml</code>이라고 합니다. 120 121 이 구성 파일에는 어느 파일이 백업되는지에 대한 규칙이 포함되어 있습니다. 122 다음 예시 코드는 특정 파일을 백업에서 배제하는 구성 파일을 나타낸 것입니다. 123 124</p> 125 126<pre> 127<?xml version="1.0" encoding="utf-8"?> 128<full-backup-content> 129 <exclude domain="database" path="device_info.db"/> 130</full-backup-content> 131</pre> 132 133<p> 134 이 예에서의 백업 구성은 특정 데이터베이스 파일만 백업되지 않게 배제합니다. 135 나머지 파일은 모두 백업됩니다. 136</p> 137 138<h4>백업 구성 구문</h4> 139 140<p> 141 백업 서비스 구성을 사용하면 구체적으로 어느 파일을 백업에 포함시키고 백업에서 배제할지 지정할 수 있게 해줍니다. 142 데이터 백업 구성 XML 파일에 사용되는 구문은 다음과 같습니다. 143</p> 144 145<pre> 146<full-backup-content> 147 <include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> 148 <exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /> 149</full-backup-content> 150</pre> 151 152<p> 153 다음의 요소와 특성을 사용하면 어느 파일을 백업에 포함시키거나 백업에서 배제할지 지정할 수 있게 해줍니다. 154 155</p> 156 157<ul> 158 <li> 159 <code><include></code>. 이 요소는 일련의 리소스를 백업하기로 지정하는 경우 사용하십시오. 시스템이 기본적으로 앱 안의 모든 데이터를 백업하는 대신 이 방식을 쓰면 됩니다. 160 예를 들어 <code><include></code> 태그를 지정하면 시스템은 이 요소로 <em>지정된 리소스만</em> 백업합니다. 161 162 163 </li> 164 165 <li> 166 <code><exclude></code>. 이 요소는 일련의 리소스를 백업에서 배제하기로 지정하는 데 사용하세요. 167 시스템이 앱 안의 모든 데이터를 백업하되, 이 요소로 지정된 리소스만 제외합니다. 168 169 </li> 170 171 <li> 172 <code>domain.</code> 백업에 포함시키거나 백업에서 배제하고자 하는 리소스 유형입니다. 이 특성에 대해 지정할 수 있는 유효한 값에는 다음과 같은 것들이 있습니다. 173 174 </li> 175 176 <li style="list-style: none"> 177 <ul> 178 <li> 179 <code>root</code>. 리소스가 앱의 루트 디렉터리에 있음을 나타냅니다. 180 </li> 181 182 <li> 183 <code>file</code>. 디렉터리 내에 있는 리소스 중 184 {@link android.content.Context#getFilesDir getFilesDir()} 메서드에 의해 반환된 것에 상응합니다. 185 </li> 186 187 <li> 188 <code>database</code>. 189 {@link android.content.Context#getDatabasePath getDatabasePath()} 메서드에 의해, 또는 190 {@link android.database.sqlite.SQLiteOpenHelper} 클래스를 사용하여 반환된 데이터베이스에 상응합니다. 191 </li> 192 193 <li> 194 <code>sharedpref</code>. {@link android.content.Context#getSharedPreferences getSharedPreferences()} 195 메서드에 의해 반환된 {@link android.content.SharedPreferences} 객체에 196 상응합니다. 197 </li> 198 199 <li> 200 <code>external</code>. 리소스가 외부 저장소에 있으며, 디렉터리 내의 파일 중 {@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 메서드에 의해 반환된 것에 상응합니다. 201 202 203 </li> 204 205 <li> 206 <code>path</code>. 백업에 포함시키거나 백업에서 배제하고자 하는 리소스로 이어지는 파일 경로입니다. 207 208 </li> 209 </ul> 210 </li> 211</ul> 212 213 214<h3 id="prohibit">데이터 백업 금지하기</h3> 215 216<p> 217 앱 데이터 중 어떤 것이라도 자동 백업을 방지하기로 선택할 수도 있습니다. 매니페스트의 앱 요소에서 <code>android:allowBackup</code> 특성을 <code>false</code>로 설정하면 됩니다. 218 219 이 설정은 다음 예시 코드로 설명해 놓았습니다. 220</p> 221 222<pre> 223<?xml version="1.0" encoding="utf-8"?> 224<manifest xmlns:android="http://schemas.android.com/apk/res/android" 225 xmlns:tools="http://schemas.android.com/tools" 226 package="com.my.appexample"> 227 <uses-sdk android:minSdkVersion="MNC"/> 228 <uses-sdk android:targetSdkVersion="MNC"/> 229 <app ... 230<strong> android:allowBackup="false"></strong> 231 </app> 232 ... 233</manifest> 234</pre> 235 236 237<h2 id="testing">백업 구성 테스트</h2> 238 239<p> 240 백업 구성을 만들었으면 앱이 데이터를 저장하고 제대로 복구되는지 확인하기 위해 테스트해보는 것이 좋습니다. 241 242</p> 243 244 245<h4>백업 로깅 활성화</h4> 246 247<p> 248 백업 기능이 XML 파일을 구문 분석하는 방법을 결정하는 데 도움이 되는 방법으로 테스트 백업을 수행하기 전에 로깅을 활성화하는 방안이 있습니다. 249 250</p> 251 252<pre class="noprettyprint"> 253$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE 254</pre> 255 256<h4>백업 테스트</h4> 257 258<p>수동으로 백업을 실행하려면, 우선 다음과 같은 명령을 호출하여 백업 관리자를 초기화해야 합니다. 259 260</p> 261 262<pre class="noprettyprint"> 263$ adb shell bmgr run 264</pre> 265 266<p> 267 다음으로, 다음과 같은 명령을 사용하여 애플리케이션을 수동으로 백업하되 앱의 패키지 이름을 <code><PACKAGE></code> 매개변수로 지정합니다. 268 269</p> 270 271<pre class="noprettyprint"> 272$ adb shell bmgr fullbackup <PACKAGE></pre> 273 274 275<h4>복구 테스트</h4> 276 277<p> 278 앱 데이터를 백업한 다음 수동으로 복구를 시작하려면, 다음 명령을 호출하되, 앱에 대한 패키지 이름을 <code><PACKAGE></code> 매개변수로 지정하십시오. 279 280</p> 281 282<pre class="noprettyprint"> 283$ adb shell bmgr restore <PACKAGE> 284</pre> 285 286<p class="warning"> 287 <b>경고:</b> 이 작업을 수행하면 앱이 중지되고 복구 작업을 수행하기 전에 데이터를 지워버립니다. 288 289</p> 290 291<p> 292 앱의 복구 프로세스를 시작하려면 앱을 제거했다가 다시 설치하면 됩니다. 앱 데이터는 앱 설치가 완료되면 클라우드에서 자동으로 복원됩니다. 293 294</p> 295 296 297<h4>백업 문제 해결</h4> 298 299<p> 300 문제에 직면하면 백업 데이터와 관련 메타데이터를 지우면 됩니다. 그러려면 <strong>설정 > 백업</strong>에서 백업을 껐다가 켜거나, 기기를 공장 재설정하거나 아니면 다음의 명령을 호출하십시오. 301 302 303</p> 304 305<pre>$ adb shell bmgr wipe <TRANSPORT> <PACKAGE></pre> 306 307<p> 308 <code><TRANSPORT></code> 값이 <code>com.google.android.gms</code>로 접두사가 붙어있어야 합니다. 309 전송 목록을 가져오려면 다음과 같은 명령을 호출하면 됩니다. 310</p> 311 312<pre>$ adb shell bmgr list transports</pre> 313 314<h2 id="issues">알려진 문제</h2> 315 316<p>다음은 자동 백업 서비스에 대해 알려진 문제입니다.</p> 317 318<ul> 319 <li><strong>Google Cloud 메시지</strong> - 푸시 알림에 Google Cloud 메시지를 사용하는 앱의 경우, Google Cloud 메시지 등록에 의해 반환된 등록 ID를 백업하면 복원된 앱에 대한 푸시 알림을 끊게 되는 문제가 알려져 있습니다. 새 기기에 설치된 다음에는 새 등록 ID에 대하여 API를 쿼리하는 것이 중요합니다. 이것은 기존 등록 ID가 백업된 경우는 해당되지 않습니다. 320 321 322 323 324 이 문제를 피하려면 백업된 파일 집합에서 등록 ID를 배제하십시오. 325 326 </li> 327</ul> 328