[swift] Swift에서 키체인에 데이터 업데이트하기

안녕하세요! 이번에는 Swift에서 키체인(Keychain)에 데이터를 업데이트하는 방법에 대해 알아보겠습니다.

키체인은 iOS 앱의 중요한 정보를 안전하게 저장할 수 있는 공간입니다. 사용자의 비밀번호, 토큰, 인증서 등 민감한 데이터를 저장하기에 적합한 장소입니다.

KeychainWrapper 사용하기

Swift에서 키체인을 다루기 위해 KeychainWrapper 라이브러리를 활용할 수 있습니다. KeychainWrapper는 CocoaPods나 Swift Package Manager 등을 통해 설치할 수 있습니다.

먼저 해당 라이브러리를 프로젝트에 추가한 뒤, 다음과 같이 사용할 수 있습니다.

import SwiftKeychainWrapper

let keychain = KeychainWrapper.standard

// 키체인에 저장된 값 업데이트하기
keychain.set("새로운 값", forKey: "키")

// 키체인에 저장된 값 얻어오기
let value = keychain.string(forKey: "키")

위의 코드에서 keychain.set() 메서드를 사용하여 키체인에 데이터를 업데이트할 수 있습니다. keychain.string(forKey:) 메서드를 사용하여 키체인에서 해당 키의 값을 얻어올 수 있습니다.

직접 키체인 접근하기

KeychainWrapper 외에도 직접 iOS의 Keychain API를 사용하여 키체인에 데이터를 업데이트할 수도 있습니다. 이 방법은 보다 유연하게 사용자 정의 메타데이터를 추가할 수 있는 장점이 있습니다.

import Security

// 키체인에 저장할 데이터 생성
let newData = "새로운 데이터"
guard let data = newData.data(using: .utf8) else {
    fatalError("데이터 변환 실패")
}

// 키체인에 데이터 업데이트
let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrService as String: "사용자 정의 서비스 이름",
    kSecAttrAccount as String: "사용자 정의 계정 이름",
]

let attributes: [String: Any] = [
    kSecValueData as String: data
]

let status = SecItemUpdate(query as CFDictionary, attributes as CFDictionary)

if status != errSecSuccess {
    fatalError("키체인 업데이트 실패")
}

위의 코드에서는 Security 프레임워크를 사용하여 키체인 업데이트를 수행합니다. guard 문을 사용하여 데이터 변환에 실패하는 경우 예외를 발생시키도록 하였습니다. 그리고 query 딕셔너리에 사용자 정의 서비스 이름과 계정 이름을 지정하여 해당 서비스 및 계정에 연결된 데이터를 업데이트합니다. 업데이트가 성공적으로 수행되면 errSecSuccess가 아닌 다른 상태 코드가 반환되는 경우 예외를 발생시킵니다.

마무리

위에서 소개한 두 가지 방법을 사용하여 Swift에서 키체인에 데이터를 업데이트할 수 있습니다. 각각의 방법은 사용자의 요구사항에 따라 선택하여 적절하게 사용할 수 있습니다. 키체인을 보다 효율적으로 활용하여 앱의 데이터를 안전하게 관리하고 유출을 방지하는 것이 중요합니다.

더 자세한 내용은 Apple 공식 문서를 참조하시기 바랍니다.