Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Swift/Core Data

[Core Data] Core Data ๊ฐœ๋… ๋จผ์ € ์ดํ•ดํ•˜๊ณ  ์‹œ์ž‘ํ•ด๋ณด๊ธฐ

๊ฐ์ž ๐Ÿฅ” 2022. 6. 8. 22:38
๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์ž์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ Core Data๋ฅผ ์จ๋ณด๋ ค๊ณ  ํ•˜๋Š”๋ฐ์š”, ๊ทธ ์ „์— core data๊ฐ€ ๋ญ”์ง€๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ํŒ€์›๋“ค ๋ชจ๋‘๊ฐ€ core data ์— ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ์–ด๋ ค์šด ๊ธธ์ด๊ฒ ์ง€๋งŒ,, ์ตœ์„ ์„ ๋‹คํ•ด์„œ,, ์–ด์ฐŒ์ €์ฐŒ ๊ตฌํ˜„์„ ํ•ด๋ณด๋Š”๊ฒŒ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ํ›„ํ›„ ๊ทธ๋Ÿผ start - !

 

๐Ÿ’ป Core Data๋ž€?

๊ฐ„๋žตํ•˜๊ฒŒ ๋งํ•ด์„œ, Core Data๋ž€ macOS ๋ฐ iOS ์šด์˜ ์ฒด์ œ์—์„œ Apple์ด ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ๋ฐ ์ง€์†์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ์„ค๋ช…์€ ์•„๋ž˜ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”,

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

 

Apple Developer Documentation

 

developer.apple.com

 

์• ํ”Œ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด core data๋ฅผ ์„ค๋ช…ํ–ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Core Data is a framework that you use to manage the model layer objects in your application. It provides generalized and automated solutions to common tasks associated with object life cycle and object graph management, including persistence.

 โ–ถ Core Data๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋ธ ๊ณ„์ธต์˜ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐ์ฒด์˜ ์˜์† ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ ๋ฐ ๊ฐ์ฒด ๊ด€๊ณ„๋„ ๊ด€๋ฆฌ ์ž‘์—…์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ด๊ณ  ์ž๋™ํ™” ๋œ ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’๐Ÿป Core Data๋Š” DataBase ์ธ๊ฐ€?

์œ„์—์„œ ์„ค๋ช…ํ–‡๋“ฏ, Core data๋Š” 'ํ”„๋ ˆ์ž„์›Œํฌ' ์ž…๋‹ˆ๋‹ค. Core data๋Š” DB๋„ ์•„๋‹ˆ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ API๊ฐœ๋…๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์•ฑ์˜ ๋ชจ๋ธ ๊ณ„์ธต์ด๋ฉฐ, ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•ด์„œ Persistence ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ˆ๊นŒ์š”! (persistence ๋Š” ๋’ค์—์„œ ์„ค๋ช…)

์•„๋ฌดํŠผ Core data๋Š” DB๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.,,

 

๐Ÿ’ป Core data์˜ ๊ธฐ๋Šฅ

(๊ณต์‹๋ฌธ์„œ ๋ฒˆ์—ญ) Core Data๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜คํ”„๋ผ์ธ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜๊ตฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œํ•˜๊ณ , ๋‹จ์ผ ์žฅ์น˜์—์„œ ์•ฑ์— ์‹คํ–‰ ์ทจ์†Œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ iCloud ๊ณ„์ •์˜ ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด Core Data๋Š” ์Šคํ‚ค๋งˆ๋ฅผ CloudKit ์ปจํ…Œ์ด๋„ˆ์— ์ž๋™์œผ๋กœ ๋ฏธ๋Ÿฌ๋งํ•ฉ๋‹ˆ๋‹ค.

Core Data์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ํŽธ์ง‘๊ธฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์œ ํ˜•๊ณผ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค ์ •์˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Core Data๋Š” ๋Ÿฐํƒ€์ž„์— ๊ฐœ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1. Persistence - ์ €์žฅ๊ธฐ๋Šฅ? ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ• ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค,,

