CoreData, Persistence - Team-HGD/SniffMEET GitHub Wiki

๊ฐœ์š”

CoreData๋Š” Database๊ฐ€ ์•„๋‹ˆ๋‹ค. CoreData์˜ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๊ฐ€ Persistence์ด๋‹ค.

Persistence ์™ธ์—๋„ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฌธ์„œ์—์„œ๋Š” Persistence์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

image

์„ค๋ช…

Core Data Stack

์•ฑ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

image 1

  1. NSManagedObjectModel
    • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ(Entity)์™€ ๊ทธ ์†์„ฑ(attribute)์„ ์ •์˜ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • like DB ์Šคํ‚ค๋งˆ
    • ์ด ๋ชจ๋ธ์€ Xcode์—์„œ .xcdatamodeld ํŒŒ์ผ๋กœ ์ •์˜ํ•˜๋ฉฐ, Entity, Attribute, Relationship ๋“ฑ์„ ์„ค์ •ํ•œ๋‹ค.
  2. NSPersistentStoreCoordinator
    • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์žฅ์†Œ์ธ persistent storage์™€ managed object model๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • like transaction
    • ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ฝ์–ด์˜ค๊ณ , ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, SQLite ํŒŒ์ผ์„ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ์ด ์ €์žฅ์†Œ์™€์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  3. NSManagedObjectContext
    • ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • Managed Object๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š”(fetch) ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • MOC๋Š” ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด๋ฅผ ์˜์† ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ธฐ ์ „์— ์ž„์‹œ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • MOC๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์ถ”์ ํ•˜๋ฉฐ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅ์†Œ์— ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด save() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. NSPersistentContainer
    • ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์ €์žฅํ•˜๋Š” ์žฅ์†Œ์ž…๋‹ˆ๋‹ค. Core Data๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์˜์† ์ €์žฅ์†Œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:
      • SQLite: ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜•์‹.
      • Binary: ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์ €์žฅ.
      • In-memory: ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ.
    • ์ด ์ €์žฅ์†Œ๋Š” NSPersistentStoreCoordinator์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Core Data Stack์˜ ๋™์ž‘ ํ๋ฆ„

  1. ๋ชจ๋ธ ์ƒ์„ฑ: NSManagedObjectModel์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. Persistent Store Coordinator ์„ค์ •: ์˜์† ์ €์žฅ์†Œ๋ฅผ ์„ค์ •ํ•˜๊ณ , NSPersistentStoreCoordinator๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  3. Managed Object Context ์„ค์ •: NSManagedObjectContext๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๊ณต๊ฐ„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  4. ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐ ์ €์žฅ: NSManagedObjectContext๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œํ•˜๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ save() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์˜์† ์ €์žฅ์†Œ์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

Ref.

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

https://zeddios.tistory.com/987