[swift] Swift에서 키체인을 사용하여 사용자 이메일 주소 저장하기

앱을 개발할 때, 사용자의 이메일 주소와 같은 중요한 정보를 안전하게 저장해야 할 때가 있습니다. Swift에서는 iOS에서 제공하는 키체인(Keychain)을 사용하여 이러한 정보를 안전하게 저장할 수 있습니다.

1. Keychain 사용 설정하기

먼저, 앱에서 키체인을 사용하기 위해 프로젝트 설정을 해야 합니다.

  1. 프로젝트 네비게이터에서 Targets를 선택합니다.
  2. 앱 타겟을 선택하고 Signing & Capabilities 탭으로 이동합니다.
  3. Keychain Sharing을 활성화합니다.

2. Keychain에 이메일 주소 저장하기

Swift에서 Keychain을 사용하여 이메일 주소를 저장하는 방법을 알아보겠습니다.

import Foundation
import Security

func saveEmailToKeychain(email: String) {
    let service = "com.example.app" // 앱의 Bundle Identifier로 대체하세요
    let account = "userEmail"
    
    // 저장할 데이터를 준비합니다.
    guard let data = email.data(using: .utf8) else {
        return
    }
    
    // Keychain에 데이터를 저장합니다.
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrService as String: service,
        kSecAttrAccount as String: account,
        kSecValueData as String: data
    ]
    
    let status = SecItemAdd(query as CFDictionary, nil)
    if status == errSecSuccess {
        print("이메일 주소가 Keychain에 저장되었습니다.")
    } else {
        print("이메일 주소를 Keychain에 저장하지 못했습니다. 오류 코드: \(status)")
    }
}

위의 코드에서 service 변수에는 앱의 Bundle Identifier와 동일한 값을 사용합니다. account 변수는 해당 Keychain 항목의 식별자로 자유롭게 설정할 수 있습니다.

saveEmailToKeychain 함수는 이메일 주소를 인자로 받아서 Keychain에 저장하는 역할을 합니다.

3. Keychain에서 이메일 주소 가져오기

저장한 이메일 주소를 Keychain에서 가져오는 방법을 알아보겠습니다.

import Foundation
import Security

func getEmailFromKeychain() -> String? {
    let service = "com.example.app" // 앱의 Bundle Identifier로 대체하세요
    let account = "userEmail"
    
    // Keychain에서 데이터를 가져옵니다.
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrService as String: service,
        kSecAttrAccount as String: account,
        kSecMatchLimit as String: kSecMatchLimitOne,
        kSecReturnData as String: true
    ]
    
    var result: AnyObject?
    let status = SecItemCopyMatching(query as CFDictionary, &result)
    
    if status == errSecSuccess, let data = result as? Data, let email = String(data: data, encoding: .utf8) {
        return email
    } else {
        return nil
    }
}

위의 코드는 getEmailFromKeychain 함수로 Keychain에서 이메일 주소를 가져오는 역할을 합니다. 이메일 주소가 존재하지 않거나 가져오는 과정에서 오류가 발생하면 nil을 반환합니다.

결론

이메일 주소와 같은 중요한 정보를 안전하게 저장하고 가져오기 위해 Swift에서 제공하는 Keychain을 사용할 수 있습니다. Keychain은 사용자의 데이터를 암호화하여 보호하므로 보안성이 높습니다. 이를 통해 앱 내에서 사용자의 개인정보를 안전하게 관리할 수 있습니다.

참고 자료