Docs Menu
Docs Home
/ /
Atlas Device SDK

퀵 스타트 - 코틀린 SDK(Kotlin SDK)

이 페이지의 내용

  • 객체 모델 정의
  • Realm 열기
  • 객체 만들기, 읽기, 업데이트 및 삭제
  • 변화를 주시하세요
  • Realm 닫기
  • Device Sync 추가(선택 사항)
  • 전제 조건
  • 앱 초기화
  • 사용자 인증
  • 동기화된 Realm 열기
  • 다음: 템플릿 앱 및 튜토리얼 확인

이 페이지에는 코틀린 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 {
@PrimaryKey
var _id: ObjectId = ObjectId()
var isComplete: Boolean = false
var summary: String = ""
var owner_id: String = ""
constructor(ownerId: String = "") : this() {
owner_id = ownerId
}
}

기본 매개변수를 사용하여 영역을 열려면 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.close() 를 호출합니다. close() 메서드는 영역의 모든 쓰기 트랜잭션(write transaction)이 완료될 때까지 차단합니다.

realm.close()

이 섹션에서는 익명 사용자로 인증하고 Flexible Sync 영역을 열어 기기 간 데이터 동기화를 시작하는 방법을 설명합니다.

이 섹션의 코드 스니펫에는 다음이 필요합니다.

인증 및 동기화와 같은 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)

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 튜토리얼을 확인하세요.

다음

Atlas Device SDK Docs에 오신 것을 환영합니다