[swift] Swift에서 키체인을 사용하여 사용자 프로필 이미지 저장하기

이번 글에서는 Swift를 사용하여 사용자 프로필 이미지를 키체인에 저장하는 방법을 알아보겠습니다. 키체인은 iOS 앱에서 암호, 토큰 및 기타 중요한 정보를 안전하게 저장하기 위한 메커니즘입니다. 사용자 프로필 이미지와 같은 작은 데이터를 키체인에 저장하는 것은 보안과 편의성 면에서 좋은 방법입니다.

단계 1: 키체인에 이미지 저장하기

첫 번째 단계는 사용자 프로필 이미지를 키체인에 저장하는 것입니다. 아래의 코드를 사용하여 이미지를 키체인에 저장할 수 있습니다.

import UIKit
import Security

func saveImageToKeychain(image: UIImage, forKey key: String) {
    if let imageData = image.pngData() {
        let query: [String: Any] = [
            kSecValueData as String: imageData,
            kSecClass as String: kSecClassGenericPassword,
            kSecAttrAccount as String: key,
            kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked
        ]

        let status = SecItemAdd(query as CFDictionary, nil)
        if status != errSecSuccess {
            print("Failed to save image to keychain")
        }
    }
}

위의 코드에서 saveImageToKeychain 함수는 이미지와 키를 매개변수로 받아서 키체인에 이미지를 저장합니다. 이미지를 PNG 데이터로 변환 한 후, 키체인에 저장하는 쿼리를 작성하여 SecItemAdd 함수를 사용하여 저장합니다.

단계 2: 키체인에서 이미지 가져오기

두 번째 단계는 키체인에서 이미지를 가져오는 것입니다. 아래의 코드를 사용하여 키체인에서 이미지를 가져올 수 있습니다.

import UIKit
import Security

func loadImageFromKeychain(forKey key: String) -> UIImage? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key,
        kSecReturnData as String: kCFBooleanTrue!,
        kSecMatchLimit as String: kSecMatchLimitOne
    ]
    
    var result: AnyObject?
    let status = SecItemCopyMatching(query as CFDictionary, &result)
    if status == errSecSuccess {
        if let imageData = result as? Data {
            return UIImage(data: imageData)
        }
    }
    
    return nil
}

위의 코드에서 loadImageFromKeychain 함수는 키를 매개변수로 받아서 키체인에서 해당 키에 저장된 이미지를 가져옵니다. SecItemCopyMatching 함수를 사용하여 쿼리를 실행하고, 결과로부터 이미지 데이터를 가져와서 반환합니다.

단계 3: 사용자 프로필 이미지 사용하기

이제 사용자 프로필 이미지를 읽고 저장하는 함수를 가지고 있습니다. 이제 이 함수들을 사용하여 이미지를 키체인에 저장하고 가져올 수 있습니다. 이를 통해 메모리나 파일 시스템에 이미지를 저장하는 대신 키체인에 안전하게 저장할 수 있습니다.

let profileImage = UIImage(named: "profile_image")

saveImageToKeychain(image: profileImage, forKey: "user_image")

if let savedImage = loadImageFromKeychain(forKey: "user_image") {
    // 저장된 이미지 사용
    imageView.image = savedImage
} else {
    // 저장된 이미지가 없는 경우 디폴트 이미지 사용
    imageView.image = UIImage(named: "default_image")
}

위의 코드에서는 프로필 이미지를 profileImage 변수에 할당한 다음, saveImageToKeychain 함수를 사용하여 키체인에 이미지를 저장합니다. 그런 다음 loadImageFromKeychain 함수를 사용하여 키체인에서 이미지를 가져 와서 imageView에 할당합니다.

결론

이 글에서는 Swift에서 키체인을 사용하여 사용자 프로필 이미지를 저장하는 방법을 살펴보았습니다. 키체인을 사용하여 중요한 정보를 안전하게 저장하는 것은 앱의 보안을 강화하고 사용자 경험을 향상시키는 데 도움이 됩니다.