Core data๋Š” ๊ฐœ์ฒด๋ฅผ ์ €์žฅ์†Œ์— ๋งคํ•‘ํ•˜๋Š” ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅด ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ ๋„ swift์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜; ๊ณต์‹๋ฌธ์„œ (https://developer.apple.com/documentation/coredata)

2. ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•ด์„œ ๋˜๋Œ๋ฆฌ๊ธฐ(Undo), ์žฌ์‹คํ–‰(Redo) ๋“ฑ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ

Core Data๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ถ”์ ํ•ด์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ, ๊ทธ๋ฃน์œผ๋กœ ๋˜๋Š” ํ•œ๋ฒˆ์— ๋ชจ๋‘ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์–ด์„œ ์•ฑ์— ์‹คํ–‰ ์ทจ์†Œ ๋ฐ ๋‹ค์‹œ ์‹คํ–‰์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ถœ์ฒ˜; ๊ณต์‹๋ฌธ์„œ (https://developer.apple.com/documentation/coredata)

 

3. ์ด์™ธ์—๋„

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐ์ดํ„ฐ ์ž‘์—…
  • ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”๋ฅผ ์ž๋™์œผ๋กœ ์ „ํŒŒํ•ด์„œ ๋ชจ๋ธ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€
  • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๊ธฐ
  • ๋ฐ์ดํ„ฐ ๋ฒ„์ „๊ด€๋ฆฌ๋‚˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ ์ œ๊ณต

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ป Core Data Stack 

Core Data๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํƒ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: ๊ณต์‹๋ฌธ์„œ (https://developer.apple.com/documentation/coredata/setting_up_a_core_data_stack)

๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ํ•ด๋ณด์ž๋ฉด,

  • Model(NSManagedObjectModel)
    • Core Data์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค๊ณผ ๊ทธ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ๋ฐ์ดํ„ฐ๋ชจ๋ธ (๊ฐ์ฒด ๊ทธ๋ž˜ํ”„) ํŒŒ์ผ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Store Coordinator(NSPersistenceStoreCoordinator)
    • Model์— ์˜ํ•ด ์ •์˜๋œ ๋ฐ์ดํ„ฐ๋“ค์ด ์‹ค์ œ๋กœ ์ €์žฅ๋œ Persistance store ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค. Persistence store์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ €์žฅ๋  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ๊ฒ€์ฆํ•˜๋Š” ์—ญํ•  ๋˜ํ•œ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • Context(NSManagedObjectContext)
    • Persistence Store๋ทฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
    • ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์กฐ์ž‘ํ•˜๊ณ , ์›ํ•˜๋ฉด Persistence store์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Persistence Container(NSPersistenceContainer) - iOS 10์ด์ƒ
    • ์œ„ 3๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™” ์‹œ์ผœ ๋†“์€ ๊ฐ์ฒด์ด๋‹ค.
    • iOS 10 ์ด์ „์—๋Š” ์œ„ 3๊ฐœ ์š”์†Œ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ดˆ๊ธฐํ™”ํ•ด์„œ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, iOS 10 ์ด์ƒ๋ถ€ํ„ฐ๋Š” NSPersistenceContainer ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ 3๊ฐœ ์š”์†Œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค.

 

๐Ÿ“– References

https://jcsoohwancho.github.io/2019-12-29-Core-Data-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0(1)-%EA%B0%9C%EC%9A%94/ 

 

Core Data ์‹œ์ž‘ํžˆ๊ธฐ(1) - ๊ฐœ์š”

์ด๋ฒˆ ํฌ์ŠคํŠธ๋ถ€ํ„ฐ Core Data๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋žœ๋งŒ์— ๋ธ”๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ ์‹œ๋ฆฌ์ฆˆ๋Š” ์งง์€ ํ˜ธํก์œผ๋กœ ์ตœ๋Œ€ํ•œ ์ž์ฃผ ์ž‘์„ฑํ•˜์—ฌ Core Data

jcsoohwancho.github.io

https://zeddios.tistory.com/987

 

Core Data (1)

์•ˆ๋…•ํ•˜์„ธ์š” :) Zedd์ž…๋‹ˆ๋‹ค. Core Data๋ฅผ ์‚ฌ์šฉํ•  ์ผ์ด ์ƒ๊ฒผ๋Š”๋ฐ...์ œ๊ฐ€ ์˜œ๋‚ ์— ํ•ด๋ดค๋‹จ ๋ง์ด์ฃ ..!?!?!? ๊ทผ๋ฐ ๋‹ค์‹œ ํ•˜๋ ค๋‹ˆ๊นŒ ์ƒ๊ฐ์ด ํ•˜๋‚˜๋„ ์•ˆ๋‚˜๋Š”๊ฑฐ์—์š” ๊ทธ๋•Œ๋Š” ๋ฌธ์„œ ๋ณผ ์ƒ๊ฐ๋„ ์•ˆํ–ˆ์—ˆ๋Š”๋ฐ..ใ…Žใ…Žใ…Žใ…Ž ์ด

zeddios.tistory.com

 

 

์ด๋ ‡๊ฒŒ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ดค๋Š”๋ฐ, ์•„์ง ๋ฌด์Šจ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ๋‹ค์‹œ ์ฝ์–ด๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ธฐ๊ฒ ...์ง€...!! ๋‹ค์Œ์—๋Š” entity ์ƒ์„ฑํ•˜๊ณ , ๊ทธ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด๋“ค๊ณผ ์ด๊ฒŒ ์ด์ œ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”์ง€!!์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šด๋‹ค

๋ฐ˜์‘ํ˜•