본문 바로가기

iOS/STUDY

[iOS] Realm의 특징

개인 프로젝트로 Realm을 사용하기 위해 특징과 알아보겠습니다.

 

 

open source object database management system, initially for mobile operating systems (Android / iOS)

모바일에 특화된 오픈소스 객체 데이터베이스 관리 시스템입니다.

 

Realm 특징

  1. Realm은 NoSQL 입니다.
  2. Realm은 객체 중심 데이터베이스 입니다.    → ORM 이 필요하지 않고 개발자에게 직관적입니다.
  3. iOS와 Android 간 DB 공유가 가능합니다.
  4. 코드로 작업할 수 있습니다. → SQL과 같은 중간 쿼리 언어를 사용하지 않습니다.
  5. 메인 스레드에서 읽기/ 쓰기를 할 수 있습니다.   → 다중 쓰레드에서의 Realm 객체 관리가 어렵습니다. (쓰레드별 객체 관리 필요함)
  6. 객체를 직접 디스크에 유지합니다.    → 서드파티 스토리지 엔진을 사용하지 않습니다.
                                                          → 디스크에서 데이터를 읽거나 쓸 때 데이터를 상호 변환하지 않아도 됩니다.
  7. SQLite와 CoreData보다 작업 속도가 빠릅니다.
  8. 다양한 쿼리를 지원하지 않습니다.
  9. iOS 8 이상부터 사용이 가능합니다.

 

NoSQL

- Not Only SQL 의 약자로 데이터베이스 관리시스템을 지칭합니다.

- 여러 유형의 DB를 사용합니다.

- SQL 외에 데이터를 저장하는 방식이 있습니다.

 

 

Realm 선택

iOS의 데이터를 저장하는 방식에는

UserDefaults, CoreData, SQLite, Realm 등이 있습니다.

 

이 중에서 UserDefaults는 저번 프로젝트에서 사용했어서 제외하였고

(단일 데이터를 저장하는데 적합하다고 합니다.)

CoreData와 SQLite는 써보지 않았지만 Realm의 장점이 도드라져 보였기 때문에 Realm을 선택하였습니다.

 

CoreData를 더 알아보면 기본으로 제공되는 데이터 저장용 프레임워크로 객체 형태로 데이터를 관리할 수 있다는 장점이 있지만,

XCode를 통해서 Entity를 생성하고, 코드로 데이터를 Read, Write하는 과정이 직관적이지 않고 사용이 불편하다고 합니다.



객체 선언

import Foundation
import RealmSwift

class Dog: Object {
	@Persisted var name: String
	@Persisted var age: Int
}

class Person: Object {
	@Persisted(primaryKey: true) var _id: String
	@Persisted var name: String
  @Persisted var age: Int

  @Persisted var dogs: List<Dog>
}

 

Create

import UIKit
import RealmSwift

class ViewController: UIViewController {
    
	let realm = try! Realm()

	let dog = Dog()
	dog.name = "MAX"

	try! realm.write {
		realm.add(dog)
	}
}

 

Read

realm.objects(Dog.self)  // 반환값: Results<Repository>

 

Update

try! realm.write {
	dog.name = "Wolfie"
}

 

listener & observe object notifications

token = dog.observe { change in
    switch change {
    case .change(let properties):
        for property in properties {
            print("Property '\(property.name)' changed to '\(property.newValue!)'");
        }
    case .error(let error):
        print("An error occurred: (error)")
    case .deleted:
        print("The object was deleted.")
    }
}

 

자동 갱신되는 객체와 쿼리

let puppies = realm.objects(Dog).filter("age < 2")
puppies.count // => 아직 개가 Realm에 추가되지 않았기 때문에 0

let myDog = Dog()
myDog.name = "Rex"
myDog.age = 1

try! realm.write {
    realm.add(myDog)
}

puppies.count // => 실시간으로 1로 갱신됩니다.

// 다른 질의에서 개에 접근합니다
let puppy = realm.objects(Dog).filter("age == 1").first
try! realm.write {
    puppy.age = 3
}

// 원래 개 객체는 자동 갱신됩니다.
myDog.age // => 3
puppies.count // => 0

 

Realm 데이터베이스 확인하기

Realm Studio 설치

Realm Studio

  1. Realm 을 사용하고 있는 view controller 에서 경로를 확인

print(Realm.Configuration.defaultConfiguration.fileURL!)

file:///Users/neuli/Library/Developer/CoreSimulator/Devices/80B0AEB2-AC86-4172-8904-59B9236B269E/data/Containers/Data/Application/C5DD0570-587D-481B-925A-C64D72E616F9/Documents/default.realm

  1. Users ~ Documents 까지 복사
  2. Realm Studio 파일찾기
  3. Finder Shift + Command + G 주소 입력 후 이동
  4. .realm 파일을 studio 에 꺼내옵니다.

 

 

Realm 사용법 참고

https://jintaewoo.tistory.com/45

 

참고

https://velog.io/@dlskawns96/Swift-Realm%EC%9D%98-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[Swift] Realm의 특징과 사용법

Realm의 특징과 간단한 사용법에 대해 알아보겠습니다.

velog.io

 

https://www.mongodb.com/docs/realm/sdk/swift/