Core Data로 데이터 지속성 관리하기: Swift 앱에서 데이터 저장 기초

작성일 :

Core Data로 데이터 지속성 관리하기: Swift 앱에서 데이터 저장 기초

Swift 앱 개발에서 중요한 기술 중 하나는 데이터를 안정적으로 저장하고 관리하는 방법입니다. 이 목표를 달성하기 위해 Apple은 Core Data라는 강력한 프레임워크를 제공합니다. 이번 글에서는 Core Data의 기초 개념을 익히고, 실제 Swift 프로젝트에 Core Data를 통합하는 방법을 단계별로 설명합니다.

Core Data란?

Core Data는 Apple의 객체 그래프 관리 및 영구 저장 프레임워크입니다. 이 프레임워크를 사용하면 데이터 모델을 쉽게 정의하고, 데이터를 영구적으로 저장하며, 복잡한 데이터 관계를 관리할 수 있습니다. Core Data는 대규모 데이터를 효과적으로 처리할 수 있도록 설계되어 있어, 데이터베이스 상호작용을 단순화하고 성능을 최적화하는 데 큰 도움을 줍니다.

Core Data 설정하기

Swift 프로젝트에 Core Data를 통합하려면 몇 가지 설정이 필요합니다. 다음은 예제 프로젝트에서 Core Data를 설정하는 단계입니다.

1. 새로운 Xcode 프로젝트 생성

먼저 Xcode에서 새로운 프로젝트를 생성합니다. 이 때 'Use Core Data' 옵션을 체크하면 기본적인 Core Data 파일이 자동으로 생성됩니다.

2. Core Data 스택 설정

Core Data 스택은 데이터를 저장하고 관리하는 기본 구성 요소입니다. NSPersistentContainer는 Core Data 스택을 설정하고 관리하는 데 도움이 됩니다. 기본적으로 AppDelegate.swift에 다음과 같이 설정되어 있습니다:

swift
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    lazy var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "MyApp")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    func saveContext() {
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }
}

데이터 모델링 하기

Core Data를 사용하려면 먼저 데이터 모델을 정의해야 합니다. 데이터 모델링은 xcdatamodeld 파일을 통해 이루어집니다. 이 파일에서는 엔티티, 속성 및 관계를 시각적으로 정의할 수 있습니다.

1. 새로운 엔티티 생성

Xcode의 데이터 모델 편집기를 열고, 새로운 엔티티를 생성합니다. 예를 들어, Person이라는 엔티티를 생성할 수 있습니다. 이 엔티티에는 name(String 타입)과 age(Int 타입) 속성을 추가할 수 있습니다.

2. NSManagedObject 서브클래스 생성

'Editor' 메뉴에서 'Create NSManagedObject Subclass...'를 선택하여 생성한 엔티티에 대한 NSManagedObject 서브클래스를 만듭니다. 그러면 Person+CoreDataClass.swiftPerson+CoreDataProperties.swift 파일이 생성됩니다.

데이터 CRUD 작업

이제 Core Data를 통해 데이터를 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)하는 방법을 배워보겠습니다.

1. 데이터 생성(Create)

데이터를 생성하려면 새로운 Person 객체를 만들어 컨텍스트에 추가한 후, 컨텍스트를 저장하면 됩니다:

swift
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let newPerson = Person(context: context)
newPerson.name = "John Doe"
newPerson.age = 30

// 데이터 저장
(UIApplication.shared.delegate as! AppDelegate).saveContext()

2. 데이터 읽기(Read)

저장된 데이터를 읽으려면 NSFetchRequest를 사용합니다. 다음은 Person 엔티티에 저장된 모든 데이터를 읽는 예제입니다:

swift
let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()

do {
    let people = try context.fetch(fetchRequest)
    for person in people {
        print("Name: \(person.name), Age: \(person.age)")
    }
} catch {
    print("Failed to fetch people: \(error)")
}

3. 데이터 업데이트(Update)

데이터를 업데이트하려면 먼저 데이터를 읽은 후, 속성을 수정하고 컨텍스트를 저장합니다:

swift
if let person = people.first {
    person.name = "Jane Doe"
    (UIApplication.shared.delegate as! AppDelegate).saveContext()
}

4. 데이터 삭제(Delete)

데이터를 삭제하려면 먼저 데이터를 읽은 다음, 해당 객체를 컨텍스트에서 삭제하고 저장합니다:

swift
if let person = people.first {
    context.delete(person)
    (UIApplication.shared.delegate as! AppDelegate).saveContext()
}

결론

이번 글에서는 Core Data의 기본 개념부터 Swift 프로젝트에서 데이터를 저장하고 관리하는 방법까지 다루었습니다. Core Data는 복잡한 데이터베이스 작업을 단순화하고, 앱 내에서 데이터 지속성을 유지하는 데 매우 유용한 도구입니다. 이를 통해 앱의 품질과 사용자 경험을 크게 향상시킬 수 있습니다.