[swift] Swift에서 키체인을 사용하여 데이터 백업 및 복원하기

안녕하세요! 이번에는 Swift에서 키체인을 이용하여 데이터를 백업하고 복원하는 방법에 대해 알아보겠습니다.

키체인(Keychain)이란?

키체인은 애플의 운영 체제에서 제공하는 안전한 데이터 저장소입니다. 이는 사용자의 비밀번호, 인증서, 토큰 등의 중요한 정보를 안전하게 관리하고 저장하는 데 사용됩니다.

데이터 백업하기

Swift에서 키체인을 사용하여 데이터를 백업하기 위해서는 Security 프레임워크를 import 해야 합니다. 다음은 데이터를 키체인에 저장하는 예제 코드입니다.

import Security

func saveDataToKeychain(data: Data, key: String) -> OSStatus {
    let query = [
        kSecClass: kSecClassGenericPassword,
        kSecAttrAccount: key,
        kSecValueData: data
    ] as [String: Any]

    return SecItemAdd(query as CFDictionary, nil)
}

위의 함수는 saveDataToKeychain이라는 이름으로 데이터와 키를 파라미터로 받아 키체인에 저장합니다. SecItemAdd 함수를 사용하여 데이터를 저장하는데, 이 함수는 저장 결과를 나타내는 OSStatus 값을 반환합니다. 성공 시 errSecSuccess가 반환되며, 실패 시 에러 코드가 반환됩니다.

데이터 복원하기

저장한 데이터를 키체인에서 복원하기 위해서는 다음과 같은 함수를 사용할 수 있습니다.

func loadDataFromKeychain(key: String) -> Data? {
    let query = [
        kSecClass: kSecClassGenericPassword,
        kSecAttrAccount: key,
        kSecMatchLimit: kSecMatchLimitOne,
        kSecReturnData: true
    ] as [String: Any]

    var result: AnyObject?
    let status = SecItemCopyMatching(query as CFDictionary, &result)
    
    if status == errSecSuccess {
        return result as? Data
    } else {
        return nil
    }
}

위의 함수는 loadDataFromKeychain이라는 이름으로 키를 파라미터로 받아 해당 키에 저장된 데이터를 복원합니다. SecItemCopyMatching 함수를 사용하여 데이터를 복원하는데, 이 함수는 복원 결과를 result에 저장합니다. 성공 시 데이터가 반환되며, 실패 시 nil이 반환됩니다.

예제 사용법

let data = "Hello, Keychain!".data(using: .utf8)!

// 데이터 저장
let saveStatus = saveDataToKeychain(data: data, key: "myData")
if saveStatus == errSecSuccess {
    print("Data saved to Keychain")
} else {
    print("Failed to save data to Keychain")
}

// 데이터 복원
if let loadedData = loadDataFromKeychain(key: "myData") {
    let loadedString = String(data: loadedData, encoding: .utf8)
    print("Loaded data from Keychain: \(loadedString ?? "")")
} else {
    print("Failed to load data from Keychain")
}

위의 예제는 데이터를 저장하고 복원하는 방법을 보여줍니다. myData라는 키로 데이터를 저장하고, 다시 해당 키로 데이터를 복원하여 출력합니다.

참고 자료