ํฐ์คํ ๋ฆฌ ๋ทฐ
Kingfisher(0): ์ด๋ฏธ์ง ๋ก๋ฉ/์บ์/๋์์ฑ “ํ์ ๊ฐ๋ ” ์ ๋ฆฌ
Horang๐ฏ 2026. 2. 3. 22:00Intro
Kingfisher ์ฝ๋๋ฅผ ๋ณด๊ธฐ ์ ์, ๋จผ์ ๋จธ๋ฆฟ์ ๊ฐ๋ ์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
์ด๋ฏธ์ง ๋ก๋ฉ์ ๊ฒ์ผ๋ก๋ ๋จ์ํ๋ค.
- ๋ด๋ ค๋ฐ๊ณ (Network)
- ํด์ํ๊ณ (Decode)
- ๋ณด์ฌ์ค๋ค(Display)
๊ทธ๋ฐ๋ฐ ์ฑ์ด ๋๋ ค์ง๋ ์๊ฐ์ ๊ฑฐ์ ํญ์ ์ฌ๊ธฐ์ ์์ํ๋ค.
- ๋คํธ์ํฌ๊ฐ ํ๋ค๋ฆฌ๊ฑฐ๋
- ๋์ฝ๋ฉ์ด ๋์ ๋๊ฑฐ๋
- ํ์ ํ์ด๋ฐ(UI)์ด ๋ฐ๋ฆฌ๊ฑฐ๋
๊ทธ๋์ ์ด๋ฏธ์ง ์บ์๋ “ํธ์ ๊ธฐ๋ฅ”์ด ์๋๋ผ, ์ค๋ฌด์์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์งํฑํ๋ ์ค๊ณ๊ฐ ๋๋ค.
1. ์ด๋ฏธ์ง ๋ก๋ฉ์ ๋น์ฉ ๋ชจ๋ธ
์ด๋ฏธ์ง๋ ๊ฒฐ๊ตญ ์ด ์์๋ก ๋์ ์ด๋ค.
- Network: ์ธ๋ถ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๋์ด ํฌ๋ค.
- Decode: ๊ณ ์ ๋น์ ๊ฐ๊น๊ณ , ์๊ฐ๋ณด๋ค ๋น์ธ๋ค.
- Display: UI ํ์ด๋ฐ(์คํฌ๋กค, ๋ฆฌ์คํธ)๊ณผ ๋ง๋ฌผ๋ฆฌ๋ฉด ์ฒด๊ฐ์ด ์ปค์ง๋ค.
๊ฒฐ๊ตญ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ์ํด ๋คํธ์ํฌ๋ง ์ค์ธ๋ค๊ณ ๋์ด ์๋๋ค.
๋์ฝ๋ฉ/ํ์ ๋น์ฉ๊น์ง ๊ฐ์ด ์ค์ฌ์ผ “์ง์ง ๋น ๋ฅธ ํ๋ก์ธ์ค”๊ฐ ๋๋ค.
1-1. ๊ทธ๋์ ์บ์(Cache)๋ฅผ ๋์ ํ๋ค
๋น์ฉ์ด ํฐ ์์
์ ๋งค๋ฒ ๋ฐ๋ณตํ๋ฉด, ์ฑ์ ๋๋ ค์ง ์๋ฐ์ ์๋ค.
๊ทธ๋์ ์ด๋ฏธ์ง ๋ก๋ฉ์์๋ ์์ฐ์ค๋ฝ๊ฒ ์บ์(cache) ๋ผ๋ ๊ฐ๋
์ด ๋ฑ์ฅํ๋ค.
- ์บ์๋ ๋ฌด์์ธ๊ฐ?
์บ์๋ ํ ๋ฌธ์ฅ์ผ๋ก ์ ์ํ ์ ์๋ค.
๋น์ผ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋๊ณ , ๋ค์์ ๊ฐ์ ์์ฒญ์ด ์ค๋ฉด ์ฌ์ฌ์ฉํ๋ ๊ฒ.
์ด๋ฏธ์ง ๋ก๋ฉ์์ “๋น์ผ ์์ ”์ ๋ณดํต ์ด ๋ ๊ฐ์ง๋ค.
- ๋คํธ์ํฌ ๋ค์ด๋ก๋(์ง์ฐ/๋ณ๋)
- ๋์ฝ๋ฉ(๊ณ ์ ๋น/๋์ )
์บ์๊ฐ ์์ผ๋ฉด, ํ ๋ฒ์ ๋ค์ด๋ก๋/๋์ฝ๋ฉ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด์
“๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์น๋ฅด๋ ์ด ๋น์ฉ”์ ์ค์ผ ์ ์๋ค.
ํ์ง๋ง ์บ์๋ ๊ณต์ง๊ฐ ์๋๋ค.
์บ์๋ ๊ณต๊ฐ(๋ฉ๋ชจ๋ฆฌ/๋์คํฌ) ์ ์จ์ ์๊ฐ์ ์ฌ๋ ๊ตฌ์กฐ๋ค.
์ฆ, ์บ์๋ฅผ ๋์
ํ๋ ์๊ฐ๋ถํฐ ์ ์ฑ
๊ณผ ๋์์ฑ์ด ๋ฐ๋ผ์จ๋ค.
2. 2๋จ ์บ์: Memory → Disk → Network
์ด๋ฏธ์ง ์์ฒญ์ด ๋ค์ด์ค๋ฉด, ์บ์ฑ ํ๋ฆ์ ๊ฑฐ์ ์ด๋ ๊ฒ ํ๋ฅธ๋ค.
์์ฒญ
→ ๋ฉ๋ชจ๋ฆฌ ์บ์ ํ์ธ (hit๋ฉด ์ฆ์ ๋ฐํ)
→ miss๋ฉด ๋์คํฌ ์บ์ ํ์ธ (hit๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ณ ๋ฐํ)
→ miss๋ฉด ๋คํธ์ํฌ ๋ค์ด๋ก๋
→ ๋์ฝ๋ฉ
→ ๋ฉ๋ชจ๋ฆฌ + ๋์คํฌ ์ ์ฅ
→ ๋ฐํ
์ด ๊ตฌ์กฐ์ ํต์ฌ์ “์๋”๋ง์ด ์๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์บ์๋ ๊ฐ์ฅ ๋น ๋ฅด๋ค
- ๋์คํฌ ์บ์๋ ๊ฐ์ฅ ์ค๋ ์ฐ๋ค
- ๋คํธ์ํฌ๋ ๊ฐ์ฅ ๋ถ์์ ํ๋ค
์ฆ, 2๋จ ์บ์๋ ์๋ / ์ง์์ฑ / ๋ณต๊ตฌ๋ฅผ ๋ถ๋ฆฌํด์ ๊ฐ์ ธ๊ฐ๋ ์ ํ์ด๋ค.

