[swift] Swift에서 키체인을 사용하여 사용자 검색 기록 저장하기

앱에서 사용자 검색 기록을 저장하려면 일반적으로 로컬 데이터베이스, 파일 또는 사용자 기기의 키체인과 같은 저장소를 사용합니다. 이 가이드에서는 Swift에서 키체인을 사용하여 사용자의 검색 기록을 안전하게 저장하는 방법에 대해 알아보겠습니다.

1. 키체인 액세스 프레임 워크 가져오기

우리는 Security 프레임워크를 사용하여 키체인에 액세스할 것입니다. 이를 위해 먼저 Security 프레임워크를 가져와야 합니다. import Security 문을 추가하면 됩니다.

import Security

2. 키체인에 데이터 저장하기

키체인에 데이터를 저장하려면 kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData와 같은 필수적인 속성을 설정해야 합니다.

다음은 저장할 검색어를 키체인에 저장하는 예제입니다.

let serviceIdentifier = "com.example.app.searchHistory"
let accountIdentifier = "userSearchHistory"

guard let data = keyword.data(using: .utf8) else { return }

var query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrService as String: serviceIdentifier,
    kSecAttrAccount as String: accountIdentifier,
    kSecValueData as String: data
]

let status = SecItemAdd(query as CFDictionary, nil)
if status == errSecSuccess {
    print("검색 기록이 키체인에 저장되었습니다.")
} else {
    print("키체인에 저장할 수 없습니다. 오류 코드: \(status)")
}

위의 코드에서 serviceIdentifier는 앱의 고유 식별자입니다. accountIdentifier는 키체인에 저장될 데이터의 계정 식별자입니다. data는 저장할 검색어를 Data 형식으로 변환한 것입니다.

3. 키체인에서 데이터 불러오기

키체인에서 데이터를 불러오려면 이전과 유사한 방법으로 필요한 속성을 설정하고 SecItemCopyMatching 함수를 호출하여 데이터를 검색합니다.

다음은 키체인에서 검색 기록을 불러오는 예제입니다.

var query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrService as String: serviceIdentifier,
    kSecAttrAccount as String: accountIdentifier,
    kSecReturnData as String: true,
    kSecMatchLimit as String: kSecMatchLimitOne
]

var result: AnyObject?
let status = SecItemCopyMatching(query as CFDictionary, &result)

if status == errSecSuccess,
   let data = result as? Data,
   let keyword = String(data: data, encoding: .utf8) {
    print("검색 기록: \(keyword)")
} else {
    print("키체인에서 검색 기록을 불러올 수 없습니다. 오류 코드: \(status)")
}

위의 코드에서 kSecReturnData는 데이터를 반환하도록 요청하고, kSecMatchLimit는 검색된 결과 중 첫 번째 결과만 반환하도록 제한합니다.

4. 키체인에서 데이터 삭제하기

이전에 저장한 데이터를 키체인에서 삭제하려면 SecItemDelete 함수를 사용합니다.

다음은 키체인에서 검색 기록을 삭제하는 예제입니다.

let query: [String: Any] = [
    kSecClass as String: kSecClassGenericPassword,
    kSecAttrService as String: serviceIdentifier,
    kSecAttrAccount as String: accountIdentifier
]

let status = SecItemDelete(query as CFDictionary)
if status == errSecSuccess {
    print("검색 기록이 키체인에서 삭제되었습니다.")
} else {
    print("키체인에서 검색 기록을 삭제할 수 없습니다. 오류 코드: \(status)")
}

위의 코드에서 SecItemDelete 함수를 호출하여 키체인에서 데이터를 삭제합니다.

결론

이번 가이드에서는 Swift에서 키체인을 사용하여 사용자의 검색 기록을 저장하는 방법을 소개했습니다. 키체인은 암호화되고 안전한 저장소이므로 민감한 데이터를 저장하는 데 이상적입니다. 키체인을 사용하여 앱의 기능을 개선하고 사용자 경험을 향상시킬 수 있습니다.

더 자세한 내용은 Apple Developer Documentation을 참조하세요.