[Swift] Metadata

2024. 3. 14. 12:31🍏/Swift

메타데이터(Metadata or Metainformation)는 데이터(data)에 대한 데이터.

 보통은 다른 데이터의 내용, 특성, 품질, 조건 등을 설명하는 정보입니다. 이렇게 흔히들 간단히 정의하지만, 캐런 코일(Karen Coyle)에 의하면 '어떤 목적을 가지고 만들어진 데이터(constructed data with a purpose)'라고도 정의한다. 즉, 다른 데이터를 정의하고 기술하는 데이터(data that defines and describes other data)입니다.

 예를 들어, 디지털 이미지 파일의 메타데이터에는 촬영 날짜, 사용된 카메라의 모델, 이미지의 해상도 등의 정보가 포함될 수 있습니다. HTML 문서에서 메타데이터는 <meta> 태그를 사용하여 문서의 인코딩, 저자, 설명, 키워드 등을 정의합니다.

<meta charset="UTF-8">
<meta name="description" content="웹사이트 설명">
<meta name="keywords" content="HTML, CSS, JavaScript">
<meta name="author" content="홍길동">

 

Swift를 통한 iOS 개발에서도 "메타데이터"라는 개념이 존재하지만, 주로 사용되는 방식이나 목적이 HTML에서의 사용과는 다릅니다. iOS 앱 개발에서 메타데이터는 주로 앱의 버전, 개발 환경 설정, 프레임워크의 API 설명 등에 사용됩니다. 이 메타데이터는 앱의 Info.plist 파일, 프레임워크의 헤더 파일, 또는 코드에 내장된 주석과 같은 형태로 존재합니다.

Info.plist

iOS 앱 개발에서 Info.plist 파일은 앱의 메타데이터를 저장하는 중요한 파일입니다. 이 파일에는 앱의 버전 번호, 디스플레이 이름, 권한 설정, 지원하는 디바이스 방향 등 앱의 기본 설정과 속성 정보가 들어있습니다. 예를 들어, 앱이 카메라 접근 권한을 요청할 때 사용자에게 표시할 메시지를 Info.plist에 다음과 같이 추가합니다.

<key>NSCameraUsageDescription</key>
<string>이 앱은 사진 촬영 기능을 사용하기 위해 카메라 접근 권한이 필요합니다.</string>

 

Attribute

Swift에서는 속성(Attributes)을 사용하여 코드에 메타데이터를 추가할 수 있습니다. 예를 들어, @available 속성을 사용하여 특정 플랫폼이나 Swift 버전에서만 사용 가능하거나, 사용이 중단된 API에 대한 정보를 제공할 수 있습니다.

@available(iOS 15, *)
func someFunctionForiOS10AndAbove() {
    // iOS 15 이상에서 실행될 코드
}

 

AVFoundation

Audio, Video Foundation에서는 오디오나 비디오들의 데이터들을 설명하기위해서 메타데이터를 사용하고 있다.

static var metadata: AVAsyncProperty<Root, [AVMetadataItem]> { get }

 

 

 

AVFoundation | Apple Developer Documentation

Work with audiovisual assets, control device cameras, process audio, and configure system audio interactions.

developer.apple.com

 

Build Metadata

빌드 및 앱의 메타데이터들을 볼 수 잇는 방법을 기술하고 있다.

 

빌드 및 메타데이터 보기 - 빌드 관리 - App Store Connect - 도움말 - Apple Developer

빌드 관리 빌드 및 메타데이터 보기 App Store에서 생성한 변형 버전의 크기를 포함하는 업로드한 모든 앱의 빌드, 그리고 각 빌드의 메타데이터를 볼 수 있습니다. App Store에 앱이 출시된 후에도

developer.apple.com

 


 

HTML에서 브라우저 세션(Session)과 쿠키(Cookies)도 일종의 메타데이터로 볼 수 있는 것 처럼,
우리도 Swift에 있는 UserDefaults, Core Data, Keychain을 메타데이터로 볼 수 있습니다.

UserDefaults, Core Data, 그리고 Keychain은 모두 앱 데이터를 저장하는 방법이며, 앱을 종료한 후에도 저장된 데이터가 남아 있습니다. 그러나 이들 간에는 저장되는 데이터의 종류, 사용 목적, 보안 수준, 그리고 데이터 관리 방식에서 중요한 차이점이 있습니다.

UserDefaults

  • 사용 목적: 간단한 데이터(사용자 설정, 선호도 등)를 저장하기 위한 것입니다. 키-값 쌍으로 데이터를 저장하며, 사용이 매우 간편합니다.
  • 보안 수준: 낮습니다. UserDefaults는 암호화되지 않으므로 중요한 정보를 저장하기에는 적합하지 않습니다.
  • 적합한 사용 사례: 사용자의 테마 설정(어두운 모드, 밝은 모드), 앱이 마지막으로 사용된 상태 등을 저장하고 복원할 때 사용됩니다.

Core Data

  • 사용 목적: 복잡한 데이터 모델의 구조화된 데이터를 영구적으로 저장, 관리, 조회하기 위한 프레임워크입니다. 객체 그래프 관리와 코어 데이터의 생명주기 관리를 포함합니다.
  • 보안 수준: UserDefaults보다는 높지만, Keychain처럼 데이터를 암호화하지는 않습니다. 보안이 필요한 데이터는 추가적인 암호화를 고려해야 합니다.
  • 적합한 사용 사례: 사용자가 생성한 콘텐츠, 복잡한 데이터 관계, 대량의 데이터를 관리할 때 사용됩니다.

Keychain

  • 사용 목적: 사용자의 비밀번호, 인증 토큰 같은 보안이 필요한 정보를 안전하게 저장하기 위해 설계되었습니다. iOS 기기에서 제공하는 암호화를 사용하여 데이터를 보호합니다.
  • 보안 수준: 매우 높습니다. Keychain에 저장된 데이터는 암호화되며, 키체인 접근 권한이 있는 앱만 해당 데이터에 접근할 수 있습니다.
  • 적합한 사용 사례: 로그인 정보, 개인 식별 정보, 암호화 키 등의 보안이 필요한 정보를 저장할 때 사용됩니다.

이 세 가지 방법은 각기 다른 용도와 요구 사항에 따라 선택되어야 합니다. UserDefaults는 간단한 사용자 선호도 저장에 적합하고, Core Data는 복잡한 데이터 모델과 대량의 데이터를 관리하는 데 유용하며, Keychain은 보안이 중요한 정보를 저장하는 데 최적의 선택입니다. 따라서 개발자는 앱의 요구 사항과 데이터의 중요성을 고려하여 적절한 저장 방식을 선택해야 합니다.

해당 항목들에 대해서 메타데이터의 관점에서 간단하게 알아 보았으며, 이는 나중에 자세하게 다뤄볼 예정이다.