사용자 데이터를 처리하는 Capacitor 앱은 안전한 저장소, 데이터 보유 기간 명확한 정책, 그리고 개인 정보 보호 법률 준수에 따라 데이터 보호를 해야 합니다. GDPR 및 CCPA. 이 안내서에서는 데이터 수집을 최소화하고 sensitive 정보를 안전하게 보호하고 권한 관리를 효과적으로 관리하는 방법에 대해 설명합니다. 여기서 빠른 개요를 살펴보겠습니다.
- 데이터 최소화: 특정 앱 기능에 필요한 것만 수집합니다.
- 안전한 저장소: 암호화에 사용할 수 있는
@capacitor/secure-storageplugin - 를 사용합니다.: __CAPGO_KEEP_0__을 정의한 시간 제한에 따라 자동으로 삭제합니다.
- 사용자 권한: 사용자들이 데이터를 접근, 삭제, 또는 내보내기 할 수 있도록 합니다.
- 권한 관리: 사용자에게 권한 요청을 컨텍스트에 맞게 요청하고 거부된 요청에 대체 옵션을 제공합니다.
- OTA 업데이트: Cloudflare와 같은 도구를 사용하여 안전한 OTA 업데이트 보장을 위해 합니다. Capgo.
Ionic을 사용하는 방법 Capacitor 안전한 저장소

