샘성의 iOS 개발 일지

앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가? 본문

iOS/면접

앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가?

SamusesApple 2023. 6. 3. 17:39
728x90

1. 정답 

   데이터 베이스

 

 

2. 사용해본 데이터베이스

  2-1. UserDefaults

   유저에게 기본으로 제공되는 싱글톤 페턴으로 설계된 데이터베이스.

   Key-Value 쌍으로 데이터를 저장한다. 따라서 하나의 키에 하나의 값만 저장되기에 사용자 기본 설정, 단일 데이터 저장에 적합하다.

 

   Linky 앱 제작할 때 사용해보았다. Share Extension상에서 Realm을 사용할 수 없어 기본적으로 제공되는 UserDefaults에 공유된 URL을 [String] 타입의 값으로 저장 후, 앱이 In-Active 상태에 들어왔을 때 UserDefaults에서 해당 데이터를 Realm으로 전달 +  해당 키값 초기화 하는 방식으로 사용한 경험이 있다.

 

  2-2. Realm

   무료 오픈소스로 제공되는 모바일에 최적화된 데이터베이스 라이브러리. (https://realm.io/)

SQLite, CoreData보다 속도가 빠르다는 장점이 있지만, 용량이 크다는 단점이 있다. (GitHub에 Realm import한 후에 해당 프로젝트 commit 하면... 용량초과 뜬다...)

   메인쓰레드에서 데이터를 읽고 쓸 수 있어 편리하고 데이터를 CRUD 하는 코드가 단순하며 저장한 데이터의 용량과 관계없이 일정한 속도와 성능을 유지한다는 장점 또한 갖고있다.

 

  Realm은 Linky 앱 제작할 때 유저가 저장한 URL, 제목, 폴더 등을 저장하는 주요 데이터베이스로 사용했다. Realm Studio를 통해 저장된 데이터를 실시간으로 한눈에 볼 수 있어 테스트하기에도 매우 편리했다. 대신, 위에서 언급했다시피 소스파일 용량이 커서 깃허브에 commit하려면 Git LFS를 다운받아 사용해야한다는 불편함이 있었다.

 

  2-3. Firebase Database

  Google Cloud Platform에서 제공하는 데이터베이스로 JSON 형식으로 데이터를 저장한다.

  1.   Firestore :
    문서 기반의 모델을 제공하며 데이터는 컬렉션과 문서 형태로 저장된다.
    모바일, 웹 및 서버 어플리케이션을 위한 데이터 저장 및 실시간 데이터 동기화 기능 제공
    백앤드 인프라를 자동으로 관리한다는 편의성을 갖고있다.

  2. Real-time Database :
    클라우드 호스팅 NoSQL 데이터베이스로, JSON 트리 형태의 구조를 갖고 있다. 각각의 데이터는 고유한 문자열 형태 경로를 갖고 있으며 해당 경로를 이용하여 데이터를 읽고 쓸 수 있다.
    지연 시간이 짧아 실시간으로 동기화 해야하는 앱에 최적화된 데이터베이스 (메신저).
    여러 사용자가 하나의 데이터에 접근하여 읽고 쓸 수 있다.
    오프라인 상태 지원 (업데이트 상황 생길 시, 온라인 되면 동기화 됨)

 

  +) CoreData (객체 관리를 위한 프레임워크)

   CoreData는 사실 데이터베이스는 아니고 앱의 모델 계층이자 데이터베이스 기능을 가진 애플에서 만든 객체 관리(메모리에 올라간 객체들간의 관계를 관리하는) 프레임워크다.

  앱의 모델을 Entity로 설정하고, 해당 Entity에 들어갈 propertey를 Attributes로 생성하고 관리한다. 

  CoreData는 다중 쓰레드 환경에서 안전하게 작동하도록 설계되지 않았기에 쓰레드 세이프하지 않다는 단점이 있다. (동시에 여러개의 쓰레드에서 동시에 Entity에 접근한 경우 메모리 누수 발생 가능성 있음 등)

 

  

 

3. 사용해보지 않은 데이터베이스

  3-1. SQLite

   C언어로 작성된 데이터베이스 오픈소스이다. Swift에서는 내장된 라이브러리로 별도의 설치 없이 사용할 수 있다.

SQLite는 서버가 필요 없는 관계형 데이터베이스 관리 시스템이다. SQLite 데이터베이스는 단일 파일로 저장되며, 이 파일에 모든 테이블, 스키마, 인덱스 및 데이터가 포함되기에 개발자가 사용하고 배포하기에 간편하다.

 

  작은 용량과 가벼운 성능이 장점이고 크로스플랫폼이 가능하다는 장점 또한 갖고있다. 하지만, 다른 데이터베이스 시스템들에 비해 간단한 형태의 데이터(문자열, 정수, 날짜, 시간 등)만 지원된다는 단점이 있다.

 

 

728x90