[swift] 코어 데이터 성능 최적화

코어 데이터(Core Data)는 iOS 및 macOS 애플리케이션에서 데이터를 관리하는 프레임워크로, 대량의 데이터를 효과적으로 저장, 검색 및 조작할 수 있게 해줍니다. 그러나 대규모의 데이터 작업을 수행할 때 성능 저하가 발생할 수 있습니다. 이번 글에서는 코어 데이터 성능을 최적화하는 방법에 대해 알아보겠습니다.

1. fetchBatchSize 설정

fetchBatchSize는 코어 데이터에서 한 번에 가져올 데이터의 양을 정하는 속성입니다. 기본값은 0으로 설정되어 있으며, 이는 한 번에 모든 데이터를 가져옴을 의미합니다. 대규모의 데이터를 다룰 때는 한 번에 모든 데이터를 가져오는 것보다 적절한 양으로 나누어 가져오는 것이 성능에 도움이 됩니다.

let fetchRequest: NSFetchRequest<Entity> = Entity.fetchRequest()
fetchRequest.fetchBatchSize = 50 // 한 번에 50개의 데이터 가져오기

// Fetch 요청 수행
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
try? fetchedResultsController.performFetch()

2. faulting 기능 사용

코어 데이터는 데이터를 가져올 때 메모리를 효율적으로 사용하기 위해 faulting 기능을 제공합니다. faulting은 객체가 사용되기 전까지는 데이터를 메모리에 로드하지 않는 것을 의미합니다. 필요한 데이터에 접근할 때만 실제로 데이터를 로드하여 메모리를 절약할 수 있습니다.

let object = context.object(with: objectID)
// 필요한 데이터에 접근할 때 faulting이 발생하며 데이터 로드

3. 비동기 작업 사용

대규모의 데이터 작업을 수행할 때는 작업을 비동기로 처리하여 애플리케이션의 응답성을 향상시킬 수 있습니다. GCD(Grand Central Dispatch)를 사용하여 비동기 작업을 처리할 수 있습니다.

let backgroundContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
backgroundContext.perform {
    // 비동기 작업 수행
}

4. 인덱싱 설정

코어 데이터의 엔티티에 인덱스를 설정하여 쿼리 성능을 향상시킬 수 있습니다. 데이터베이스 인덱스와 유사한 개념으로, 자주 검색되는 속성에 대해 인덱싱을 설정하면 쿼리 성능이 향상됩니다.

let indexDescriptor = NSFetchIndexDescription(name: "index_name")
indexDescriptor.elements = ["property1", "property2"] // 인덱스로 설정할 속성들

let entity = NSEntityDescription.entity(forEntityName: "Entity", in: context)
entity.indexes = [indexDescriptor]

5. 데이터의 변경 단위 조절

코어 데이터의 변경 단위를 적절하게 조절하여 성능을 향상시킬 수 있습니다. 변경 단위를 작게 설정하면 여러 개의 작은 변경 사항을 수행하게 되므로 성능이 향상됩니다.

context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
context.undoManager = nil // Undo 관련 기능 사용하지 않음

context.processPendingChanges() // 변경 사항 적용

결론

코어 데이터는 대용량의 데이터를 효과적으로 관리하는 데 유용한 프레임워크입니다. 이번 글에서는 코어 데이터의 성능을 최적화하는 기법에 대해 알아보았습니다. fetchBatchSize 설정, faulting 기능 사용, 비동기 작업, 인덱싱 설정, 데이터 변경 단위 조절 등을 통해 코어 데이터의 성능을 향상시킬 수 있습니다. 대규모의 데이터를 처리할 때는 이러한 최적화 기법을 참고하여 효율적인 애플리케이션을 개발해보세요.