[swift] Swift SkeletonView 데이터베이스 연동 방법

Swift SkeletonView는 앱의 사용자 경험을 향상시키기 위해 로딩 상태에서 스켈레톤 화면을 제공하는 라이브러리입니다. 이 글에서는 Swift SkeletonView를 사용하여 데이터베이스를 연동하는 방법을 알아보겠습니다.

1. 데이터베이스 연결 설정

데이터베이스와의 연동을 위해 SQLite 라이브러리를 사용하겠습니다. 먼저, 프로젝트에 SQLite 라이브러리를 추가해야 합니다. 이를 위해 CocoaPods를 사용해보겠습니다. Podfile 파일에 다음과 같이 SQLite 라이브러리를 추가하세요.

pod 'SQLite.swift'

그리고 터미널에서 아래 명령어를 실행하여 라이브러리를 설치합니다.

pod install

이제 데이터베이스 연결을 위해 SQLite.swift를 import하고, 연결을 설정합니다.

import SQLite

class DatabaseManager {
    static let shared = DatabaseManager()
    private let db: Connection?
    
    private init() {
        let path = NSSearchPathForDirectoriesInDomains(
            .documentDirectory, .userDomainMask, true
        ).first!
        
        do {
            db = try Connection("\(path)/database.sqlite3")
        } catch {
            print("Failed to connect to database: \(error)")
            db = nil
        }
    }
    
    // ...
}

위 코드에서 Connection 객체를 사용하여 데이터베이스 연결을 설정합니다. 연결이 성공한다면 db 프로퍼티에는 연결된 데이터베이스 객체를 저장하고 실패한다면 dbnil이 됩니다.

2. 테이블 생성

데이터베이스에 데이터를 저장하기 위해 테이블을 생성해야 합니다. 예를 들어, 사용자 정보를 저장하는 User 테이블을 생성하는 방법을 알아보겠습니다.

import SQLite

class DatabaseManager {
    // ...
    
    func createUserTable() {
        guard let db = db else {
            print("Database connection is not available")
            return
        }
        
        let users = Table("users")
        let id = Expression<Int64>("id")
        let name = Expression<String>("name")
        let age = Expression<Int>("age")
        
        do {
            try db.run(users.create { table in
                table.column(id, primaryKey: true)
                table.column(name)
                table.column(age)
            })
        } catch {
            print("Failed to create table: \(error)")
        }
    }
    
    // ...
}

위 코드에서는 users 테이블을 생성하고, id, name, age 컬럼을 추가합니다. run 메소드를 사용하여 테이블을 생성합니다. 생성에 실패한다면 에러가 출력됩니다.

3. 데이터 조회하기

이제 데이터베이스 연동을 테스트해보겠습니다. User 테이블에서 모든 사용자를 조회하는 방법을 알아보겠습니다.

import SQLite

class DatabaseManager {
    // ...
    
    func fetchAllUsers() -> [User] {
        guard let db = db else {
            print("Database connection is not available")
            return []
        }
        
        let users = Table("users")
        let id = Expression<Int64>("id")
        let name = Expression<String>("name")
        let age = Expression<Int>("age")
        
        var userList: [User] = []
        
        do {
            for userRow in try db.prepare(users) {
                let user = User(
                    id: userRow[id],
                    name: userRow[name],
                    age: userRow[age]
                )
                userList.append(user)
            }
        } catch {
            print("Failed to fetch users: \(error)")
        }
        
        return userList
    }
    
    // ...
}

위 코드에서는 users 테이블에서 데이터를 조회하여 User 객체로 매핑한 후, 배열에 추가합니다. 에러가 발생할 경우 에러를 출력하고 빈 배열을 반환합니다.

4. 데이터 삽입하기

마지막으로 데이터베이스에 데이터를 삽입하는 방법을 알아보겠습니다. 사용자 정보를 User 테이블에 삽입하는 방법을 알아보겠습니다.

import SQLite

class DatabaseManager {
    // ...
    
    func insertUser(user: User) {
        guard let db = db else {
            print("Database connection is not available")
            return
        }
        
        let users = Table("users")
        let id = Expression<Int64>("id")
        let name = Expression<String>("name")
        let age = Expression<Int>("age")
        
        do {
            try db.run(users.insert(
                name <- user.name,
                age <- user.age
            ))
        } catch {
            print("Failed to insert user: \(error)")
        }
    }
    
    // ...
}

위 코드에서는 users 테이블에 사용자 정보를 삽입합니다. run 메소드의 insert 함수를 사용하여 데이터를 삽입합니다. 삽입에 실패하면 에러가 출력됩니다.

이제 Swift SkeletonView와 데이터베이스의 연동 방법을 알게 되었습니다. 이를 활용하여 앱의 사용자 경험을 개선할 수 있습니다.