Skip to content

[기술논의] 로컬 DB 비교 분석 및 결정

박효준 edited this page Nov 14, 2024 · 1 revision

문제 상황

우리 앱은 처음에 서버가 없고, 로컬 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는 너무 최신에 나와서 러닝커브가 높을 것으로 판단
    • 개발자가 사용하기 쉬울 수록(= 프로퍼티 래퍼) 추상화가 더 되어서 학습에 어려울 것으로 판단
    • 레퍼런스가 부족할 것도 염두에 뒀음
  • CoreDataFileManager 두 개를 사용하는 것으로 판단
    • 용량이 큰 멀티미디어 파일의 경우 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)

Clone this wiki locally