blob: b3952d5eab52319bc46c343ff55d6d757d9f0f05 [file] [log] [blame]
page.title=앱용 자동 백업
page.tags=backup, previewresources, androidm
page.keywords=백업, 자동 백업, 미리 보기
page.image=images/cards/card-auto-backup_2x.png
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2> 문서의 내용</h2>
<ol>
<li><a href="#overview">개요</a></li>
<li><a href="#configuring">데이터 백업 구성</a></li>
<li><a href="#testing">백업 구성 테스트</a></li>
<li><a href="#issues">알려진 문제</a></li>
</ol>
</div>
</div>
<p>
사용자는 내에서 데이터를 생성하고 기본 설정을 설정하는 상당한 시간과 노력을 들이는 경우가 빈번합니다.
사용자가 고장 기기를 교체하거나 새것으로 업그레이드하면 그러한 데이터를 보존해 두는 것이 훌륭한 사용자 환경을 보장하는 중요한 부분을 차지합니다.
Android M 미리 보기 시스템에서 실행되는 기기는 이러한 상황에서 사용자에게 좋은 환경을 보장하는 도움을 주기 위해 데이터를 Google Drive 자동으로 백업합니다.
이런 데이터는 사용자가 기기를 바꾸거나 업그레이드하면 자동으로 복원됩니다.
</p>
<p>
자동 백업 기능은 Android M 미리 보기에서 실행되는 기기에 설치된 모든 앱에 활성화되어 있습니다. 달리 코드를 추가하지 않아도 됩니다.
시스템은 사용자에게 자동 데이터 백업에서 옵트아웃할 수도 있습니다.
앱에서 어떤 데이터를 백업할지 제한하는 쪽을 선택할 수도 있습니다.
</p>
<p>
문서에서는 새로운 시스템 동작과 앱에 대해 어느 데이터를 백업할지 지정하는 방법을 설명합니다.
</p>
<h2 id="overview">개요</h2>
<p>
자동 백업 기능은 앱이 사용자 기기에서 생성한 데이터를 보존하기 위해 해당 데이터를 사용자의 Google Drive 계정에 업로드하고 암호화합니다.
데이터 저장에 대해 개발자나 사용자에게 아무런 요금도 부과하지 않고, 저장된 데이터는 사용자 개인의 Drive 할당량을 사용한 것으로 감안하지 않습니다.
M 미리 보기 시행 기간 사용자는 Android 개당 최대 25MB까지 저장할 있습니다.
</p>
<p>
자동 백업은 24시간마다 번씩, 기기가 유휴 상태일 때, 충전 중일 Wi-Fi 네트워크에 연결될 때마다 수행합니다.
이러한 조건에 부합하면 백업 관리자 서비스가 이용 가능한 모든 백업 데이터를 클라우드에 업로드합니다.
사용자가 기기로 전환하거나 백업된 앱을 제거했다가 다시 설치하면 복원 작업이 백업된 데이터를 새로 설치된 앱의 데이터 디렉터리 안에 복사합니다.
</p>
<p class="note">
<strong>참고:</strong> 레거시 <a href="{@docRoot}google/backup/index.html">Android 백업 서비스</a>를 이용하는 앱의 경우, 이 새 동작이 적용되지 않고 기존 백업 동작이 평소처럼 작동합니다.
</p>
<h3 id="auto-exclude">자동으로 배제된 데이터 파일</h3>
<p>
데이터 중에는 예를 들어 임시 파일과 캐시 등 백업하지 않아도 되는 것도 있습니다. 따라서 자동 백업 서비스는 특정 데이터 파일을 기본적으로 배제합니다.
</p>
<ul>
<li>디렉터리 내의 파일 중 {@link android.content.Context#getCacheDir
getCacheDir()} 및 {@link android.content.ContextWrapper#getCodeCacheDir getCodeCacheDir()}
메서드로 참조되는 파일.
</li>
<li>외부 저장소에 위치한 파일 중(디렉터리에 상주하는 것이 아닌 한)
{@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
메서드로 참조되는 파일.
</li>
<li>디렉터리에 위치한 파일 중
{@link android.content.Context#getNoBackupFilesDir getNoBackupFilesDir()} 메서드로 참조되는 파일.
</li>
</ul>
<h2 id="configuring">데이터 백업 구성</h2>
<p>
M 미리 보기 기기에 설치된 앱이 생성한 데이터는 모두 백업됩니다. 다만 이전 섹션에서 나열한 자동으로 배제되는 파일만은 예외입니다.
앱에서 어느 데이터를 백업할지 좀 더 상세하게 제한하고 구성하려면 앱 매니페스트에 있는 설정을 사용하면 됩니다.
</p>
<h3 id="include-exclude">데이터 포함 또는 배제</h3>
<p>
앱에 필요한 데이터가 무엇이며 어떤 식으로 저장하는지에 따라 특정 파일이나 디렉터리를 포함 또는 배제하기 위해 특정한 규칙을 설정해야 할 수 있습니다.
자동 백업 서비스는 이러한 백업 규칙 설정을 지원하는 데 XML 구성 파일과 앱 매니페스트를 사용하는 방식을 씁니다.
앱 매니페스트에서는 다음 예에서 표시된 것처럼 백업 구성표 구성 파일을 지정하면 됩니다.
</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.appexample"&gt;
&lt;uses-sdk android:minSdkVersion="MNC"/&gt;
&lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
&lt;app ...
<strong> android:fullBackupContent="&#64;xml/mybackupscheme"&gt;</strong>
&lt;/app&gt;
...
&lt;/manifest&gt;
</pre>
<p>
예시 코드에서는 <code>android:fullBackupContent</code> 특성이 XML 파일을 나타냅니다. 이는 앱 개발 프로젝트의 <code>res/xml/</code> 디렉터리 내에 위치하며, 일명 <code>mybackupscheme.xml</code>이라고 합니다.
구성 파일에는 어느 파일이 백업되는지에 대한 규칙이 포함되어 있습니다.
다음 예시 코드는 특정 파일을 백업에서 배제하는 구성 파일을 나타낸 것입니다.
</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;full-backup-content&gt;
&lt;exclude domain="database" path="device_info.db"/&gt;
&lt;/full-backup-content&gt;
</pre>
<p>
예에서의 백업 구성은 특정 데이터베이스 파일만 백업되지 않게 배제합니다.
나머지 파일은 모두 백업됩니다.
</p>
<h4>백업 구성 구문</h4>
<p>
백업 서비스 구성을 사용하면 구체적으로 어느 파일을 백업에 포함시키고 백업에서 배제할지 지정할 있게 해줍니다.
데이터 백업 구성 XML 파일에 사용되는 구문은 다음과 같습니다.
</p>
<pre>
&lt;full-backup-content&gt;
&lt;include domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
&lt;exclude domain=["file" | "database" | "sharedpref" | "external" | "root"] path="string" /&gt;
&lt;/full-backup-content&gt;
</pre>
<p>
다음의 요소와 특성을 사용하면 어느 파일을 백업에 포함시키거나 백업에서 배제할지 지정할 있게 해줍니다.
</p>
<ul>
<li>
<code>&lt;include&gt;</code>. 요소는 일련의 리소스를 백업하기로 지정하는 경우 사용하십시오. 시스템이 기본적으로 안의 모든 데이터를 백업하는 대신 방식을 쓰면 됩니다.
예를 들어 <code>&lt;include&gt;</code> 태그를 지정하면 시스템은 이 요소로 <em>지정된 리소스만</em> 백업합니다.
</li>
<li>
<code>&lt;exclude&gt;</code>. 요소는 일련의 리소스를 백업에서 배제하기로 지정하는 사용하세요.
시스템이 안의 모든 데이터를 백업하되, 요소로 지정된 리소스만 제외합니다.
</li>
<li>
<code>domain.</code> 백업에 포함시키거나 백업에서 배제하고자 하는 리소스 유형입니다. 특성에 대해 지정할 있는 유효한 값에는 다음과 같은 것들이 있습니다.
</li>
<li style="list-style: none">
<ul>
<li>
<code>root</code>. 리소스가 앱의 루트 디렉터리에 있음을 나타냅니다.
</li>
<li>
<code>file</code>. 디렉터리 내에 있는 리소스
{@link android.content.Context#getFilesDir getFilesDir()} 메서드에 의해 반환된 것에 상응합니다.
</li>
<li>
<code>database</code>.
{@link android.content.Context#getDatabasePath getDatabasePath()} 메서드에 의해, 또는
{@link android.database.sqlite.SQLiteOpenHelper} 클래스를 사용하여 반환된 데이터베이스에 상응합니다.
</li>
<li>
<code>sharedpref</code>. {@link android.content.Context#getSharedPreferences getSharedPreferences()}
메서드에 의해 반환된 {@link android.content.SharedPreferences} 객체에
상응합니다.
</li>
<li>
<code>external</code>. 리소스가 외부 저장소에 있으며, 디렉터리 내의 파일 {@link android.content.Context#getExternalFilesDir getExternalFilesDir()} 메서드에 의해 반환된 것에 상응합니다.
</li>
<li>
<code>path</code>. 백업에 포함시키거나 백업에서 배제하고자 하는 리소스로 이어지는 파일 경로입니다.
</li>
</ul>
</li>
</ul>
<h3 id="prohibit">데이터 백업 금지하기</h3>
<p>
데이터 어떤 것이라도 자동 백업을 방지하기로 선택할 수도 있습니다. 매니페스트의 요소에서 <code>android:allowBackup</code> 특성을 <code>false</code>로 설정하면 됩니다.
설정은 다음 예시 코드로 설명해 놓았습니다.
</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.appexample"&gt;
&lt;uses-sdk android:minSdkVersion="MNC"/&gt;
&lt;uses-sdk android:targetSdkVersion="MNC"/&gt;
&lt;app ...
<strong> android:allowBackup="false"&gt;</strong>
&lt;/app&gt;
...
&lt;/manifest&gt;
</pre>
<h2 id="testing">백업 구성 테스트</h2>
<p>
백업 구성을 만들었으면 앱이 데이터를 저장하고 제대로 복구되는지 확인하기 위해 테스트해보는 것이 좋습니다.
</p>
<h4>백업 로깅 활성화</h4>
<p>
백업 기능이 XML 파일을 구문 분석하는 방법을 결정하는 도움이 되는 방법으로 테스트 백업을 수행하기 전에 로깅을 활성화하는 방안이 있습니다.
</p>
<pre class="noprettyprint">
$ adb shell setprop log.tag.BackupXmlParserLogging VERBOSE
</pre>
<h4>백업 테스트</h4>
<p>수동으로 백업을 실행하려면, 우선 다음과 같은 명령을 호출하여 백업 관리자를 초기화해야 합니다.
</p>
<pre class="noprettyprint">
$ adb shell bmgr run
</pre>
<p>
다음으로, 다음과 같은 명령을 사용하여 애플리케이션을 수동으로 백업하되 앱의 패키지 이름을 <code>&lt;PACKAGE&gt;</code> 매개변수로 지정합니다.
</p>
<pre class="noprettyprint">
$ adb shell bmgr fullbackup &lt;PACKAGE&gt;</pre>
<h4>복구 테스트</h4>
<p>
데이터를 백업한 다음 수동으로 복구를 시작하려면, 다음 명령을 호출하되, 앱에 대한 패키지 이름을 <code>&lt;PACKAGE&gt;</code> 매개변수로 지정하십시오.
</p>
<pre class="noprettyprint">
$ adb shell bmgr restore &lt;PACKAGE&gt;
</pre>
<p class="warning">
<b>경고:</b> 작업을 수행하면 앱이 중지되고 복구 작업을 수행하기 전에 데이터를 지워버립니다.
</p>
<p>
앱의 복구 프로세스를 시작하려면 앱을 제거했다가 다시 설치하면 됩니다. 데이터는 설치가 완료되면 클라우드에서 자동으로 복원됩니다.
</p>
<h4>백업 문제 해결</h4>
<p>
문제에 직면하면 백업 데이터와 관련 메타데이터를 지우면 됩니다. 그러려면 <strong>설정 &gt; 백업</strong>에서 백업을 껐다가 켜거나, 기기를 공장 재설정하거나 아니면 다음의 명령을 호출하십시오.
</p>
<pre>$ adb shell bmgr wipe &lt;TRANSPORT&gt; &lt;PACKAGE&gt;</pre>
<p>
<code>&lt;TRANSPORT&gt;</code> 값이 <code>com.google.android.gms</code>로 접두사가 붙어있어야 합니다.
전송 목록을 가져오려면 다음과 같은 명령을 호출하면 됩니다.
</p>
<pre>$ adb shell bmgr list transports</pre>
<h2 id="issues">알려진 문제</h2>
<p>다음은 자동 백업 서비스에 대해 알려진 문제입니다.</p>
<ul>
<li><strong>Google Cloud 메시지</strong> - 푸시 알림에 Google Cloud 메시지를 사용하는 앱의 경우, Google Cloud 메시지 등록에 의해 반환된 등록 ID 백업하면 복원된 앱에 대한 푸시 알림을 끊게 되는 문제가 알려져 있습니다. 기기에 설치된 다음에는 등록 ID 대하여 API 쿼리하는 것이 중요합니다. 이것은 기존 등록 ID 백업된 경우는 해당되지 않습니다.
문제를 피하려면 백업된 파일 집합에서 등록 ID 배제하십시오.
</li>
</ul>