iOS 개발일기

[iOS] Realm 사용법 본문

iOS

[iOS] Realm 사용법

맨날 까먹으니 적어두자 2024. 11. 24. 14:54

Realm 이란

모바일 환경에 특화되어 있고 No-SQL이며 디스크에 JSON 형태로 데이터를 저장하여 처리속도가 빠르다는 장점이 있다. 

 

 

Realm을 선택한 이유

현재까지 iOS 내에서 Realm, SQLite, FMDB와 같은 데이터베이스를 사용해 보았습니다. ( + CoreData )

(초기에는 FMDB를 이용해서 데이터베이스를 관리했었는데 SQLite를 Swift 환경에서 사용하기 쉽도록 만들어진 라이브러리라 그런지 기본 원리는 같아도 확실히 편의성에서는 SQLite보다 FMDB가 훨씬 좋았습니다.)

 

Realm은 비교적 최근에 사용하였는데, 이번 새로운 프로젝트에 내부 데이터베이스에서 대용량 데이터 관리가 필요하여 빠른 처리 속도를 보장(모바일에 특화된 No-SQL 데이터베이스이기 때문)할 수 있는 Realm을 선택하게 되었다. 

주관적으로는 일단 참고할 문서나 자료가 다른 내부 데이터베이스들에 많아서 학습하기 편리하다는 점과 Codable을 사용해서 데이터 변환에도 수월하다고 생각된다.

 

 

Realm 사용법

기본적인 사용법들에 대해서는 공식 홈페이지를 참고하였습니다.

 

Swift용 Atlas Device SDK - Atlas Device SDK

Swift SDK는 SwiftUI로 더 쉽게 작업할 수 있도록 설계된 속성 래퍼 및 편의 기능을 제공합니다. 예를 들어 일반적인 SwiftUI 패턴을 보여주는 코드 보기는 SwiftUI 문서를 확인하세요. SwiftUI 속성 래퍼가

www.mongodb.com

 

Entity

class Person: Object {

    //기본키 지정
    @Persisted(primaryKey: true)
    var id: String = UUID().uuidString
    
    @Persisted var name: String = ""
    @Persisted var age: Int = 0

    override init() {
        super.init()
    }
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

 

 

CRUD

기본적으로 Realm CRUD는 반드시 쓰기 트랜잭션(write transaction) Block 내에서  실행되어야 합니다.

//데이터베이스에 접근하기 위해 객체 생성
let realm = try! Realm()


//객체 생성 
let person = Person(name: "hoon", age: 20)


//데이터베이스에 추가
try! realm.write {
    realm.add(person)
}


//모든 객체 읽기
let persons = realm.objects(Person.self)


//정렬
let sorted = realm.objects(Person.self).sorted(byKeyPath: "name", ascending: false)


//조건을 통한 필터
let hoon = realm.objects(Person.self).where { $0.name == "hoon" }.first
//또는
let hoon = realm.objects(Person.self).where { $0.name.equals("hoon") }.first


//갱신
let person = persons[0]

try! realm.wirte { 
    //트랜잭션 내에서 변경하지 않을 경우 에러 발생
    person.age = 24
}
//또는
try! realm.write {
    let newPerson = Person(name: "hoon", age: 25)
    
    //기본키를 조회하여 객체가 존재할 경우 업데이트
    realm.add(newPerson, update: .modified)
}


//삭제
let delete = persons[0]

try! realm.write {
    realm.delete(delete)
}

 

 

스레드 사용 시 주의

 

https://www.mongodb.com/ko-kr/docs/atlas/device-sdks/sdk/swift/crud/threading/

 

스레딩 - Swift SDK - Atlas Device SDK

Atlas Device SDK는 더 이상 사용되지 않습니다. 자세한 내용은 지원 중단 페이지 를 참조하세요.iOS 및 tvOS 앱을 빠르고 응답성이 뛰어나게 만들려면 시각 자료를 배치하고 사용자 상호작용을 처리하

www.mongodb.com

 

'iOS' 카테고리의 다른 글

[iOS] 오픈소스 라이선스 표시 및 라이브러리  (0) 2024.12.04
[iOS] SwiftGen 사용법  (1) 2024.10.20