[swift] Swift 데이터베이스 연동 방법
Swift 언어를 사용하여 iOS 앱을 개발하다보면 데이터베이스 연동이 필요한 경우가 많습니다. 이번 포스트에서는 Swift에서 데이터베이스를 어떻게 연동하는지에 대해 알아보겠습니다.
1. 데이터베이스 선택
Swift에서는 다양한 데이터베이스를 사용할 수 있습니다. 일반적으로 사용되는 데이터베이스 중 가장 많이 사용되는 것은 SQLite, Core Data, Realm 등이 있습니다. 각 데이터베이스는 장단점이 있으므로 프로젝트의 요구 사항에 맞게 선택해야 합니다.
2. 데이터베이스 라이브러리 설치
선택한 데이터베이스에 맞는 라이브러리를 설치해야 합니다. Cocoapods나 Swift Package Manager를 사용하여 라이브러리를 프로젝트에 추가할 수 있습니다. 각 데이터베이스 라이브러리의 공식 문서를 참조하여 설치 방법을 확인하세요.
3. 데이터베이스 연결 및 설정
설치된 라이브러리를 사용하여 데이터베이스에 연결하고 설정을 구성해야 합니다. 일반적으로는 데이터베이스 파일의 경로를 지정하고 연결하는 작업이 필요합니다. 데이터베이스 연결 코드는 아래와 같이 작성할 수 있습니다.
// SQLite 연결 예시
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("database.sqlite")
let database = try! Connection(fileURL.path)
// Core Data 연결 예시
let managedObjectContext: NSManagedObjectContext = {
let container = NSPersistentContainer(name: "Model")
container.loadPersistentStores { (_, error) in
if let error = error as NSError? {
fatalError("Error: \(error), \(error.userInfo)")
}
}
return container.viewContext
}()
// Realm 연결 예시
let configuration = Realm.Configuration(
fileURL: try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("default.realm"),
schemaVersion: 1
)
let realm = try! Realm(configuration: configuration)
4. 데이터 조작
데이터베이스에 연결한 후에는 데이터를 조작하고 쿼리를 실행할 수 있습니다. 이 작업은 선택한 데이터베이스의 문법과 API에 따라 다를 수 있습니다. 아래는 각 데이터베이스의 예시입니다.
SQLite 데이터 조작 예시
let users = Table("users")
let id = Expression<Int>("id")
let name = Expression<String>("name")
let email = Expression<String>("email")
try! database.run(users.create { t in
t.column(id, primaryKey: true)
t.column(name)
t.column(email, unique: true)
})
let insert = users.insert(name <- "John", email <- "john@example.com")
let rowID = try! database.run(insert)
for user in try! database.prepare(users) {
print("id: \(user[id]), name: \(user[name]), email: \(user[email])")
}
Core Data 데이터 조작 예시
let entity = NSEntityDescription.entity(forEntityName: "User", in: managedObjectContext)!
let user = NSManagedObject(entity: entity, insertInto: managedObjectContext)
user.setValue("John", forKey: "name")
user.setValue("john@example.com", forKey: "email")
try! managedObjectContext.save()
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "User")
let users = try! managedObjectContext.fetch(fetchRequest)
for user in users {
print("name: \(user.value(forKey: "name") as! String), email: \(user.value(forKey: "email") as! String)")
}
Realm 데이터 조작 예시
class User: Object {
@objc dynamic var name = ""
@objc dynamic var email = ""
}
let user = User()
user.name = "John"
user.email = "john@example.com"
try! realm.write {
realm.add(user)
}
let users = realm.objects(User.self)
for user in users {
print("name: \(user.name), email: \(user.email)")
}
5. 데이터베이스 연결 종료
데이터베이스 작업이 완료되면 연결을 종료해야 합니다. 데이터베이스 라이브러리에 따라 종료하는 방법이 다를 수 있으므로 해당 라이브러리의 문서를 참조하세요.