๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS/iOS Programming

[iOS] iOS data storage - 2. Userdefault, Coredata, Realm, Keychain

File Manager

์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ํ†ตํ•ด ์•ฑ๋งˆ๋‹ค ๋ณ„๋„์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ๊ณต์œ ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ , ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ์˜ ์ ‘๊ทผ์—๋„ ๋ณดํ˜ธ๋˜๋Š” ์˜์—ญ์œผ๋กœ ์‹œ์Šคํ…œ์ด ๋ถ€์ •์ ์œผ๋กœ ์กฐ์ž‘๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋‹ค.

 

ํŒŒ์ผ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด์„œ ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ๊ณ , ๋งŒ๋“ค๊ณ , ๋ณต์‚ฌํ•˜๊ณ , ์ด๋™ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

ํŒŒ์ผ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์ฃผ๋กœ ์ ‘๊ทผํ•ด ์‚ฌ์šฉํ•  ๋””๋ ‰ํ† ๋ฆฌ๋“ค์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋ฉด์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„์ง€ ์•Œ์•„๋ณด์ž.

์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉด

  • file system๊ณผ ์ƒํ˜ธ ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค
  • file๊ณผ directory๋ฅผ locate, create, copy, move ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • file system ๋‚ด ์ €์žฅ์‹œ ๊ฒฝ๋กœ(path) ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” NSURL์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์น˜๋ฅผ ์ง€์ •
  • iCloud ๋‚ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ ์กด์žฌ
  • cloud storage ๋กœ tag๋œ file ๊ณผ directory ๋“ค์€ iCloud์™€ ๋™๊ธฐํ™” ๋œ๋‹ค.
  • thread-safe ํ•˜์ง€๋งŒ delegate๋ฅผ ํ†ตํ•ด notification์„ ์ˆ˜์‹ ์‹œ FileManager ๊ฐœ์ฒด์˜ ๊ณ ์œ ํ•œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”

FileManager๋Š” UserDefaults์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ file-system ๊ธฐ๋ฐ˜์œผ๋กœ ์ €์žฅ๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
์ฆ‰, ์ €์žฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ file ํ˜•ํƒœ๋กœ, ๊ทธ๋ฆฌ๊ณ  directory ๋ณ„๋กœ ๊ด€๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋™์ผํ•œ ํ˜•ํƒœ์˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ๋•Œ๋„, ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋ณ„๋กœ ๊ฐ๊ธฐ ์ €์žฅํ• ๋•Œ๋„ file ํ˜•์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ ?
๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” .json ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์—ฌ JSONEncoder, JSONDecoder๋ฅผ ํ†ตํ•ด read/write๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค!

 

 

------------

 

 

CoreData

https://developer.apple.com/documentation/coredata/

์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉด

  • ๋‹จ์ผ ๊ธฐ๊ธฐ, ๋˜๋Š” CloudKit์„ ์‚ฌ์šฉํ•œ ๋‹ค์ค‘์žฅ์น˜๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
  • ๋‹จ์ผ ๊ธฐ๊ธฐ ๋‚ด ์˜คํ”„๋ผ์ธ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์˜๊ตฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ž„์‹œ๋ฐ์ดํ„ฐ cache, ์‹คํ–‰ ์ทจ์†Œ ๋ฐ ๋‹ค์‹œ ์‹คํ–‰ ๊ธฐ๋Šฅ ์ œ๊ณต
  • CloudKit์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘์žฅ์น˜๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”
  • CoreData์˜ Model editor๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ type๊ณผ relationship์„ ํ†ตํ•ด class๋ฅผ ์ •์˜
  • CoreData๊ฐ€ runtime์— ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ
  • CoreData๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ ๋„ Swift๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ €์žฅ์†Œ์— ๋งคํ•‘
  • CoreData์˜ undo manager๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ฒ™ํ•˜์—ฌ roll back ๊ฐ€๋Šฅ
  • Background์—์„œ ์ž‘์—…์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅ
  • table ๋ฐ collectionView์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ view์™€ ๋ฐ์ดํ„ฐ๊ฐ„์˜ ๊ณต๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•˜๋Š”๋ฐ ๋„์›€ ์ œ๊ณต
  • CoreData๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ฅผ ๋ฒ„์ „๋ณ„ ๊ด€๋ฆฌ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ ์ œ๊ณต

 

 

 

------------

 

 

KeyChain

 

keychain ?

ํ‚ค์ฒด์ธ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ์‹ ์šฉ์นด๋“œ ์ •๋ณด, ์ธ์ฆ์„œ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.
๋ฐ์ดํ„ฐ๋Š” ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋˜๋ฉฐ, ์•”ํ˜ธํ™”ํ•œ ๋ฐ์ดํ„ฐ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

 

 

 

 

[์œ„์น˜]

keychain์ด ์ž ๊ธด ์ƒํƒœ์—์„œ๋Š” item ์ ‘๊ทผ ๋ถˆ๊ฐ€, ๋ณตํ˜ธํ™” ๋ถˆ๊ฐ€

keychain์ด ํ’€๋ฆฐ ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น item์„ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ.

๊ฐ™์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•œ ์—ฌ๋Ÿฌ์•ฑ์—์„œ ํ‚ค์ฒด์ธ ์ •๋ณด ๊ณต์œ 

 

 

    // MARK: [ํ‚ค ์ฒด์ธ ์„ค๋ช…]

    /*

    1. Keychain ์€ ๋””๋ฐ”์ด์Šค ์•ˆ์— ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค

    2. Keychain ์€ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ด ๋›ฐ์–ด๋‚˜ ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ ๊ฒฐ์ œ ์ •๋ณด ๋“ฑ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

    3. Keychain ์€ ์•ฑ ์ข…๋ฃŒ ๋ฐ ์•ฑ ์‚ญ์ œ ํ›„ ์žฌ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ด๋„ ๋™์ผํ•˜๊ฒŒ ์ €์žฅ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

       - ์˜๊ตฌ์ ์ธ ๋ฐ์ดํ„ฐ

       - ์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์œ ์ง€

       - Keychain ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ํœด๋Œ€ํฐ ๊ณต์žฅ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ ์‹œ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค

    4. ์„ค์ • ํŒจํ‚ค์ง€ : import Security

 

 

------------------

 

realm

 

 

framework ๋ฒ„์ „ ํ™•์ธ

info.plist ๋‚ด Bundle version string (short) ํ™•์ธ

 

api site

https://www.mongodb.com/docs/realm-sdks/objc/latest/Classes/RLMObject.html#/c:objc(cs)RLMObject(cm)objectInRealm:forPrimaryKey:

 

static realm.framework ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

https://www.mongodb.com/docs/realm/sdk/swift/install/

 

zip ๋‹ค์šด site:

https://github.com/realm/realm-swift/releases.

 

728x90
๋ฐ˜์‘ํ˜•