내일배움캠프 23일차

임클·2025년 4월 2일

내일배움캠프

목록 보기
24/44
post-thumbnail

하루하나 알고리즘

https://github.com/Yimkeul/AlgorithmSolution/tree/93d2c482512a13460bee4022e00dc65b528a8d70/프로그래머스/2/87946. 피로도


1. iOS 앱에서 데이터를 저장하는 방법

iOS에서 데이터를 저장하는 방법은 데이터의 성격(크기, 보안, 복잡성 등)에 따라 다양하다. 주요 방법은 다음과 같다:

  • UserDefaults: 간단한 키-값 쌍 데이터를 저장. 설정값이나 소량의 사용자 선호 데이터를 저장할 때 유용.
  • Keychain: 민감한 데이터를 안전하게 저장. 비밀번호, 토큰 같은 보안이 중요한 데이터를 다룸.
  • Core Data: 객체 그래프 관리와 복잡한 데이터 모델을 다룰 때 사용. 관계형 데이터에 강력.
  • SQLite: 경량 데이터베이스. 대량의 구조화된 데이터를 직접 쿼리로 다룰 때 적합.
  • File System: 파일(이미지, 텍스트 등)을 디스크에 저장. 대용량 데이터나 미디어 파일에 유용.

2. UserDefaults의 사용 시 주의할 점

UserDefaults는 간단한 데이터를 저장하기에 편리하지만, 몇 가지 주의할 점이 있다:

  • 용량 제한: 대량의 데이터를 저장하면 성능 저하가 발생할 수 있음. 소량 데이터(예: 설정값)에 적합.
  • 보안: 암호화되지 않으므로 민감한 데이터(비밀번호 등)는 저장하면 안 됨.
  • 동기화: iCloud와 동기화될 수 있으니, 불필요한 데이터가 동기화되지 않도록 주의.

예시 코드

// 설정값 저장
UserDefaults.standard.set(true, forKey: "isDarkModeEnabled")
UserDefaults.standard.set("John", forKey: "userName")

// 데이터 읽기
let isDarkMode = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")
let userName = UserDefaults.standard.string(forKey: "userName") ?? "Guest"

print("Dark Mode: \\(isDarkMode), User: \\(userName)")

주의: 대량의 JSON이나 배열을 저장하려면 UserDefaults 대신 파일 시스템이나 Core Data를 고려하자.


3. Keychain은 어떤 데이터를 저장하기에 적합한가?

Keychain은 iOS에서 보안이 중요한 데이터를 저장하기에 최적화되어 있다. 주로 아래와 같은 데이터를 저장한다:

  • 비밀번호
  • 인증 토큰 (예: OAuth 토큰)
  • 암호화 키

Keychain은 데이터를 암호화하고, 앱이 삭제되어도 유지되며, 시스템 수준에서 관리되므로 보안성이 높다.

예시 코드 (KeychainWrapper 사용)

import Security

// Keychain에 비밀번호 저장
let keychain = KeychainSwift()
keychain.set("mySecretPassword123", forKey: "userPassword")

// Keychain에서 비밀번호 읽기
if let password = keychain.get("userPassword") {
    print("저장된 비밀번호: \\(password)")
}

적합성: "userPassword"처럼 민감한 데이터를 저장할 때 사용. UserDefaults와 달리 보안이 보장됨.


4. Core Data와 SQLite의 차이점 및 사용 시기

Core DataSQLite는 둘 다 데이터베이스 역할을 하지만, 설계 목적과 사용 방식이 다르다.

차이점

항목Core DataSQLite
설계 목적객체 그래프 관리경량 관계형 데이터베이스
데이터 모델객체 지향 (NSManagedObject)테이블 기반 (SQL 쿼리)
복잡성설정이 복잡하지만 추상화 제공직접 쿼리 작성 필요
성능소규모-중규모 데이터에 적합대량 데이터 처리에 유리

언제 사용?

  • Core Data: 앱 내에서 객체 간 관계(예: 사용자와 게시물의 1:N 관계)를 관리할 때. UI와 통합이 쉬움.
  • SQLite: 대량의 데이터를 쿼리로 직접 다루거나, Core Data의 오버헤드가 필요 없을 때.

Core Data 예시

// 엔티티에 사용자 추가
let context = persistentContainer.viewContext
let user = User(context: context)
user.name = "Alice"
user.age = 25
try? context.save()

SQLite 예시 (FMDB 사용)

let db = FMDatabase(path: databasePath)
db.open()
db.executeUpdate("INSERT INTO Users (name, age) VALUES (?, ?)", withArgumentsIn: ["Bob", 30])
db.close()

결론: 간단한 앱에선 Core Data로 관계를 관리하고, 대규모 데이터 분석이 필요하면 SQLite를 선택하자.


배운 점

  • UserDefaults는 간단한 설정값에, Keychain은 보안 데이터에 적합.
  • Core Data는 객체 중심, SQLite는 쿼리 중심으로 접근 방식이 다름.
  • 데이터의 크기와 보안 요구사항에 따라 적절한 방법을 선택하는 게 중요!

0개의 댓글