-
Notifications
You must be signed in to change notification settings - Fork 1
[기술논의] 로컬 DB 비교 분석 및 결정
박효준 edited this page Nov 14, 2024
·
1 revision
우리 앱은 처음에 서버가 없고, 로컬 DB를 사용한다.
멀티미디어를 어떻게 어떤 DB로 관리할 지에 대한 논의를 작성했다.
모델을 만들고나서, 이 모델들에 대한 데이터들을 어떻게 저장해야할지에 대해 논의가 필요했다.
- 영상, 사진, 음성 등 용량이 큰 데이터들을 저장해야 함
- 텍스트도 저장해야 함
우리가 고민한 기술들은 아래와 같다.
UserDefaults
vs CoreData
vs SwiftData
vs FileManager
(Realm
도 고려를 했으나, 요구사항에 맞추어 서드파티 없이 해결하기로 하였다.)
우리의 상황에 맞추어서 각각의 기술들이 갖는 이점을 분석하기로 하였다.
- 용량에 제한이 존재
- 간단한 String 기반 Key-Value쌍을 저장하기에 적합
- 주로 사용자 정보를 저장하는 데에 사용
- 대용량 데이터를 저장하기에는 한계가 명확
→ 온보딩에서 입력받은 기록소 이름과 같은 String을 저장하기로 결정
- 데이터를 로컬/iCloud에 저장하기 쉽게 해주는 프레임워크
- 구조화된 방식으로 데이터를 저장하기에 적합
- In-memory 방식으로 동작 가능
- Swift기반으로 DB처럼 쓸 수 있음 (DB는 아님! ORM(Object Relational Mapping) 프레임워크)
- 그러나 UserDefault(보다는 낫지만)처럼 대용량의 데이터를 처리하기에는 부적합
→ 대용량이 아닌 데이터의 경우, CoreData 사용하는 것으로 결정
- 파일 / 디렉토리를 생성, 수정, 이동, 삭제할 수 있게 도와줌
- 바이너리 데이터(구조화 되지 않은 데이터)를 다루는 데에 적합
- 위의 두 방법보다 용량이 큰 데이터를 저장하기 수월함
→ 상대적으로 용량이 큰 미디어 데이터의 경우, FileManger를 사용하는 것으로 결정
- UserDefaults, KeyChain은 일단 탈락
- SwiftData는 너무 최신에 나와서 러닝커브가 높을 것으로 판단
- 개발자가 사용하기 쉬울 수록(= 프로퍼티 래퍼) 추상화가 더 되어서 학습에 어려울 것으로 판단
- 레퍼런스가 부족할 것도 염두에 뒀음
-
CoreData
와FileManager
두 개를 사용하는 것으로 판단- 용량이 큰 멀티미디어 파일의 경우 FileManager
- 적당한 경우(메타데이터, 구조화된 데이터) CoreData
[UserDefaults, FileManger, CoreData에대한 간단한 설명](https://velog.io/@rnfxl92/UserDefaults-FileManger-CoreData%EC%97%90%EB%8C%80%ED%95%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-%EC%84%A4%EB%AA%85)