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&lt;?xml version="1.0" encoding="utf-8"?&gt;
106&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
107        xmlns:tools="http://schemas.android.com/tools"
108        package="com.my.appexample"&gt;
109    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
110    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
111    &lt;app ...
112<strong>        android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
113    &lt;/app&gt;
114    ...
115&lt;/manifest&gt;
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&lt;?xml version="1.0" encoding="utf-8"?&gt;
128&lt;full-backup-content&gt;
129    &lt;exclude domain="database" path="device_info.db"/&gt;
130&lt;/full-backup-content&gt;
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&lt;full-backup-content&gt;
147    &lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
148    &lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
149&lt;/full-backup-content&gt;
150</pre>
151
152<p>
153  다음의 요소와 특성을 사용하면 어느 파일을 백업에 포함시키거나 백업에서 배제할지 지정할 수 있게 해줍니다.
154
155</p>
156
157<ul>
158  <li>
159  <code>&lt;include&gt;</code>. 이 요소는 일련의 리소스를 백업하기로 지정하는 경우 사용하십시오. 시스템이 기본적으로 앱 안의 모든 데이터를 백업하는 대신 이 방식을 쓰면 됩니다.
160 예를 들어 <code>&lt;include&gt;</code> 태그를 지정하면 시스템은 이 요소로 <em>지정된 리소스만</em> 백업합니다.
161
162
163  </li>
164
165  <li>
166  <code>&lt;exclude&gt;</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&lt;?xml version="1.0" encoding="utf-8"?&gt;
224&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
225        xmlns:tools="http://schemas.android.com/tools"
226        package="com.my.appexample"&gt;
227    &lt;uses-sdk android:minSdkVersion="MNC"/&gt;
228    &lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
229    &lt;app ...
230<strong>        android:allowBackup="false"&gt;</strong>
231    &lt;/app&gt;
232    ...
233&lt;/manifest&gt;
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>&lt;PACKAGE&gt;</code> 매개변수로 지정합니다.
268
269</p>
270
271<pre class="noprettyprint">
272$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
273
274
275<h4>복구 테스트</h4>
276
277<p>
278  앱 데이터를 백업한 다음 수동으로 복구를 시작하려면, 다음 명령을 호출하되, 앱에 대한 패키지 이름을 <code>&lt;PACKAGE&gt;</code> 매개변수로 지정하십시오.
279
280</p>
281
282<pre class="noprettyprint">
283$ adb shell bmgr restore &lt;PACKAGE&gt;
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>설정 &gt; 백업</strong>에서 백업을 껐다가 켜거나, 기기를 공장 재설정하거나 아니면 다음의 명령을 호출하십시오.
301
302
303</p>
304
305<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
306
307<p>
308  <code>&lt;TRANSPORT&gt;</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