💡 UserDefaults
앱을 실행하는 동안에 키-값 쌍으로 데이터를 저장하는 기본 데이터베이스 인터페이스이다.
애플에서 기본으로 제공하는 저장소로 딕셔너리와 비슷한 구조를 가지고 있다.
런타임 시점에 기본 데이터베이스가 생성되고 .plist 파일에 저장이 된다.
plist 파일은 Sandbox 내에 저장되기 때문에 앱을 꺼도 데이터가 유지되고, 앱을 삭제한 경우에만 데이터가 제거가 된다.
UserDefaults를 사용할 때는 대용량 데이터나 사용자 정보와 같은 데이터보다는
자동로그인 여부, 알림 설정 여부, 인앱 결제 여부, 간단한 사용자 기본 설정 등과 같은 단일 데이터를 저장한다.
💡 App Sandbox
✅ Sandbox란?
App Sandbox는 보호된 영역 안에서 프로그램을 작동시키는 보안 모델이다.
커널 레벨에서 앱 데이터 접근을 제한하는 기술로 iOS 앱들은 sandbox 모델을 따른다.
App Sandbox는 파일, 네트워크 연결 및 하드웨어 기능에 대한 앱의 액세스를 제한하여 외부 공격이 발생하여 앱이 손상된 경우 시스템과 사용자의 데이터 피해를 최소화하여 보호한다.
앱마다 별도의 파일을 생성하여 다른 앱 간에 데이터가 공유되지 않도록 하고, 앱 내에서 데이터에 접근해야할 때 접근 권한을 얻는 방식을 사용하여 최소한 사용자가 허용하지 않은 부분의 피해를 막을 수 있도록 한다.
✅ Sandbox의 적용
Sandbox를 적용하지 않으면 앱에서 모든 사용자에 대한 데이터에 접근할 수 있게 되어 보안에 허점이 발생하게 된다.
앱을 사용할 때 '앱을 사용하는 동안 데이터 접근 허용'관련 Alert창이 띄워 sandbox에 대한 접근 권한을 요청한다.
=> 앱이 어떤 데이터나 시스템 리소스에 마음대로 접근하는 것이 아니라 개발자 또는 사용자에게 접근 권한을 확인 받은 영역 만큼만 접근하는 것이다.
이러한 기술이 iOS의 보안 기술이 좋다고 말하는 이유이다.
✅ App Sandbox의 원칙
프로젝트 정의에서 명시적으로 요청되지 않은 리소스에 대한 접근은 런타임 시 시스템에 의해 거절된다.
AppStore에 출시하는 앱은 App Sandbox 기술이 적용되어야하고, App Sandbox가 적용된 앱은 반드시 명시적으로 어떠한 리소스에 어떤 목적으로 접근하려는 것인지 알려야 한다.
리소스 목록
- 하드웨어 (카메라, 마이크, 프린터)
- 네트워크 연결 요청 (요청, 응답)
- 앱 데이터 (캘린더, 연락처, 위치)
- 유저 데이터 (Downloads, User Selected Files)
✅ App Sandbox의 구조
사용자가 직접적으로 파일 시스템에 접근하는 것을 제한한다. 사용자는 파일이 어디에 저장되는지 고려할 필요가 없도록 한다.
앱이 처음 설치될 때 앱의 Sandbox Directory 안에 container directory를 만든다.
각 앱은 하나의 sandbox 내에 위치하는 것을 볼 수 있다. 각각의 앱이 sandbox에 의해 분리되어 있기 때문에 앱을 사용할 때는 해당 앱의 데이터에만 접근할 수 있다.
앱을 설치하는 시점에 앱은 각각의 Sandbox Directory에 위치하며, 이 디렉토리는 각 앱의 home directory가 된다.
앱과 시스템의 상호작용은 앱의 Sandbox Directory 내에 위치한 directory로 제한된다.
Sandbox 내에는 여러 역할을 가진 Container Directory가 있다.
Bundle Container
앱의 번들(실행파일)을 보유하고 있다.
Data Container
Data Container 내에 Documents, Library, Temp, System Data 디렉터리를 가지고 있다.
- Documents: 앱을 통해 생성된 문서나 데이터를 저장한다. 개발자와 사용자 모두가 접근할 수 있고, 개발자가 원한다면 특정 부분에서 접근 제한을 설정할 수 있다.
- Library: 사용자 데이터 파일과 임시 파일을 제외한 모든 파일을 관리한다. 외부로 노출되면 안되는 파일을 보관한다. *Library에 UserDefaults 데이터도 저장된다. *
- temp: 임시 파일 저장 공간
iCloud Container
런타임 시 접근을 요청할 수 있는 추가 컨테이너이다.
UserDefaults 데이터는 어디에 저장될까? 라는 질문으로 이것저것 공부하게 되었다. UserDefaults 데이터는 Sandbox 내에 Data Container 영역에 저장된다는 것을 알게되었다.
iOS 앱에서 데이터를 저장하는 방식이 여러가지 있다고 하는데 다른 방식에 대해서도 공부해봐야겠다.
'iOS > 💻 iOS Study' 카테고리의 다른 글
[Swift] DI 의존성 주입 (1) | 2023.12.19 |
---|---|
View의 Drawing Cycle (0) | 2023.11.11 |
[iOS/Swift] MapKit - 위치 권한 설정을 구현해보자! (0) | 2023.10.01 |
iOS 13 이후의 앱의 라이프 사이클 & available (0) | 2023.07.30 |
Navigation Bar - iOS 버전에 따른 차이 (0) | 2023.07.30 |