[ios] Core Data 성능 최적화

Core Data는 iOS 애플리케이션에서 데이터를 관리하기 위한 강력한 프레임워크입니다. 그러나 데이터가 많아지면 성능이 저하될 수 있습니다. 이러한 상황에서 Core Data의 성능을 최적화하는 방법을 살펴보겠습니다.

1. Fetch Request 최적화

Fetch Request는 데이터를 읽어오는데 시간이 많이 소요될 수 있는 작업입니다. 이를 개선하기 위해 다음 단계를 수행할 수 있습니다:

let fetchRequest: NSFetchRequest<NSManagedObject> = MyEntity.fetchRequest()
fetchRequest.fetchBatchSize = 20
fetchRequest.returnsObjectsAsFaults = false

fetchBatchSize 는 한 번에 가져올 데이터의 양을 지정합니다. 여기서 20은 예시일 뿐이며, 적절한 크기를 선택해야 합니다. returnsObjectsAsFaults 는 객체를 가져올 때 가능하면 무게(메모리)로 가져오는 옵션입니다.

2. 비동기 처리

데이터가 많은 경우, Core Data 작업이 UI를 차단할 수 있습니다. 비동기 처리를 사용하여 백그라운드에서 작업을 수행하고, UI의 응답성을 유지할 수 있습니다.

let privateContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
privateContext.perform {
    // 비동기로 작업을 수행
    // 작업 완료 후 UI 업데이트는 메인 큐에서 수행
}

3. 인덱스 사용

Core Data 속성에 인덱스를 추가하여 데이터베이스의 검색 속도를 향상시킬 수 있습니다. 예를 들어, NSFetchIndexDescription를 사용하여 인덱스를 추가할 수 있습니다.

let index = NSFetchIndexDescription(name: "MyIndex")
index.elements = [NSFetchIndexElementDescription(property: "myProperty", collationType: .binary)]
fetchRequest.propertiesToFetch = ["myProperty"]
fetchRequest.affectedStores = [myStore]

4. 관계 로딩 최적화

Core Data는 관계형 데이터베이스를 지원하므로, 관계를 불러오는데 시간이 소요될 수 있습니다. 관계 로딩을 최적화하기 위해 relationshipKeyPathsForPrefetching 속성을 사용할 수 있습니다.

fetchRequest.relationshipKeyPathsForPrefetching = ["myRelationship"]

Core Data의 성능 최적화는 데이터 양이 증가할 수록 중요해집니다. 위에서 소개한 방법들을 활용하여 애플리케이션의 성능을 향상시킬 수 있습니다.

참고 문헌