퀵 스타트 - 코틀린 SDK(Kotlin SDK)
이 페이지의 내용
이 페이지에는 코틀린 SDK (Kotlin SDK) 와 함께 Realm 을 빠르게 사용하기 위한 정보가 포함되어 있습니다. 선택 사항인 Device Sync 추가 섹션에서는 Atlas Device Sync 를 애플리케이션 에 통합하는 방법을 설명합니다.
시작하기 전에 플랫폼에 맞는 Kotlin SDK를 설치했는지 확인하세요.
참고
KMP로 빠른 시작 사용
새 Kotlin 멀티플랫폼(KMP) 템플릿 프로젝트에서 이 프로젝트를 실행하는 경우 다음 스니펫을 복사하여 commonMain
모듈의 Greeting.greeting()
메서드에 붙여넣을 수 있습니다.
객체 모델 정의
애플리케이션의 데이터 모델은 Realm에 저장된 데이터의 구조를 정의합니다. Realm 객체 모델을 사용하여 애플리케이션 코드의 Kotlin 클래스를 통해 애플리케이션의 데이터 모델을 정의할 수 있습니다.
애플리케이션의 데이터 모델을 정의하려면 애플리케이션 코드에 클래스 정의를 추가하세요. 아래 예시는 Todo 목록 앱의 Todo 항목을 나타내는 'Item' 모델을 만드는 방법을 보여줍니다.
class Item() : RealmObject { var _id: ObjectId = ObjectId() var isComplete: Boolean = false var summary: String = "" var owner_id: String = "" constructor(ownerId: String = "") : this() { owner_id = ownerId } }
Realm 열기
기본 매개변수를 사용하여 영역을 열려면 RealmConfiguration.create() 를 사용합니다. 구성을 Realm 팩토리 생성자 에 전달하여 해당 영역의 인스턴스를 생성합니다.
val config = RealmConfiguration.create(schema = setOf(Item::class)) val realm: Realm = Realm.open(config)
열려는 RealmConfiguration 의 세부 사항을 제어하는 방법에 대한 자세한 내용(예: 이름, 위치, 스키마 버전) 은 Realm 열기 & 닫기를 참조하세요.
객체 만들기, 읽기, 업데이트 및 삭제
일단 열리면 쓰기 트랜잭션(write transaction) 블록의 Realm 내에 객체를 생성할 수 있습니다.
새 Item
을 생성하려면 Item
클래스의 인스턴스를 인스턴스화하고 이를 쓰기 트랜잭션(write transaction) 블록의 영역에 추가합니다.
realm.writeBlocking { copyToRealm(Item().apply { summary = "Do the laundry" isComplete = false }) }
query.find()를 사용하여 영역에 있는 모든 Todo 항목의 컬렉션을 검색할 수 있습니다.
// all items in the realm val items: RealmResults<Item> = realm.query<Item>().find()
컬렉션을 필터링하여 보다 구체적인 객체 컬렉션을 검색할 수도 있습니다:
// items in the realm whose name begins with the letter 'D' val itemsThatBeginWIthD: RealmResults<Item> = realm.query<Item>("summary BEGINSWITH $0", "D") .find() // todo items that have not been completed yet val incompleteItems: RealmResults<Item> = realm.query<Item>("isComplete == false") .find()
문자열 Realm 쿼리에 대한 자세한 내용은 필터 데이터에서 확인할 수 있습니다.
Todo 항목을 수정하려면 쓰기 트랜잭션(write transaction) 블록에서 항목의 속성을 업데이트합니다.
// change the first item with open status to complete to show that the todo item has been done realm.writeBlocking { findLatest(incompleteItems[0])?.isComplete = true }
마지막으로 쓰기 트랜잭션(write transaction) 블록에서 mutableRealm.delete()를 호출하여 Todo 항목을 삭제할 수 있습니다.
// delete the first item in the realm realm.writeBlocking { val writeTransactionItems = query<Item>().find() delete(writeTransactionItems.first()) }
변화를 주시하세요
observe
메서드를 사용하여 영역, 컬렉션 또는 객체의 변경 사항을 모니터링할 수 있습니다.
중요
서버리스 제한 사항
데이터 원본이 Atlas 서버리스 인스턴스인 경우 변경 사항을 모니터링할 수 없습니다. MongoDB 서버리스는 현재 변경 스트림을 지원하지 않습니다. 변경 스트림은 감시되는 컬렉션에서 변경 사항을 수신하는 데 사용됩니다.
다음 예시에서는 모든 Item
객체의 변경 내용을 수신 대기합니다.
// flow.collect() is blocking -- run it in a background context val job = CoroutineScope(Dispatchers.Default).launch { // create a Flow from the Item collection, then add a listener to the Flow val itemsFlow = items.asFlow() itemsFlow.collect { changes: ResultsChange<Item> -> when (changes) { // UpdatedResults means this change represents an update/insert/delete operation is UpdatedResults -> { changes.insertions // indexes of inserted objects changes.insertionRanges // ranges of inserted objects changes.changes // indexes of modified objects changes.changeRanges // ranges of modified objects changes.deletions // indexes of deleted objects changes.deletionRanges // ranges of deleted objects changes.list // the full collection of objects } else -> { // types other than UpdatedResults are not changes -- ignore them } } } }
나중에 관찰이 끝나면 작업을 취소하여 코루틴을 취소합니다:
job.cancel() // cancel the coroutine containing the listener
Realm 닫기
영역과 모든 기본 리소스를 닫으려면 realm.close() 를 호출합니다. close()
메서드는 영역의 모든 쓰기 트랜잭션(write transaction)이 완료될 때까지 차단합니다.
realm.close()
Device Sync 추가(선택 사항)
이 섹션에서는 익명 사용자로 인증하고 Flexible Sync 영역을 열어 기기 간 데이터 동기화를 시작하는 방법을 설명합니다.
전제 조건
이 섹션의 코드 스니펫에는 다음이 필요합니다.
Atlas App Services UI에서 익명 인증 활성화
개발 모드 를 켜고 섹션의 필드로Flexible Sync를 활성화 합니다.
owner_id
Queryable Fields
앱 초기화
인증 및 동기화와 같은 App Services 기능을 사용하려면 앱 ID를 사용하여 App Services 앱에 액세스합니다. App Services UI에서 앱 ID 찾기를 수행할 수 있습니다.
val app = App.create(YOUR_APP_ID)
사용자 인증
사용자를 인증하고 로그인하려면 App.login 을 호출합니다. 익명 인증 이 활성화되면 사용자는 식별 정보를 제공하지 않고도 앱에 즉시 로그인할 수 있습니다.
val credentials = Credentials.anonymous() val user = app.login(credentials)
동기화된 Realm 열기
Atlas App Services 앱을 초기화하고, 사용자를 인증하고, 객체 모델을 정의한 후에는 SyncConfiguration을 만들 수 있습니다.
위 의 Realm 열기 섹션에 따라 로컬 Realm을 연 경우 RealmConfiguration 을 아래 설명된 SyncConfiguration
로 바꿉니다.
인증된 사용자와 Item
클래스를 SyncConfiguration.Builder 함수에 전달하여 Flexible Sync 구성을 만듭니다.
중요
초기 구독
영역에서 읽거나 영역에 쓰려면 먼저 구독이 하나 이상 필요합니다. initialSubscriptions 를 사용하여 Realm 파일을 처음 열 때 설정한 초기 구독을 정의합니다. 구독하려는 쿼리와 구독의 이름을 add() 함수에 전달합니다.
아래 예시에서는 모든 Item
객체가 포함된 'User's Items'이라는 구독을 지정합니다.
// create a SyncConfiguration val config = SyncConfiguration.Builder( user, setOf(Item::class) ) // the SyncConfiguration defaults to Flexible Sync, if a Partition is not specified .initialSubscriptions { realm -> add( realm.query<Item>( "owner_id == $0", // owner_id == the logged in user user.id ), "User's Items" ) } .build() val realm = Realm.open(config)
다음: 템플릿 앱 및 튜토리얼 확인
템플릿 앱 을 확인하여 Realm Kotlin SDK로 코딩을 빠르게 시작할 수 있는 또 다른 방법을 실험해 보세요. android.kotlin.todo.flex
레이블이 지정된 Kotlin SDK 템플릿은 Realm 및 Atlas Device Sync를 사용자 지정 가능한 Android 앱에 통합하는 사전 제작 애플리케이션입니다.
또는 안내된 환경에 관심이 있는 경우 템플릿 앱에서 확장되는 Kotlin SDK과 함께 사용하는 Android 튜토리얼을 확인하세요.