[swift] Swift에서 키체인을 사용하여 앱 결제 인증 정보 관리하기

앱 개발 시 결제 인증 정보를 관리하는 데에는 보안적인 측면에서 키체인(Keychain)을 사용하는 것이 좋습니다. 키체인은 암호화된 데이터를 안전하게 저장할 수 있는 iOS 기기 내의 보안 저장소입니다.

이 글에서는 Swift에서 키체인을 사용하여 앱의 결제 인증 정보를 관리하는 방법에 대해 알아보겠습니다.

1. 키체인 서비스 설정

키체인을 사용하기 위해 먼저 애플리케이션의 Info.plist 파일에 키체인 서비스 설정을 추가해야 합니다. Info.plist 파일에 다음과 같은 항목을 추가합니다.

<key>keychain-access-groups</key>
<array>
  <string>$(AppIdentifierPrefix)com.my.app</string>
</array>

위의 예시에서는 “com.my.app”을 앱의 식별자로 사용했습니다. 앱의 식별자를 실제 앱의 식별자로 변경해주세요.

2. 키체인에 값 저장하기

키체인에 값을 저장하기 위해서는 Security 프레임워크를 사용해야 합니다. 다음은 키체인에 값을 저장하는 함수의 예시입니다:

import Security

func saveValueToKeychain(value: String, key: String) -> Bool {
    if let data = value.data(using: .utf8) {
        let query: [String: Any] = [
            kSecClass as String: kSecClassGenericPassword,
            kSecAttrAccount as String: key,
            kSecValueData as String: data
        ]

        let status = SecItemAdd(query as CFDictionary, nil)
        return status == errSecSuccess
    }
    return false
}

위의 예시에서는 saveValueToKeychain 함수를 통해 String 타입의 값과 해당 값에 대한 키를 입력받아 키체인에 저장합니다. 키체인에 저장되는 값은 Data 타입으로 변경되어 저장됩니다.

3. 키체인에서 값 가져오기

키체인에서 값을 가져오기 위해서는 다음과 같은 함수를 사용할 수 있습니다:

import Security

func getValueFromKeychain(key: String) -> String? {
    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 let retrievedData = result as? Data,
       let value = String(data: retrievedData, encoding: .utf8),
       status == errSecSuccess {
        return value
    }

    return nil
}

위의 예시에서는 getValueFromKeychain 함수를 통해 키를 입력하면 해당 키에 매칭되는 값을 키체인에서 가져옵니다. 반환되는 값은 String 타입입니다.

4. 키체인에서 값 삭제하기

키체인에서 값 삭제를 위해서는 다음과 같은 함수를 사용할 수 있습니다:

import Security

func deleteValueFromKeychain(key: String) -> Bool {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key
    ]

    let status = SecItemDelete(query as CFDictionary)
    return status == errSecSuccess
}

위의 예시에서는 deleteValueFromKeychain 함수를 통해 키를 입력하면 해당 키에 매칭되는 값을 키체인에서 삭제합니다.

결론

Swift에서 키체인을 사용하여 앱의 결제 인증 정보를 관리하는 방법에 대해 알아보았습니다. 키체인을 이용하면 암호화된 데이터를 안전하게 저장할 수 있어서 개인 정보 보호 및 보안에 더욱 신경을 쓸 수 있습니다. 키체인을 알맞게 활용하여 앱의 결제 인증 정보를 안전하게 관리해보세요.

참고 자료