[swift] Swift에서 키체인을 사용하여 디바이스 고유 ID 저장하기

Apple의 Swift 언어를 사용하여 iOS 애플리케이션을 개발할 때, 디바이스 고유 ID를 저장하고 관리해야하는 경우가 있습니다. 이러한 정보를 보안적으로 안전하게 저장하기 위해 키체인을 사용할 수 있습니다. 키체인은 iOS 운영체제에서 제공하는 암호화된 데이터 저장소로, 사용자의 데이터를 보호합니다.

키체인에 값 저장하기

키체인에 값을 저장하는 방법은 다음과 같습니다.

import Foundation
import Security

let service = "com.myapp.uniqueid" // 고유한 식별자 (앱 번들 ID 등)
let key = "deviceID" // 저장할 키

// 저장할 데이터
let data = "ABCDE12345".data(using: .utf8)

// Query 생성
let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrService as String: service,
    kSecAttrAccount as String: key,
    kSecValueData as String: data as Any
]

// 저장
let status = SecItemAdd(query as CFDictionary, nil)
if status == errSecSuccess {
    print("키체인에 값이 성공적으로 저장되었습니다.")
} else {
    print("키체인에 값 저장에 실패하였습니다.")
}

위의 코드에서 service는 고유한 식별자로, 앱 번들 ID 등과 같은 값을 사용합니다. key는 저장할 데이터에 대한 키입니다. data는 저장할 데이터를 Data 타입으로 변환한 값입니다.

저장할 데이터를 kSecValueData 키로 지정하여 키체인에 저장하기 위해, 쿼리 딕셔너리를 생성하고 SecItemAdd 함수를 사용하여 데이터를 저장합니다.

키체인에서 값 불러오기

이제 저장한 키체인의 값들을 불러오는 방법에 대해 알아보겠습니다.

import Foundation
import Security

let service = "com.myapp.uniqueid" // 고유한 식별자 (앱 번들 ID 등)
let key = "deviceID" // 불러올 데이터의 키

// Query 생성
let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrService as String: service,
    kSecAttrAccount as String: key,
    kSecReturnData as String: true,
    kSecMatchLimit as String: kSecMatchLimitOne
]

// 데이터 불러오기
var result: AnyObject?
let status = SecItemCopyMatching(query as CFDictionary, &result)

if status == errSecSuccess {
    if let data = result as? Data {
        let value = String(data: data, encoding: .utf8)
        print("키체인에서 불러온 값: \(value ?? "")")
    }
} else {
    print("키체인에서 값 불러오기에 실패하였습니다.")
}

위의 코드에서 servicekey는 저장할 때와 동일하게 설정합니다.

데이터를 불러오기 위해 kSecReturnData 키로 지정하여 SecItemCopyMatching 함수를 사용합니다. 불러온 데이터는 Data 타입으로 변환하여 원하는 형식으로 사용할 수 있습니다.

결론

Swift에서 키체인을 사용하여 디바이스의 고유 ID를 저장하는 방법에 대해 알아보았습니다. 키체인은 정보를 안전하게 저장하는 용도로 많이 활용되며, iOS 애플리케이션 개발 시에 유용한 기능입니다. 추가로 암호화된 데이터를 저장하거나 키체인 관리를 더 자세히 알고 싶다면 Apple의 공식 문서를 참고하세요.