Core Data
โข
iOS์์ ์ข ๋ ๋ณต์กํ ๋ก์ปฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์๋ Core Data๊ฐ ์ ํฉํ๋ค๊ณ ํ๋ค. Core Data๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ์ ์๊ตฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค!
โข
Core Data๋ DB๋ ์๋๊ณ , ORM๋ ์๋ ๊ฐ์ฒด ๊ทธ๋ํ ๊ด๋ฆฌ ํ๋ ์์ํฌ ๋ค!
ย Core Data ๋?
Core Data๋ ๋์ ์๋ฏธ์์๋ ์ฑ์ ๋ชจ๋ธ ๊ณ์ธต์ด์, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ORM ๋ฑ์ ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ฐ์ฒด ๊ทธ๋ํ ๊ด๋ฆฌ ํ๋ ์์ํฌ ์ด๋ค.
ย In-Memory ๋ฐฉ์์ด ์กด์ฌ
โข
์ฌ์ฉํ๋ ค๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋๋ ๊ณผ์ ์ด ์กด์ฌํ๋ค.
โข
์ฝ์ด ๋ฐ์ดํฐ
โฆ
์ฝ๊ณ ์ฐ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์์น์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ค์์ ์ฒ๋ฆฌ (์๊ตฌ ์ ์ฅ์๋ฅผ ์์ ์ฌ์ฉํ์ง ์๊ณ , ์์ํ๊ฒ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐฉ์์ผ๋ก๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค)
โข
๋ค๋ฅธ DB ๋ฐฉ์
โฆ
ํจ์จ์ฑ์ ์ํด ์ฝ๊ธฐ ๋ชฉ์ ์ ๋ฐ์ดํฐ ์ผ๋ถ๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ค.
In-Momory๋?
โข
๋ง ๊ทธ๋๋ก, Disc์ ์ ์ฅํ์ง ์๊ณ , ํ๋ฐ์ฑ์ผ๋ก ํ
์คํธ ๊ฐ์ด ์ ๊น ์ด์ฉํ๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์ In-Memory๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
ย Entity๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ ์ ์
โข
๋ค๋ฅธ DB ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ํ
์ด๋ธ์ ํตํด ๋ฐ์ดํฐ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ค.
ย Entity? โ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ตฌ์กฐ
โข
Attribute : Entity์ ํ์ ์์ฑ๋ค์ ์ ์ํ๋ ์ญํ
โข
Relation : Entity๋ผ๋ฆฌ์ ๊ด๊ณ ์ ์
โข
Fatched Properties : ํ
ํ๋ฆฟ ํํ๋ก ๋ง๋ค์ด ๋์ ๊ฒ (๋ฐ๋ณต๋๋ ์์ฒญ์ด๋ ๊ฐ๋ง ๋ฐ๊พธ์ด ๋น์ทํ ์์ฒญ๋ค์ ๋ฌถ์ด ๋์ ๊ฒ)
ย ์ฉ์ด
SQLite | Core Data |
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ | ๋ฐ์ดํฐ ๋ชจ๋ธ ํ์ผ |
ํ
์ด๋ธ | ์ํฐํฐ |
์ปฌ๋ผ | ์ดํธ๋ฆฌ๋ทฐํธ |
์ธ๋ํค + ์กฐ์ธ | ๋ฆด๋ ์ด์
|
ย ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ์ทจ๊ธ
โข
ํ
์ด๋ธ์ ํ, ๋ ์ฝ๋ ํ๋ํ๋๋ฅผ ๋
๋ฆฝ๋ ๊ฐ์ฒด๋ก ์ฌ์ฉํ๋ค.
ย ๋ฐ์ดํฐ ์ ๊ทผ ๋ฐฉ๋ฒ : DAO ํจํด
โข
SQLite์์ DAO ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ๊ฐ์ฒด๋ก ์ ๊ทผํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ฌ์ฉ
โข
๋จ, Core Data์์๋ DAO ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ ๊ณตํ๋ค.
ย ๊ด๋ฆฌ ๊ฐ์ฒด (Managed Object) : MO ํจํด
โข
VO (Value Object) ํจํด๊ณผ ๋์ผ
โข
Core Data์์๋ MO ํจํด์ด๋ผ ํ๋ฉฐ, MO ํด๋์ค์ ํ๋กํผํฐ๋ฅผ Entity์ ๊ฐ ์ดํธ๋ฆฌ๋ทฐํธ์ ์ง์ ์ฐ๊ฒฐ์ํค๋ ๋ฐฉ์์ ์ฌ์ฉ (ORM ๋งคํ)
ย ORM(Object Relation Mapping) ๋งคํ
โข
๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋์ผ๋ก ๋งคํ ์์ผ์ฃผ๋ ๋ฐฉ์
๊ฐ์ฒด ๊ทธ๋ํ ๊ด๋ฆฌ์
Core Data๋ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ธ ๊ณ์ธต์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๋ ํ๋ ์์ํฌ์ด์, ๋ผ์ดํ ์ฌ์ดํด์ด๋ ์์์ฑ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฐ์ฒด ๊ทธ๋ํ ๊ด๋ฆฌ์(Object Graph Manager) ์ด๋ค.
ย ๊ฐ์ฒด ๊ทธ๋ํ(Object Graph)๋?
โข
๊ฐ์ฒด๋ฅผ ํ๋์ ๋
ธ๋๋ก ๊ฐ์ฃผํ๊ณ (๊ทธ๋ํ ๊ฐ๋
), ์๋ก ๊ฐ์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ๋งํฌ๋ก ์ด์ด๋ณด๋ฉด ๋ค์ํ๊ฒ ์ฐ๊ฒฐ๋๋ ๋ณตํฉ์ ์ธ ๊ทธ๋ํ ํํ์ ๋ํ์ด๋ค.
ย ๊ฐ์ฒด : ๋
๋ฆฝ์ ์ด๊ณ ์์ฒด์ ์ธ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๋ฉด์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ผ๋ก ์ด๋ฃจ์ด์ง ๋จ์ ๊ตฌ์ฑ์ฒด
ย ํน์ฑ
โข
Core Data๊ฐ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋ด๋นํ๋ค๋ ๊ฒ์ ๊ฐ์ฒด๋ผ๋ฆฌ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ, ๊ทธ ๊ฐ์ฒด๋ผ๋ฆฌ๋ ์์์ ์ผ๋ก ๋๊ธฐํ
โข
์ฐ๊ฒฐ๋ A, B ๋ ๊ฐ์ฒด์์ A ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ฉด, ์๋์ผ๋ก B ๊ฐ์ฒด ๋ฐ์ดํฐ๋ ์ญ์
ย Core Data์ ๊ตฌ์กฐ
ย ๊ด๋ฆฌ ๊ฐ์ฒด (Managed Object) : NSManagedObject
ํ
์ด๋ธ์์ ๋ ์ฝ๋๋ฅผ ์ฝ์ ๋, Core Data์์๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋๋ฐ, ์ด ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ์๋ฃํ์ด๋ค.
โ ์ง์๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋, DB์์ ์ง์๋ค์ ์ ๋ณด๋ฅผ ์ฝ์ด์ค๋ฉด ์ด๊ฒ์ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ์๊ณ , VO ์ธ์คํด์ค์ ๋ด์ ์ฌ์ฉ, ์ด๋ VO๊ฐ ๊ด๋ฆฌ ๊ฐ์ฒด์ ํด๋นํ๋ค.
ย ๊ด๋ฆฌ ๊ฐ์ฒด ์ปจํ ์คํธ (Managed Object Context)
1.
MO๋ฅผ ๊ฐ์ง๊ณ CRUD ์ญํ (Core Data์์ ์์๋๋ ๋ชจ๋ ๊ด๋ฆฌ ๊ฐ์ฒด๋ ์ปจํ
์คํธ์ ๋ด๊ฒจ ๊ด๋ฆฌ๋๋ค)
โข
์ปจํ
์คํธ์ ๋ด๊ธด ๊ฐ์ฒด๋ ์๊ตฌ ์ ์ฅ์๋ก ๋ณด๋ด ์ ์ฅ, ์ญ์ ๊ฐ๋ฅ
โข
Core Data๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ์ํ๋ก ์ฒ๋ฆฌ๋๋๋ฐ, ์ด ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ โ์ปจํ
์คํธโ๋ฅผ ์๋ฏธํ๋ค.
2.
โ์๊ตฌ ์ ์ฅ์โ์ โ์๊ตฌ ์ ์ฅ์ ์ฝ๋ฐ๋์ดํฐโ์ ๋ํ ๊ด๋ฆฌ์ ์ญํ
โข
์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ์๊ตฌ ์ ์ฅ์์ ์์ฒญ(DAO ํจํด๊ณผ ์ ์ฌ)
ย ์๊ตฌ ์ ์ฅ์ ์ฝ๋๋ค์ดํฐ (Persistent Store Coordinator)
์ปจํ
์คํธ์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด์ ๋ค์ํ ์๊ตฌ ์ ์ฅ์๋ค์ ์ ๊ทผ์ ์กฐ์ ํ๊ณ ์
์ถ๋ ฅ์ ๋ด๋นํ๋ค.
ย ํ๋ฆ
1.
์ปจํ
์คํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค.
2.
์ฝ๋๋ค์ดํฐ๊ฐ ์์ฒญ์ ๋ฐ๊ณ , ์๊ตฌ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ค.
3.
์ฝ๋ ๋ค์ดํฐ๊ฐ MO ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๋ฐํํ๋ค.
ย ๊ด๋ฆฌ ๊ฐ์ฒด ๋ชจ๋ธ (Managed Object Model)
Entity์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๊ฐ์ฒด์ธ ๋์์ ์ด๋ฅผ ๋ฐํ์ผ๋ก MO ํจํด์ ๋ชจ๋ธ ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ค.
ย MO vs MOM(Managed Object Model)
โข
MOM
โฆ
ํด๋์ค์ด์ ํ์, ๊ตฌ์กฐ๋ฅผ ์๋ฏธ
โฆ
๋ฐ์ดํฐ๋ฅผ CRUD ํ์ง ์์ผ๋ฉฐ, ๊ด๋ฆฌ ๊ฐ์ฒด์ ๊ฐ ์์๋ฅผ ์ ๋๋ก ๋ด์ ์ ์๋๋ก ์ ์ฅ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํ ํ๋ค.
โข
MO
โฆ
MOM์ ๋ฐํ์ผ๋ก ์์ฑ๋ ์ธ์คํด์ค
ย ์๊ตฌ ๊ฐ์ฒด ์ ์ฅ์ (Persistent Object Store)
์ด๊ธฐ์๋ ์ง์ ์ฝ์ ์ ์์ผ๋ฉฐ, ๋๋ฒ๊น
์ ์ฉ์ดํ XML ์ ์ฅ์ ํ์
์ ์ฌ์ฉํ๋ฉฐ, ์ฑ์ ๋ฐฐํฌํ ๋น์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ คํ์ฌ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฉ์ด
ํ์
| ์ค๋ช
|
์ธ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์ ํ์
(NSInmemoryStoreType) | ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ์ ์ฅ ๋ฐฉ์(์๊ตฌ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ)
์ฑ ์ข
๋ฃ์ ๋ฐ์ดํฐ ๋ณด์กด์ด ๋์ง ์์ |
ํ๋ซ ๋ฐ์ด๋๋ฆฌ ์ ์ฅ์ ํ์
(NSBinaryStoreType) | ๋ฐ์ดํฐ๋ฅผ ๋จ์ ๋ฐ์ด๋๋ฆฌ ํ์ผ ํ์์ผ๋ก ์ ์ฅ
์ฅ์ ์ ์กฐํ ์ฑ๋ฅ ๊ฐ์ , ๋จ์ ์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ ์ฆ๊ฐ |
XML ์ ์ฅ์ ํ์
(NSXMLStoreType) | ์์์ฑ
์ฅ์ ์ ์ง์ ์ด์ด๋ณด๊ณ ํ์ธ ๊ฐ๋ฅ(์ด๊ธฐ ๋๋ฒ๊น
์ฉ์ด), ๋จ์ ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆผ |
SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค
(NSSQLiteStoreType) | ๊ฐ์ฒด ๊ทธ๋ํ ์ค ์ผ๋ถ๋ง ๋ก๋ฉ
๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ |
โ๏ธCore Data์ ํ๊ณ
ย In-momory ๋ฐฉ์
๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ง๋ ๊ฐ์ฒด์ ๋ํด์๋ง ์์ ์ด ๊ฐ๋ฅํ๋ค
(SQLite๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด ๋ชจ๋๋ฅผ ๋ก๋ฉํ์ง ์์๋, ์ต์ํ์ ๋ฐ์ดํฐ๋ง ๋ก๋ํ๋ค)
ย ๋ฐ์ดํฐ ๋ก์ง์์์ ํ๊ณ
์ค๋ณต๋ ๊ฐ์ ์
๋ ฅ์ ๋ฐฉ์งํ๋ โUniqueโ ํค๊ฐ ์์ผ๋ฏ๋ก, ์ดํ๋ฆฌ์ผ์ด์
์์ ๋น์ฆ๋์ค ๋ก์ง์ ํตํด ์ฒ๋ฆฌํด์ผ ๊ฐ๋ฅํ๋ค.
ย thread-safe ํ์ง ์๋ค (์ฑ๊ธ ์ค๋ ๋ ํ๊ฒฝ)
thread ๋ผ๋ฆฌ Lock ๊ธฐ๋ฅ(๋ค๋ฅธ thread๊ฐ ์นจ๋ฒํ์ง ๋ชปํ๋ ๊ฒ)์ด ์กด์ฌํ์ง ์๋๋ค. (๋จ Lock์ ๊ฑธ์ง ์์์ผ๋ก์จ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค)
โ SQLite ์ญ์ ์ฑ๊ธ ์ค๋ ๋๋ง ์ง์ํ๋ค