데이터 수집 감소
개인 정보 보호 규정 준수에 대한 준수성을 유지하기 위해 데이터 수집을 관리하는 데 있어 구조화된 접근 방식이 중요합니다. Capacitor의 내장 도구를 사용하여 데이터 수집을 최소화하는 데 도움이 되는 도구를 활용하여, 앱의 데이터 관리를 개선하는 실제 단계를 취할 수 있습니다.
데이터 수집 검토
데이터 수집을 시작하기 전에 앱 내에서 데이터가 어떻게 흐르는지 매핑해 보세요. 데이터 계통도 시각화 도구를 사용하여 불필요한 데이터가 수집되는 영역을 식별하고, 개인 정보 영향 평가 (PIA) 소프트웨어를 사용하여 각 데이터 항목이 정말로 필요하다는 것을 확인하세요. 다음 영역에 집중하세요:
| 데이터 유형 | 검토 주의 | 작업 항목 |
|---|---|---|
| 사용자 입력 | 폼 필드 및 유효성 검사 | 필요하지 않은 필드를 삭제하세요 |
| API 호출 | 요청/응답 페이로드 | 추가 데이터 필드 필터링 |
| 저장소 | 캐시된 및 영구 데이터 | 저장소 사용을 최적화 |
| 분석 | 사용 추적 | 필요한 메트릭만 유지 |
데이터 수집 목표
각 데이터 항목이 특정 목적을 위해 사용되는지 명확하게 밝혀라. 예를 들어:
// Purpose-driven data collection example
const userPreferences = {
location: "Used for local weather updates",
notification: "Needed for sending alerts"
};
앱이 날씨 기능을 가지고 있다면, 날씨 기능만을 위해 필요한 정보만 수집하는 것이 좋다. 예를 들어, 주소 대신 주소의 code만 필요할 수 있다. 이 방법은 앱의 핵심 기능을 수행하기 위한 정보만 수집하는 것을 보장한다.[1][5].
데이터 입력 제어
폼과 API 호출을 통해 수집되는 데이터 양을 제한하기 위해 유효성 검사 도구를 사용하십시오. 클라이언트 측 유효성 검사와 서버 측 검증을 결합하여 이러한 제한을 효과적으로 강제하십시오.
Capacitor의 보안 기능을 통합하여 이러한 제어를 강화하십시오.
- 가능한 경우 드롭다운 메뉴를 사용하는 대신 자유 텍스트 필드를 사용하십시오.
- 텍스트 입력 필드에 대한 문자 제한을 설정하십시오.
자동화된 발견 도구를 사용하여 데이터 수집 관행이 앱의 의도된 기능과 일치하는지 확인하기 위해 매분기 감사 일정으로 설정하십시오.
데이터 보안 및 저장
데이터 수집 경계를 정의한 후에는 사용자 정보를 보호하면서 데이터 최소화 원칙을 준수하는 데 필수적인 단계를 구현하십시오.
보안 저장 설정
The @capacitor/secure-storage 플러그인은 iOS Keychain과 Android Keystore와 같은 내장 보안 기능을 사용하여敏感 데이터를 보호합니다. [1].
import { SecureStorage } from '@capacitor/secure-storage';
// Store sensitive data
await SecureStorage.set({
key: 'authToken',
value: 'user-specific-token'
});
// Retrieve stored data
const { value } = await SecureStorage.get({ key: 'authToken' });
데이터 암호화 방법
클라이언트 측 암호화를 추가하는 것은 또 다른 보호 계층입니다. 라이브러리 __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
// Basic encryption/decryption implementation
const encryptData = (data: string, key: string): string => {
return CryptoJS.AES.encrypt(data, key).toString();
};
__CAPGO_KEEP_2__ [2].
__CAPGO_KEEP_3__
__CAPGO_KEEP_4__
| __CAPGO_KEEP_5__ | __CAPGO_KEEP_6__ | __CAPGO_KEEP_7__ |
|---|---|---|
| __CAPGO_KEEP_8__ | __CAPGO_KEEP_9__ | __CAPGO_KEEP_10__ |
| __CAPGO_KEEP_11__ | 비밀번호, 토큰 | 비상급 설정 |
| 성능 | 암호화로 인해 느려짐 | 빠른 접근 |
API Secure Storage는 인증 토큰 및 개인 사용자 데이터와 같은 중요 정보를 저장하는 데 적합한 선택입니다. [1][4]. 그 암호화 기능 도 보존 정책과 일치하여, 지정된 시간 프레임 내에서 데이터에 대한 제어된 접근을 허용합니다. [2].
sbb-itb-f9944d2
데이터 저장 기간 제한
데이터 보존 정책을 명확하게 설정하면 데이터 최소화 원칙과 일치하여, 정보가 필요하지 않은 이상 더 이상 보관하지 않도록 합니다.
저장 시간 규칙
사용자 데이터의 다양한 유형은 목적과敏感성에 따라 정의된 보유 기간이 있어야 합니다. 아래는 데이터 보유를 관리하는 데 사용할 수 있는 제안된 프레임워크입니다. Capacitor 앱:
| 데이터 유형 | 보유 기간 | 사유 |
|---|---|---|
| 계정 데이터 | 계정 삭제 또는 2년의 비활동 기간까지 | 계정 관련 작업을 위해 필요 |
| 거래 기록 | 7년 | 금융 규제 준수 |
| 분석 데이터 | 90일(익명화), 1년(삭제) | 기능 개선에 대한 지원 |
| 마케팅 선호도 | 계정 삭제 또는 Opt-out 전까지 | consent 요구 사항에 따라 준수 |
데이터가 만료된 날짜를 프로그램적으로 저장하는 방법에 대한 예시입니다:
async function storeDataWithExpiration(key: string, value: any, retentionDays: number) {
const item = {
value: value,
expiration: Date.now() + (retentionDays * 24 * 60 * 60 * 1000)
};
await Preferences.set({ key, value: JSON.stringify(item) });
}
자동 데이터 삭제
데이터 정리 자동화는 규정 준수 및 수동 개입을 줄이는 데 도움이 됩니다. Capacitor의 배경 fetch 기능은 이에 유용한 도구입니다:
import { BackgroundFetch } from '@capacitor/background-fetch';
BackgroundFetch.registerTask({
taskId: 'data-cleanup',
delay: 3600000,
periodic: true,
requiresNetworkConnectivity: false
}, async () => {
await cleanExpiredData();
return BackgroundFetch.Result.NewData;
});
SQLite를 사용하여 저장소로 사용하는 경우 만료된 레코드를 자동으로 삭제하기 위해 트리거를 설정할 수 있습니다: SQLite 자동 데이터 삭제
CREATE TRIGGER remove_expired_data
AFTER INSERT ON user_data
BEGIN
DELETE FROM user_data
WHERE expiration_date < CURRENT_TIMESTAMP;
END;
사용자 데이터 삭제 옵션
__CAPGO_KEEP_0__ 앱에서 사용자 데이터 관리를 위한 도구를 제공하는 것은 필수적입니다. 두 가지 주요 기능을 구현할 수 있습니다:
- 특정 데이터 삭제: 사용자의 계정과 관련된 특정 데이터 유형을 삭제할 수 있도록 허용합니다.
async function deleteSpecificData(userId: string, dataType: string) {
await Preferences.remove({ key: `${userId}_${dataType}` });
if (db) {
await db.run(
'DELETE FROM user_data WHERE user_id = ? AND data_type = ?',
[userId, dataType]
);
}
}
- 사용자 데이터 내보내기: 사용자의 저장된 데이터를 구조화된 형식으로 다운로드할 수 있도록 허용합니다.
async function exportUserData(userId: string) {
// Gathers all user data for export
const userData = await collectUserData(userId);
return JSON.stringify(userData);
}
프랑스 데이터 보호 당국 CNIL 데이터 보유 기간은 앱의 핵심 기능과 일치해야 한다는 점을 강조합니다. [3]이 원칙은 Capacitor 앱 개발자에게 특히 중요하며, 데이터 보유 기간 전략을 결정하는 데 지침을 제공해야 합니다.
앱 권한 관리
Handling app permissions carefully is key to safeguarding user data while ensuring your app functions as intended. By managing permissions properly, you can limit access to only the device features your app truly needs. Capacitor’s Permissions API offers a unified approach to managing permissions on both iOS and Android.
권한 요청 단계
Capacitor 앱에서 권한 요청을 처리하는 샘플 구현을 보시려면 여기를 클릭하세요.
import { Permissions } from '@capacitor/core';
const permissionHandler = async (permissionType: string) => {
const status = await Permissions.query({ name: permissionType });
if (status.state === 'granted') {
return true;
}
const shouldProceed = await showExplanationDialog(
`We need ${permissionType} access to provide core functionality`
);
if (shouldProceed) {
const result = await Permissions.request({ name: permissionType });
return result.state === 'granted';
}
return false;
};
거부된 권한 관리
사용자가 권한 요청을 거부할 경우, 명확한 대안과 안내를 제공하세요. 예를 들어:
const handleDeniedPermission = async (permissionType: string) => {
const status = await Permissions.query({ name: permissionType });
if (status.state === 'denied') {
const alternatives = {
camera: 'manual photo upload',
location: 'manual address entry',
notifications: 'in-app message center'
};
showAlternativeFeature(alternatives[permissionType]);
if (status.canOpenSettings) {
offerSettingsRedirect();
}
}
};
권한 요청 타이밍
권한 요청 시기는 중요합니다. 전략적인 타이밍은 사용자 동의율을 크게 향상시킬 수 있습니다. 권한 요청 타이밍 전략에 대한 빠른 개요를 보시려면 여기를 클릭하세요.
| 권한 요청 타이밍 전략 | 권한 요청 타이밍 전략의 최적 사용 사례 |
|---|---|
| 즉시 | 특정 기능이 필요할 때 |
| 문맥에 맞춤 | 비중이 낮은 기능 |
| 첫 번째 실행 | 사용자 경험을 최적화하기 위해 필요한 기본 기능 |
| 지연 | 사용자 경험을 최적화하기 위해 나중에 사용자 여행 중에 선택적 기능 |
예를 들어, 사용자가 사진을 찍는 동작을 시작할 때 카메라 접근 권한을 요청할 수 있습니다.
const captureImage = async () => {
const userStartedCapture = true;
if (userStartedCapture) {
const granted = await permissionHandler('camera');
if (granted) {
await startCamera();
} else {
showUploadOption();
}
}
};
이와 같은 상황에 대한 요청은 50%의 승인률 향상을 달성할 수 있습니다. [2]사용자 결정이 세션 간에 저장되는 권한 상태 트래커를 유지하여 smooth한 경험을 보장합니다.
권한 처리가 완료되면 업데이트를 보안하는 데 초점을 맞추어야 합니다. 특히, OTA 배포를 위한 업데이트는 특히 중요합니다.
OTA 업데이트 보안
업데이트 중 데이터 무결성을 보장하기 위해 앱 업데이트권한이 있는 사용자만 앱을 업데이트할 수 있도록 하기 위해 OTA 업데이트 프로세스를 사용해야 합니다. 이 업데이트는 데이터 수집에 대한 제한을 우회할 수 있는 앱 code의 변경을 방지합니다.
패키지 서명 업데이트
code에 대한 비인가 변경을 방지하기 위한 중요한 단계는 패키지 서명 업데이트입니다. 다음과 같은 보안 조치를 통해 OTA 업데이트를 보호하세요:
| 보안 조치 | 어떻게 하는가 |
|---|---|
| 콘텐츠 보호 | AES 암호화 |
| 배포 보안 | 인증서 핀닝을 사용한 HTTPS |
| 업데이트 무결성 | 해시 검증 |
| 버전 안전 | 서명된 버전 번호 |
| 실패 복구 | 즉시 롤백 기능 |
Capgo 업데이트 시스템

