[Swift] Keychain vs UserDefaults

2023. 12. 17. 01:13ยท๐ŸŽ Dev/Swift

 

 

iOS ์•ฑ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด, ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ์ง€๋ฅผ ํ•œ๋ฒˆ์”ฉ์€ ๊ผญ ๊ณ ๋ฏผํ•ด๋ณด๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

CoreData, UserDefaults, Keychain ๋“ฑ์ด ์žˆ๋Š”๋ฐ, ์ด ๊ธ€์€ ๋ณด์•ˆ ์œ ์ง€๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ Keychain์— ๋Œ€ํ•ด ์ •๋ฆฌ๋‹ค.

 

 

 

 

 

 

1. UserDefaults๋กœ  ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด ์ €์žฅ?

 

๋ฌผ๋ก , UserDefaults์— ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์šฐ์„  UserDefaults์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.

 

์ถœ์ฒ˜: ๊ณต์‹๋ฌธ์„œ

 

UserDefaults๋Š”,

 

1. ๋Ÿฐํƒ€์ž„์— ๋™์ž‘

2. ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด info ํŒŒ์ผ์— key-value์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

 

์ด๋ผ๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒŒ๋“œ๋ฐ•์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ์„ ์‚ญ์ œํ•˜๋ฉด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์‚ญ์ œ๋œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™œ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ ์ค‘ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ UserDefaults๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ €์žฅํ•˜์ง€ ์•Š๋Š”์ง€์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด๋ณด์ž๋ฉด, OS๋ฅผ ํƒˆ์˜ฅํ•˜๋Š” ์ผ์ด ๋ฒŒ์–ด์งˆ ๋•Œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, ๋ณด์•ˆ์„ฑ์ด ์ทจ์•ฝํ•˜๋‹ค! ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž์˜ ์•ฑ ๊ฒฝํ—˜ ์ƒํƒœ (๋กœ๊ทธ์ธ ์œ ๋ฌด, ์ฒซ ์ง„์ž… ์œ ๋ฌด) ๋“ฑ์„ ์ €์žฅํ•˜๊ธฐ์—” ์ ํ•ฉํ•˜์ง€๋งŒ, ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋• UserDefaults ์‚ฌ์šฉ์ด ์ง€์–‘๋œ๋‹ค.

 

 

 

 

 

 

2. Keychain?

 

์ถœ์ฒ˜: ๊ณต์‹๋ฌธ์„œ

 

 

ํ‚ค์ฒด์ธ์ด๋ž€? 

 

ํ‚ค์ฒด์ธ์ด๋ž€ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด Apple์ด ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋””๋ฐ”์ด์Šค์˜ ์ €์žฅ๊ณต๊ฐ„์ด๋‹ค. ์• ํ”Œ์—์„œ ํ‚ค์ฒด์ธ์„ ์ œ๊ณตํ•˜๊ฒŒ ๋œ ์ด์œ ๋Š”, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ๊ฐ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ์ •๋ณด ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ์™ธ์šฐ๋Š” ๊ณผ์ •์„ ์ค„์ด๊ณ ์ž ํ•จ์ด๋‹ค. ์ •๋ณด๋ฐ์ดํ„ฐ์˜ ์˜ˆ๋กœ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ์ •๋ณด (= ๊ฒฐ์ œ ์ •๋ณด) ๋‚˜ ์ธ์ฆ์„œ, ์•”ํ˜ธํ‚ค ๋“ฑ์ด ์žˆ๋‹ค.

 

๋””๋ฐ”์ด์Šค์˜ ์ž ๊ธˆ์„ค์ •๊ณผ ํ‚ค์ฒด์ธ์˜ ์ ‘๊ทผ์—ฌ๋ถ€๋Š” ๋™์ผํ•˜๋‹ค. ์ฆ‰, ๋””๋ฐ”์ด์Šค๊ฐ€ ์ž ๊ฒจ์ ธ ์žˆ์œผ๋ฉด ํ‚ค์ฒด์ธ๋„ ์ž ๊ฒจ ์žˆ์–ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

 

๋˜ํ•œ, ์•ฑ์„ ์ง€์šฐ๋ฉด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์‚ญ์ œ๋˜๋Š” UserDefaults์™€ ๋‹ฌ๋ฆฌ keychain์— ์ €์žฅ๋œ ์ •๋ณด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ง€์šฐ์ง€ ์•Š๋Š” ์ด์ƒ ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๊ทธ์ด์œ ๋Š” keychain์˜ ์ •๋ณด๋Š” ์ƒŒ๋“œ๋ฐ•์Šค ์™ธ๋ถ€์— ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 

์ •๋ฆฌ

 

- ํ‚ค์ฒด์ธ์€ ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋””๋ฐ”์ด์Šค์˜ ์ €์žฅ๊ณต๊ฐ„

- ๊ทธ๋Ÿฌ๋ฏ€๋กœ, ์ƒํ™ฉ์ด๋‚˜ ๊ทœ๋ชจ์— ๋งž๊ฒŒ UserDefaults์™€ Keychain ์‚ฌ์šฉ์„ ๊ณ ๋ฏผํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค

 

 

 

 

 

 

References

 

https://developer.apple.com/documentation/foundation/userdefaults

 

UserDefaults | Apple Developer Documentation

An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.

developer.apple.com

 

https://developer.apple.com/documentation/security/keychain_services

 

Keychain services | Apple Developer Documentation

Securely store small chunks of data on behalf of the user.

developer.apple.com

 

https://medium.com/@omar.saibaa/local-storage-in-ios-keychain-668240e2670d

 

์ €์ž‘์žํ‘œ์‹œ

'๐ŸŽ Dev > Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] Method Dispatch  (0) 2023.12.02
[Swift] unowned vs weak  (2) 2023.11.14
'๐ŸŽ Dev/Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Swift] Method Dispatch
  • [Swift] unowned vs weak
Callie_
Callie_
  • Callie_
    CalliOS
    Callie_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • ๐ŸŽ APPLE
      • ๐ŸŽ Dev
        • Swift
        • UIKit
        • SwiftUI
        • Issue
        • ๊ตฌํ˜„
      • ๐ŸŽ Design
        • HIG
      • โš™๏ธ CS
      • ๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
        • ๋ฐฑ์ค€
      • ๐ŸŸ๏ธ ์ง๊ด€๋กœ๊ทธ (์ถœ์‹œ์•ฑ)
        • ์—…๋ฐ์ดํŠธ
      • ๐ŸŒฑ SeSAC iOS 3๊ธฐ
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    clipsToBound
    CocoaTouchFramework
    cornerradius
    layer.shadow
    modalPresentStyle
    Enum
    addTarget
    DidEndOnExit
    apply
    IBAction
    ๋„คํŠธ์›Œํฌํ†ต์‹ 
    CustomView
    TapGestureRecognizer
    Snapshot
    ํ™”๋ฉด์ „ํ™˜
    SwiftUI
    ์ƒ๋ช…์ฃผ๊ธฐ
    Swift
    Infoํƒญ
    DiffableDataSource
    Entry Point
    IBOutlet
    stroyboard
    .OverFullScreen
    SeSAC
    assets
    ios
    .fullScreen
    diffable
    TableViewCell
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Callie_
[Swift] Keychain vs UserDefaults
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”