3. Memory vs Disk
๋ ๋ค ์บ์์ง๋ง, ์ ์ฅ ํํ๊ฐ ๋ค๋ฅด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์บ์: ๊ฐ์ฒด(์ธ์คํด์ค) ๊ทธ๋๋ก
๋ฐ๋ก ๊บผ๋ด์ ์ฐ๋ ํํ(์: UIImage)๋ก ์ ์ฅํ๋ค.
์ฆ, ๋ฉ๋ชจ๋ฆฌ ์บ์ hit = ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ์ ๊ฐ๊น๋ค.
- ๋์คํฌ ์บ์: ์ง๋ ฌํ๋ Data/bytes
ํ์ผ๋ก ์ ์ฅํ๋ ค๋ฉด UIImage → Data๊ฐ ํ์ํ๊ณ ,
๋ค์ ์ฝ์ผ๋ฉด Data → UIImage๊ฐ ํ์ํ๋ค.
let data = image.pngData()!
try data.write(to: fileURL)
let loaded = try Data(contentsOf: fileURL)
let image = UIImage(data: loaded)
์ฌ๊ธฐ์ ์ค์ํ ํฌ์ธํธ๋
Disk hit์ Network miss์ผ ๋ฟ, “๋น์ฉ 0”์ด ์๋๋ค.
(์ฝ๊ธฐ I/O + Data → Image ๋ณํ ๋น์ฉ์ ๋จ๋๋ค)
4. Decoding vs Serialization
์ด ๋์ ์์ด ๋งํ๋ฉด ์บ์ ์ค๊ณ๊ฐ ํ๋ ค์ง๋ค.
- ์ง๋ ฌํ(Serialization): UIImage → Data
์ ์ฅ/์ ์ก ๊ฐ๋ฅํ ๋ฐ์ดํธ ํํ๋ก ๋ณํ - ๋์ฝ๋ฉ(Decoding): Data → ๋ ๋๋ง ๊ฐ๋ฅํ ์ด๋ฏธ์ง ํํ
ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋๋ก ๋ด๋ถ ํํ(ํฝ์ ์ค๋น ํฌํจ)์ผ๋ก ์ค๋น
๋์คํฌ ์บ์๋ ๋ณดํต Data๋ฅผ ์ ์ฅํ๋ค.
๊ทธ๋์ ๋์คํฌ์์ ๊บผ๋ด๋ ์๊ฐ์๋, ๋ค์ ๋น์ฉ์ด ์๊ธธ ์ ์๋ค.
- ๊ฐ์ฒด ์์ฑ ๋น์ฉ
- ๋์ฝ๋ฉ ๋น์ฉ(๋๋ ๊ทธ์ ์คํ๋ ์ค๋น ๋น์ฉ)
์ฆ,
- Disk hit = “๋คํธ์ํฌ ๋น์ฉ์ ํผํ๋ค”
- Disk hit ≠ “๋์ฝ๋ฉ ๋น์ฉ์ด ์ฌ๋ผ์ก๋ค”
5. ์บ์๋ ์ ์ฑ ์ด๋ค
์บ์๋ ๋ฌดํํ์ง ์๋ค.
๊ทธ๋์ ์ ์ฅ์ ์์ํ๋ฉด ๊ณง๋ฐ๋ก ์ ์ฑ
์ด ํ์ํด์ง๋ค.
- Eviction(๊ต์ฒด): ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ ๋ฌด์์ ๋ฒ๋ฆด์ง
- Expiration(๋ง๋ฃ): ์ธ์ ๊น์ง ์ ํจํ์ง
- Cleanup(์ ๋ฆฌ): ์ธ์ ์ค์ ๋ก ์ญ์ ํ ์ง
์ฌ๊ธฐ์ ํธ๋ ์ด๋์คํ๊ฐ ์๊ธด๋ค.
- ์ ํํ๊ฒ ๊ด๋ฆฌํ ์๋ก → ๋ฉํ๋ฐ์ดํฐ/์ฐ์ฐ/๋๊ธฐํ ๋น์ฉ์ด ์ค๋ฅธ๋ค
- ๋จ์ํ๊ฒ ํ ์๋ก → ์์ธก ๊ฐ๋ฅ์ฑ/์ ํฉ์ฑ์ด ๋จ์ด์ง ์ ์๋ค
6. iOS์์ ์บ์๊ฐ ‘์ ์ฅ์’๊ฐ ์๋ ์ด์
์ฌ๊ธฐ๊น์ง ์ค๋ฉด ์ด๋ฐ ์๊ฐ์ด ๋ ๋ค.
“์บ์๋ ๊ทธ๋ฅ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ฉด ๋๋ ๊ฑฐ ์๋?”
ํ์ง๋ง iOS์์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ ๋์ด ์๊ณ , OS๊ฐ ๊ฐํ๊ฒ ๊ฐ์ ํ๋ค.
์ฆ, ์บ์๋ “๋ด๊ฐ ์ก๊ณ ์์ผ๋ฉด ์ ์ง๋๋ ์ ์ฅ์” ๊ฐ ์๋๋ค.
์บ์์ ์ ์ ๋ ๋ณดํต ์๋์ ๊ฐ๋ค.
์์ผ๋ฉด ๋น ๋ฅด๋ค. ํ์ง๋ง ์์ด์ ธ๋ ์์ ํด์ผ ํ๋ค. (best-effort)
๊ทธ๋์ Apple์ ์บ์๋ฅผ “์ ํํ ์ ์ฅ์”๋ก ๋ง๋ค๊ธฐ๋ณด๋ค๋,
์บ์์ ๋ง๋ ์ปจํ
์ด๋๋ฅผ ์ ๊ณตํ๋ค. ๊ทธ ๋ํ๊ฐ NSCache๋ค.
7. NSCache
NSCache๋ ์ด๋ฆ ๊ทธ๋๋ก ์บ์ ์ฉ๋๋ก ์ค๊ณ๋ ์ปจํ ์ด๋๋ค.
์ฌ๊ธฐ์ ๊ด์ ์ ํ๋๋ง ๊ธฐ์ตํ๋ฉด ๋๋ค.
NSCache๋ ‘์ ํํ ์ ์ฅ์’๊ฐ ์๋๋ผ, ‘๋ฒ๋ ค์ ธ๋ ์์ ํ ์บ์’์ ๊ฐ๊น๋ค.
์ฆ, ์บ์ miss๋ฅผ ๊ธฐ๋ณธ ์ ์ ๋ก ์ค๊ณํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ NSCache๊ฐ “์บ์ ์ปจํ ์ด๋”๋ก ์์ฃผ ์ฐ์ด๋ ์ด์ ๋ ๋ณดํต ์๋ ์ฑ์ง ๋๋ฌธ์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ํฉ์ ๋ฐ๋ผ ์บ์๊ฐ ์๋์ผ๋ก ๋น์์ง ์ ์๋(eviction) ๋ฐฉํฅ์ผ๋ก ์ค๊ณ๋์ด ์๊ณ
- ๊ธฐ๋ณธ์ ์ธ set/get/remove๋ ๊ฐ ๋ฉ์๋ ํธ์ถ ๋จ์์์ ๋ฉํฐ ์ค๋ ๋ ์ ๊ทผ์ ํ์ฉํ๋๋ก ์ค๊ณ๋์ด ์๋ค. (Thread Safe)
- ํค๋ฅผ copyํ์ง ์๋๋ค
์ด์ ์ด “ํค๋ฅผ copyํ์ง ์๋๋ค”๊ฐ ์ ์ค์ํ์ง ๋ณด์.
7-1. (Deep) NSCache๋ key๋ฅผ copyํ์ง ์๊ณ retain ํ๋ค
NSCache๋ NSMutableDictionary์ ๋ค๋ฅด๊ฒ, ํค๋ฅผ copyํ์ง ์๋๋ค.
์ฆ, ๋ฃ์ ํค ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก retain(์ฐธ์กฐ ์ ์ง) ํ๋ค.
์ด๊ฒ ์ ์ค์ํ ๊น?
- ํค๊ฐ mutable(๋ณํ ์ ์๋) ์ฐธ์กฐ ํ์ ์ด๊ณ
- ํค์ ๋๋ฑ์ฑ/ํด์์ ์ํฅ์ ์ฃผ๋ ๊ฐ์ด ๋ฐ๋๋ฉด
- ์บ์ hit/miss๊ฐ ๊ผฌ์ผ ์ ์๋ค
๊ทธ๋์ ์ค์ NSCache๋ฅผ ์ฌ์ฉํ ๋๋ ๋ณดํต ํค๋ก ๋ถ๋ณ(immutable) ๊ฐ์ฒด๋ฅผ ์ด๋ค.
(๋ํ์ ์ผ๋ก NSString)
8. ํค๋ ์ ๋ณดํต NSString์ธ๊ฐ
์ฌ๊ธฐ์ Swift ์ฌ์ฉ์๋ค์ด ํญ์ ๋ง์ฃผ์น๋ ์ ์ฝ์ด ํ๋ ๋์จ๋ค.
NSCache<KeyType, ObjectType>์ KeyType/ObjectType์ ํด๋์ค ํ์ (AnyObject) ์ด์ด์ผ ํ๋ค.
Swift์ String์ ๊ฐ ํ์
(struct) ์ด๋ค.
๊ทธ๋์ String์ NSCache์ key ํ์
์ผ๋ก ์ง์ ์ธ ์ ์๊ณ ๋ณดํต ์ด๋ ๊ฒ ๋ง์ด ์ด๋ค.
let cache = NSCache<NSString, UIImage>()
cache.setObject(image, forKey: key as NSString)
์ ๋ฆฌํ๋ฉด,
- NSCache๋ ํค๋ฅผ copyํ์ง ์๊ณ retain ํ๋ค
→ ํค๋ “๋ถ๋ณ”์ด ์์ ํ๋ค - NSCache๋ ํค ํ์
์ด AnyObject(ํด๋์ค) ์ฌ์ผ ํ๋ค
→ Swift String์ ์ง์ ๋ชป ์ฐ๊ณ NSString์ผ๋ก ๋ธ๋ฆฌ์งํ๋ค
๋ค์ ๋งํด, NSCache๋ ์ ๋ค๋ฆญ ์ ์ฝ์ด AnyObject๋ผ์ Swift ๊ฐ ํ์
์ ๊ทธ๋๋ก Key/Object๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋์ Key๋ NSString์ฒ๋ผ ํด๋์ค ํ์
์ผ๋ก ๋ธ๋ฆฌ์ง/๊ตฌ์ฑํด์ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
9. Thread-safe ≠ Atomic
NSCache๋ ๊ธฐ๋ณธ API๊ฐ ๋ฉํฐ ์ค๋ ๋์์๋ ์ธ ์ ์๊ฒ ์ค๊ณ๋์ด ์๋ค.
๊ทธ๋ผ ๋์์ฑ ๋ฌธ์ ๋ ๋์ผ๊น?
์ฌ๊ธฐ์๋ถํฐ ‘์์์ฑ(atomicity)’ ๋ฌธ์ ๊ฐ ์์๋๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ์ด๊ฑฐ๋ค.
- NSCache๊ฐ ๋ณด์ฅํ๋ ๊ฑด ๋ณดํต ๋จ์ผ ๋ฉ์๋ ํธ์ถ ๋จ์์ ์์ ์ฑ
- ์ค๋ฌด์์ ๊นจ์ง๋ ๊ฑด ๋ณตํฉ ๋ก์ง ๋จ์(์์์ฑ)
9-1. check-then-act๊ฐ ๊นจ์ง๋ ์ด์ (์ค๋ณต work)
if cache.object(forKey: k) == nil { // check
cache.setObject(makeValue(), forKey: k) // act
}
๋ง์ฝ ์๋ก ๋ค๋ฅธ ์ค๋ ๋์์ ๋์์ check๋ฅผ ์งํํด์ ๋ ๋ค “nil”์ด๋ผ๊ณ ํ๋จํ๋ฉด,
- Thread A๋ makeValue()๋ฅผ ์คํํ๊ณ
- Thread B๋ makeValue()๋ฅผ ์คํํ๋ค.
์ฆ, “ํ ๋ฒ๋ง ๋ง๋ค๊ณ ์ถ์๋ ๊ฐ ์์ฑ ์์ ”์ด ์ค๋ณต์ผ๋ก ์ํ๋ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค setObject๋ฅผ ํธ์ถํ๋ฉด,
์บ์ ์
์ฅ์์๋ ๊ฐ์ key์ ๋ํด ๋ง์ง๋ง์ set๋ ๊ฐ์ผ๋ก ๋ฎ์ด์จ์ง ๋ฟ์ด์ง๋ง,
์ด๋ฏธ ๋น์ผ ์์ (๋ค์ด๋ก๋/๋์ฝ๋ฉ/๊ฐ๊ณต)์ ๋ ๋ฒ ์ํ๋ ๋ค๋ค.
์ฆ, ์ค๊ฐ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ผ๋ฉด “ํ ๋ฒ๋ง ๋ง๋ค๊ธฐ” ๊ฐ์ ์๋(์์์ฑ) ๊ฐ ๊นจ์ง๊ณ ,
๊ฒฐ๊ณผ๋ณด๋ค ๋ ํฐ ๋ฌธ์ ๋ก ์ค๋ณต ๋น์ฉ์ด ๋ฐ์ํ๋ค.
9-2. NSCache + ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ถ์ด๋ ์๊ฐ, ์์์ฑ์ด ํ์ํด์ง๋ค
์ค์ ์บ์๋ NSCache๋ง ์ฐ์ง ์๋๋ค.
- ๋ง๋ฃ ์๊ฐ
- lastAccessed
- keys ๋ชฉ๋ก
- cost/size ์ถ์
์ด๋ฐ ์ํ ์ ๋ณด๋ฅผ ๊ฐ๋ ์๊ฐ ์บ์๋
“์บ์ + ์ํ(๋ฉํ๋ฐ์ดํฐ)” ๋ฅผ ๋์์ ๊ณ ๋ คํด์ผ ํ๋ ์ํ๊ฐ ๋๋ค.
๊ทธ๋๋ถํฐ๋ ๋จ์ํ thread-safe๊ฐ ์๋๋ผ,
NSCache ์
๋ฐ์ดํธ์ ๋ฉํ๋ฐ์ดํฐ ์
๋ฐ์ดํธ๋ฅผ ํ ๋ฉ์ด๋ฆฌ๋ก ๋ฌถ๋ ์ค๊ณ(์์์ฑ) ๊ฐ ํ์ํด์ง๋ค.
10. ๋ง๋ฃ(Expiration)์ ์ ๋ฆฌ(Cleanup)
๋ง๋ฃ๋ ๋ณดํต ๋ ๊ฐ์ง ๊ธฐ์ค์ผ๋ก ์ก๋๋ค.
- TTL(Time To Live): ์์ฑ ์์ ๊ธฐ์ค
- lastAccessed: ๋ง์ง๋ง ์ ๊ทผ ์์ ๊ธฐ์ค
๊ทธ๋ฆฌ๊ณ ์ญ์ (์ ๋ฆฌ) ํ์ด๋ฐ์ ๋ณดํต 3๊ฐ์ง๋ก ๋๋๋ค.
- ์ ๊ทผ ์ ์ ๋ฆฌ: ์ฝ์ ๋ ๋ง๋ฃ๋ฉด ์ญ์
- ์ฃผ๊ธฐ์ ์ ๋ฆฌ: ๋ฐฑ๊ทธ๋ผ์ด๋/ํ์ด๋จธ ๊ธฐ๋ฐ
- ํผํฉ: ๋์ ์์ด์ ์ด์
์ฌ๊ธฐ์๋ ํธ๋ ์ด๋์คํ๊ฐ ์๋ค.
- ์ ๊ทผ ์ ์ ๋ฆฌ: ๋จ์ํ์ง๋ง “์ ๊ทผ ์๊ฐ”์ด ๋ฌด๊ฑฐ์์ง ์ ์์
- ์ฃผ๊ธฐ์ ์ ๋ฆฌ: ๋ถํ๋ฅผ ๋ถ์ฐํ์ง๋ง ์ค์ผ์ค๋ง/๋๊ธฐํ๊ฐ ํ์ํจ
11. Jetsam: ์บ์ miss๊ฐ ๊ธฐ๋ณธ์ธ ์ด์
iOS์์ ๋ฉ๋ชจ๋ฆฌ๋ “๋ด๊ฐ ์ก๋๋ค๊ณ ์ ์ง๋๋ ์์”์ด ์๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ด ์ค๋ฉด,
- ์บ์๋ ๋น์์ง ์ ์๊ณ
- ์ฌํ๋ฉด ์ฑ์ด ์ข ๋ฃ๋ ์ ์๋ค (Jetsam)
๊ทธ๋์ ๋ฉ๋ชจ๋ฆฌ ์บ์์ ์ ์ ๋ ์ด๋ ๊ฒ ๋ฐ๋๋ค.
“์บ์ hit์ ๊ธฐ๋ํ๋, miss๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ค๊ณํ๋ค.”
๊ทธ๋ฆฌ๊ณ ๋์คํฌ ์บ์์ ์๋ฏธ๋ ์ฌ๊ธฐ์ ์ปค์ง๋ค.
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์๊ฐ๋
- ์ฑ์ด ์ฌ์์ํด๋
- ๋ณต๊ตฌ ๋น์ฉ์ ๋ฎ์ถ ์ ์๊ธฐ ๋๋ฌธ
๋ง๋ฌด๋ฆฌ
์ด๋ฏธ์ง ์บ์๋ ๋จ์ํ “์ ์ฅํด๋๊ณ ์ฌ์ฌ์ฉ”์์ ๋๋์ง ์๋๋ค.
๋คํธ์ํฌ/๋์ฝ๋ฉ/ํ์๋ผ๋ ๋น์ฉ ๋ชจ๋ธ ์์์,
2๋จ ๊ตฌ์กฐ(Memory/Disk) ์ ์ ์ฑ (Eviction/Expiration/Cleanup) ์ ์ค๊ณํด์ผ ํ๊ณ ,
๊ทธ ๊ณผ์ ์์ ๋์์ฑ(์์์ฑ)๊ณผ iOS์ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ(Jetsam) ์ด๋ผ๋ ํ์ค์ ๊ฐ์ด ๋์ด์๊ฒ ๋๋ค.
์ด๋ฒ ์ ๋ฆฌ์ ๊ฒฐ๋ก ์ ํ๋๋ค.
์บ์๋ ‘์ ํํ ์ ์ฅ์’๊ฐ ์๋๋ผ, ‘๊นจ์ ธ๋ ์์ ํด์ผ ํ๋ ์ต์ ํ ๋ ์ด์ด’๋ค.
๊ทธ๋์ ์บ์๋ฅผ ์ธ ๋๋ ํญ์ ์ด๋ ๊ฒ ์ง๋ฌธํด์ผ ํ๋ค.
- ์ง๊ธ ์ค์ด๋ ค๋ ๋น์ฉ์ ๋ฌด์์ธ๊ฐ? (Network / Decode / Display)
- ์ด ์ต์ ํ๋ ์ด๋ค ๋น์ฉ์ ์๋ก ๋ง๋ค์๋๊ฐ? (๊ณต๊ฐ / ์ ์ฑ / ๋๊ธฐํ)
- ๊ทธ๋ฆฌ๊ณ OS๊ฐ ๊ฐ์ ํ์ ๋๋ ์์ ํ๊ฐ? (eviction / Jetsam)
์ด์ ๋ค์ ๊ธ์์๋ Kingfisher๊ฐ ์ด๋ป๊ฒ ์ด๋ฐ ๊ฐ๋
, ๋ฌธ์ ์ํฉ ๋ฑ์ ๊ณ ๋ คํ๊ณ ์ด๋ค ์์ผ๋ก ํด๊ฒฐํ๋์ง์ ๋ํด์ ํ์ตํ๋ฉด ๋๋ค.
์ด ์ง๋ฌธ๋ค์ด ์ค์ ๊ตฌํ์์ ์ด๋ค ํํ๋ก ๋๋ฌ๋๋์ง ํ์ธํด๋ณด๋ ค๊ณ ํ๋ค.

'๐ Apple > Library Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๋ ๋ฒ: Problem โ Solution โ Trade-off (0) | 2026.02.03 |
|---|
- ์๋ฃ ๊ตฌ์กฐ
- ์์ง๋์ด
- branchless
- cpu
- BOJ
- 2025๋ ํ๊ณ
- spatial locality
- 24๋ ํ๊ณ
- tipkit
- 2026๋ ๊ณํ
- Xcode
- Jetsam
- ํ๊ณ
- temporal locality
- C++
- page fault
- ๊ฐ๋ฐ์
- misprediction
- Meet agentic coding in Xcode
- Swift
- ๋ชจ๋ฐ์ผ์์ง๋์ด
- cs
- ํ
- Memory
- ์คํ
- TLB
- IOS
- ์คํฐ๋
- xcode26.3
- speculative
- Total
- Today
- Yesterday