Capgo은 Capacitor 앱의 안전한 OTA 업데이트를 위한 Capgo의 자동화된 보안 기능을 제공하여 안전한 OTA 업데이트를 간소화합니다. Capgo의 업데이트 시스템을 앱에 사용하는 방법의 예를 보겠습니다.
import { CapacitorUpdater } from '@capgo/capacitor-updater';
const secureUpdate = async () => {
try {
const update = await CapacitorUpdater.download({
version: 'latest',
validateSignature: true
});
if (update.status === 'success') {
await CapacitorUpdater.set(update);
}
} catch (error) {
await CapacitorUpdater.rollback();
}
};
업데이트가 검증되고 안전하며, 실패 시 롤백 옵션이 있는 이 접근 방식은 업데이트의 신뢰성을 보장합니다.
스토어 정책 준수
앱 스토어 업데이트를 위해 스토어 지침 준수는 필수입니다.[1][6][7]각 플랫폼은 데이터 보존 및 보안 정책에 맞게 업데이트를 확인하기 위한 특정 요구 사항을 가지고 있습니다.
| 플랫폼 | 준수 요구 사항 |
|---|---|
| iOS | __CAPGO_KEEP_0__ |
| Android | __CAPGO_KEEP_0__ |
| Both | __CAPGO_KEEP_0__ |
__CAPGO_KEEP_0__
const compliantUpdate = async () => {
const userConsent = await requestUpdateConsent();
if (userConsent) {
await CapacitorUpdater.setUpdateConfig({
type: 'assets-only',
scope: 'ui-updates' // Updates limited to UI components
});
}
};
const preventDowngrade = async (newVersion, currentVersion) => {
const versions = await CapacitorUpdater.getVersions();
if (versions.current.buildNumber > newVersion.buildNumber) {
throw new Error('Downgrade attempt detected');
}
};
Below is an example of implementing store-compliant updates:
Summary
Key Takeaways
- 사용자 데이터를 효과적으로 처리하는 데에는 다음의 핵심 전략을 결합하는 것이 포함됩니다:
- 필요한 데이터만 수집하십시오.
- 데이터 보관 기한 자동화
- 세부적인 권한 제어 설정
이러한 단계는 데이터가 수집되는 순간부터 자동으로 삭제될 때까지 준수성을 보장하기 위해 함께 작동합니다.
Implement 방법
이 전략들을 실제로 적용하려면:
- 2절에서 설명한 방법을 사용하여 데이터 흐름을 감사하세요.
- 3절에서 설명한 것과 같이 저장소 보안을 강화하세요.
- 4절에 설명된 자동 삭제 프로세스를 설정하세요.
- 5절에 설명된 권한 제어를establish하고 강제하세요.
팀이 OTA 업데이트를 관리하는 경우, Capgo는 이러한 노력과 일치하는 내장 보안 도구를 제공합니다:
For teams managing OTA updates, Capgo offers built-in security tools that align with these efforts:
- 팀이 OTA 업데이트를 관리하는 경우, __CAPGO_KEEP_0__는 이러한 노력과 일치하는 내장 보안 도구를 제공합니다: 업데이트 패키지를 보안하기 위해.
- 실시간 모니터링 잠재적인 보안 위협을 신속하게 해결하기 위해.