문제 상황
우리 앱은 처음에 서버가 없고, 로컬 DB를 사용한다.
멀티미디어를 어떻게 어떤 DB로 관리할 지에 대한 논의를 작성했다.
모델을 만들고나서, 이 모델들에 대한 데이터들을 어떻게 저장해야할지에 대해 논의가 필요했다.
- 영상, 사진, 음성 등 용량이 큰 데이터들을 저장해야 함
- 텍스트도 저장해야 함
우리가 고민한 기술들은 아래와 같다.
UserDefaults
vs CoreData
vs SwiftData
vs FileManager
(Realm
도 고려를 했으나, 요구사항에 맞추어 서드파티 없이 해결하기로 하였다.)
문제 해결
우리의 상황에 맞추어서 각각의 기술들이 갖는 이점을 분석하기로 하였다.
UserDefaults
- 용량에 제한이 존재
- 간단한 String 기반 Key-Value쌍을 저장하기에 적합
- 주로 사용자 정보를 저장하는 데에 사용
- 대용량 데이터를 저장하기에는 한계가 명확
→ 온보딩에서 입력받은 기록소 이름과 같은 String을 저장하기로 결정
CoreData & SwiftData

- 데이터를 로컬/iCloud에 저장하기 쉽게 해주는 프레임워크
- 구조화된 방식으로 데이터를 저장하기에 적합
- In-memory 방식으로 동작 가능
- Swift기반으로 DB처럼 쓸 수 있음 (DB는 아님! ORM(Object Relational Mapping) 프레임워크)
- 그러나 UserDefault(보다는 낫지만)처럼 대용량의 데이터를 처리하기에는 부적합
→ 대용량이 아닌 데이터의 경우, CoreData 사용하는 것으로 결정
FileManager
- 파일 / 디렉토리를 생성, 수정, 이동, 삭제할 수 있게 도와줌
- 바이너리 데이터(구조화 되지 않은 데이터)를 다루는 데에 적합
- 위의 두 방법보다 용량이 큰 데이터를 저장하기 수월함
→ 상대적으로 용량이 큰 미디어 데이터의 경우, FileManger를 사용하는 것으로 결정
결론
- UserDefaults, KeyChain은 일단 탈락
- SwiftData는 너무 최신에 나와서 러닝커브가 높을 것으로 판단
- 개발자가 사용하기 쉬울 수록(= 프로퍼티 래퍼) 추상화가 더 되어서 학습에 어려울 것으로 판단
- 레퍼런스가 부족할 것도 염두에 뒀음
CoreData
와FileManager
두 개를 사용하는 것으로 판단- 용량이 큰 멀티미디어 파일의 경우 FileManager
- 적당한 경우(메타데이터, 구조화된 데이터) CoreData
참조 링크
UserDefaults, FileManger, CoreData에대한 간단한 설명
UserDefaults, FileManger, CoreData에대한 간단한 설명
UserDefaults는 앱 시작시 key-value 쌍을 영구적으로 저장하는 사용자의 기본 데이터베이스에 대한 인터페이스 입니다.런타임에 UserDefaults Object를 사용하여 default DB로부터 앱의 default value를 읽습니다
velog.io
'iOS' 카테고리의 다른 글
DIContainer 사용 시 Actor Isolation 문제 해결하기 (0) | 2024.12.05 |
---|---|
드래그 앤 드랍 시 카테고리가 변경되어도 일관성 유지하기 (0) | 2024.12.03 |
로컬 DB 결정 논의 (CoreData ~ FileManager) (1) | 2024.12.03 |
프로젝트 기술 스택 결정: UIKit vs SwiftUI (2) | 2024.11.14 |