[swift] 데이터 타입을 이용한 데이터베이스 처리 방식

Swift는 iOS 및 macOS 애플리케이션 개발을 위해 사용되는 프로그래밍 언어로, 데이터베이스 처리를 간편하게 할 수 있는 다양한 방식을 제공합니다. 이 글에서는 Swift에서 데이터 타입을 이용한 데이터베이스 처리 방식을 살펴보겠습니다.

SQLite 데이터베이스 사용하기

Swift에서 SQLite 데이터베이스를 사용하는 방법은 두 가지가 있습니다. 첫 번째는 C 기반의 SQLite3 라이브러리를 직접 사용하는 방법이고, 두 번째는 Swift의 SQLite.swift 라이브러리를 사용하는 방법입니다.

SQLite.swift 라이브러리 사용하기

SQLite.swift 라이브러리는 Swift로 SQLite 데이터베이스를 다룰 수 있도록 도와주는 라이브러리입니다. 이 라이브러리를 사용하면 Swift의 강력한 타입 시스템을 활용하여 데이터베이스 스키마를 정의하고 CRUD 작업을 쉽게 처리할 수 있습니다.

import SQLite

let db = try Connection("path/to/database.sqlite")

let users = Table("users")
let id = Expression<Int64>("id")
let name = Expression<String>("name")

try db.run(users.create { t in
    t.column(id, primaryKey: .autoincrement)
    t.column(name)
})

let insert = users.insert(name <- "John")
let rowId = try db.run(insert)

for user in try db.prepare(users) {
    print("id: \(user[id]), name: \(user[name])")
}

SQLite3 라이브러리 사용하기

SQLite3 라이브러리는 C 기반의 라이브러리로, Swift에서 직접 사용하려면 sqlite3 모듈을 import 해야 합니다. 이후에는 SQLite3 라이브러리의 함수들을 사용하여 데이터베이스를 조작할 수 있습니다.

import sqlite3

var db: OpaquePointer?

if sqlite3_open("path/to/database.sqlite", &db) == SQLITE_OK {
    var queryStatement: OpaquePointer?
    
    let createTableQuery = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);"
    if sqlite3_exec(db, createTableQuery, nil, nil, nil) == SQLITE_OK {
        print("Table created successfully.")
    } else {
        print("Unable to create table.")
    }
    
    let insertQuery = "INSERT INTO users (name) VALUES ('John');"
    if sqlite3_exec(db, insertQuery, nil, nil, nil) == SQLITE_OK {
        let lastInsertedRowId = sqlite3_last_insert_rowid(db)
        print("Inserted row with id: \(lastInsertedRowId)")
    } else {
        print("Unable to insert row.")
    }
    
    let selectQuery = "SELECT * FROM users;"
    if sqlite3_prepare_v2(db, selectQuery, -1, &queryStatement, nil) == SQLITE_OK {
        while sqlite3_step(queryStatement) == SQLITE_ROW {
            let id = sqlite3_column_int64(queryStatement, 0)
            let name = String(cString: sqlite3_column_text(queryStatement, 1))
            print("id: \(id), name: \(name)")
        }
    }
    
    sqlite3_finalize(queryStatement)
    sqlite3_close(db)
} else {
    print("Unable to open database.")
}

Core Data 사용하기

Swift에서 Core Data를 사용하면 데이터 모델의 관리, 객체 그래프 관리, 데이터베이스 저장 등 다양한 작업을 할 수 있습니다. Core Data는 강력한 ORM(Object-Relational Mapping) 기능을 제공하여 개발자가 객체를 데이터베이스에 자동으로 저장하고 검색할 수 있도록 도와줍니다.

Core Data를 사용하기 위해서는 Xcode 프로젝트에서 Core Data 모델을 생성해야 합니다. 이후에는 자동으로 생성된 클래스들을 사용하여 데이터베이스 처리 작업을 수행할 수 있습니다.

import CoreData

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let context = appDelegate.persistentContainer.viewContext

let entity = NSEntityDescription.entity(forEntityName: "User", in: context)!
let user = NSManagedObject(entity: entity, insertInto: context)
user.setValue("John", forKey: "name")

do {
    try context.save()
    print("User saved successfully.")
} catch {
    print("Unable to save user.")
}

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")

do {
    let users = try context.fetch(fetchRequest) as! [NSManagedObject]
    for user in users {
        let name = user.value(forKey: "name") as! String
        print("name: \(name)")
    }
} catch {
    print("Unable to fetch users.")
}

참고 자료

위에서는 Swift에서 데이터 타입을 이용한 데이터베이스 처리 방식에 대해 알아보았습니다. SQLite와 Core Data를 사용하여 데이터베이스 처리를 하는 방법을 익혀두면 앱 개발에 도움이 될 것입니다.