iOS - 데이터 저장 방법

이한솔·2023년 10월 30일
0

iOS 앱개발 🍏

목록 보기
25/49

데이터 저장 방법

iOS에는 앱에 데이터를 저장하기 위한 여러가지 방법들이 있다.
각 방법마다 사용하기 좋은 상황들이 다르기 때문에 어떤 데이터를 저장하고 싶냐에 따라 적절한 기술을 선택해야 한다.



UserDefaults

사용자가 라이트모드를 선호하는지 다크모드를 선호하는지, 매일 알림을 받고 싶은 시간, 실제로 알림을 받고 싶은지 등 사용자의 기본 설정 정보를 저장하는 데이터베이스
UserDefaults로 저장하는 모든 값은 plist에 간단한 데이터 타입(strings, numbers, dates, boolean, urls, datas 등)을 저장하도록 설계되어 plist로 디스크에 저장된다.

파일이 전체로 읽고 쓰여지기 때문에 UserDefaults를 사용해 부분적으로 변경이 있는 많은 양의 데이터를 저장하면 많은 시간을 낭비하게 된다.



Keychain

비밀번호, 신용카드 정보, 인증서, 들키기 싫은 메모처럼 안전하게 저장하고 싶은 작은 데이터를 저장하는 암호화된 데이터베이스
키체인은 디스크의 특수파일로 하드웨어로 암호화되어 있으며, low level의 API가 많다.
실제로 앱에서 키체인을 사용해야하는 경우에는, 복잡한 과정은 좋은 라이브러리를 통해 수행하는 것이 훨씬 간단하다.



FileManager

File System의 컨텐츠에 대한 인터페이스로, 앱의 파일을 읽고 쓸 수 있도록 해준다.

File System

File System이란, 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제다. 쉽게 말하면 보통 컴퓨터는 하드디스크같은 보조기억장치에 파일들을 저장하므로, 파일시스템이란 하드디스크에 있는 데이터를 쉽게 찾고 접근하기 위해 정리하는 체제라고 볼 수 있다.

여러 종류가 있지만 파일에 쉽게 접근해 찾을 수 있도록 하드 드라이브를 데이터를 저장하는 작은 유닛으로 나누고 각 유닛에 어떤 데이터가 있는지를 기억하는 방법을 가진다는 공통점이 있다. iOS에서는 APFS(Apple File System)라는 파일시스템을 사용하고 있다.

Sandbox

iOS의 파일시스템은 보안과 단일성을 위해 모든 앱을 독립된 섬들로 봐서 각 앱은 설치되면, sandbox라고 불리는 곳에 위치하고 하나의 앱은 하나의 샌드박스 내에서만 놀 수 있다. 앱 마다 별도의 파일을 생성하여 공유되지 않도록 하므로서 외부의 공격으로부터 앱이 손상된 경우, 시스템과 사용자 데이터의 피해를 최소화한다.

앱을 설치하면 installer가 sandbox 디렉토리 안에 앱을 위한 여러 Container 디렉토리를 만든다.
각 Container 디렉토리는 특정 역할을 가지고 있는데, 파일을 저장하기 위해 주로 사용하는 디렉토리들은 Data Container에 있다.

이 디렉토리와 파일들에 접근하도록 도와주는 것이 File Manager이다.
File Manager를 통해서 파일시스템과 상호작용을 할 수 있다.
파일과 디렉토리를 찾고, 만들고, 복사하고, 이동하는 데 사용한다.

디렉토리를 살펴보자!

Document : 사용자가 생성하는 콘텐츠를 저장하기에 적합하다. iCloud에도 자동으로 백업된다
Documents/Inbox : 다른 앱이 해당 앱에 파일을 열도록 요청할 때마다 시스템에 의해 생성되는 특수 폴더다. 이 폴더는 읽기 전용인데, 예를 들어 메일 프로그램의 경우 앱과 연결된 이메일 첨부 파일을 이 디렉토리에 배치한다.

Library : 이 폴더에는 사용자가 생성하지 않은 파일과 앱 실행 사이에 지속되어야 하는 파일을 넣을 수 있다. 그러나 장치에 여유 공간이 충분하지 않으면 일부 파일이 삭제될 수 있다.
Library/Caches : 이 디렉토리는 특수 폴더다. 잃어버릴 염려 없이 곧 필요할 수도 있는 파일을 저장할 수 있다. 파일의 사용을 중단하면 시스템에서 파일을 삭제한다. 앱을 더 빨리 로드하기 위해 다운로드한 이미지는 이 폴더에 있어야 한다.

tmp : 이 폴더에는 앱에 일시적으로 필요한 파일을 저장할 수 있다. 앱이 실행되지 않을 때 운영 체제에서 삭제할 수 있다.



SQLite

앱에서 쓰이는 가장 표준적인 데이터베이스다.
애플리케이션이 관계가 있는 많은 양의 데이터를 처리하는 경우 SQLite를 살펴볼 수 있다.
서버리스, 구성이 필요 없는 트랜잭션 SQL 데이터베이스 엔진으로 즉, 애플리케이션에 포함되어 있어 매우 빠르다.

데이터의 양이 많고 잘 구조화되어있는 경우에 적절하게 사용될 수 있다.
저장 기능 외에도 효율적인 검색이 가능하고 복잡한 쿼리를 작성할 수 있다.



CoreData

코어데이터는 정리해둔 글을 보고 자세히 알아보자!
CoreData



참고: 데이터 저장 방법 참고

0개의 댓글