๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

๋ฉ”์ดํŠธ ๋Ÿฌ๋„ˆ ์•ฑ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๋Š” ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค!

 

GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ

ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ. Contribute to boostcampwm-2021/iOS06-MateRunner development by creating an account on GitHub.

github.com

์—ฌ๊ธฐ์„œ ์ €ํฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”!

 

๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

์ถฉ๊ฒฉ๊ณผ ๊ณตํฌ.. ๋‚ด๊ฐ€ ๋งŒ๋“  ์ด๋ฏธ์ง€ ์บ์‹ฑ์€ ๋ฐ˜์ชฝ์งœ๋ฆฌ์˜€๋‹ค!

๋ฟŒ๋“ฏํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ๋Š” ๋งˆ์น˜๊ณ  ํ•œ๋‹ฌ์ด ๋„˜์–ด์„œ์•ผ ๊ตฌํ˜„ํ–ˆ๋˜ ์ด๋ฏธ์ง€ ์บ์‹ฑ์˜ ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.. ์˜ค๋Š˜์€ ์–ด๋–ค ๋ฌธ์ œ์ ๋“ค์ด ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ–ˆ๋Š”์ง€ ๊ทธ ๊ณผ์ •์„ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..

 

๊ธฐ์กด ์ด๋ฏธ์ง€ ์บ์‹ฑ ์„ค๊ณ„์™€ ๊ตฌํ˜„์€,

 

[iOS] ๋ฉ”์ดํŠธ๋Ÿฌ๋„ˆ: ์ด๋ฏธ์ง€ ์บ์‹ฑ ์ ์šฉ๊ธฐ(๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ, ๋””์Šคํฌ ์บ์‹ฑ ๊ทธ๋ฆฌ๊ณ  ETag)

๋ฉ”์ดํŠธ ๋Ÿฌ๋„ˆ ์•ฑ ๊ฐœ๋ฐœ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๋Š” ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค! GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป

jeonyeohun.tistory.com

์—ฌ๊ธฐ์— ์žˆ์–ด์š”! ์•ž ๊ธ€์„ ์ฝ์ง€ ์•Š์•„๋„ ์ดํ•ด๋Š” ๋˜์‹œ๊ฒ ์ง€๋งŒ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ์ฝํž๊ฑฐ์˜ˆ์š”!

 

๋ฌธ์ œ 1 - NSCache์˜ ์ •์ฑ… (๋ถ€์ œ: ๋ฌธ์„œ๋Š” ์ฝ์–ด๋ณด๊ณ  ์ผ๋‹ˆ?)

์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ์ ์€ NSCache์— ๋Œ€ํ•œ ํ•™์Šต์ด ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ตฌํ˜„์„ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. 

์ €ํฌ๋Š” NSCache๋ฅผ ์ด๋ ‡๊ฒŒ ์ •์ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋‘๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ์š”, ๊ทธ๋•Œ๋„ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๊ธด ํ–ˆ์ง€๋งŒ..

์ด๋ ‡๊ฒŒ ์ฒซ์ค„์— auto-eviction policies ๋ผ๋Š” ๋ง๋งŒ ๋ณด๊ณ  '์•„~ ์•Œ์•„์„œ ํ•ด์ฃผ๋Š”๊ตฌ๋‚˜'๋ผ๊ณ  ๋„˜์–ด๊ฐ€ ๋ฒ„๋ฆฐ๊ฑฐ์ฃ ..

์‹ค์ œ๋กœ๋Š” ์•„๋ž˜์— ํ”„๋กœํผํ‹ฐ ๋ชฉ๋ก์„ ๋ณด๊ฒŒ๋˜๋ฉด countLimit๊ณผ totalCostLimit์„ ํ†ตํ•ด์„œ ์บ์‹œ ์ •์ฑ…์„ ์ˆ˜ํ–‰ํ•  ์‚ฌ์ด์ฆˆ๋ฅผ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๊ฐ’์„ ๋””ํดํŠธ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ญ”๊ฐ€ NSCache๊ฐ€ ๋‹ค ์•Œ์•„์„œ ํ•ด์ค„ ๊ฒƒ์ด๋ผ๋Š” ๋ฏฟ์Œ์ด ๊ทธ๋•Œ๋Š” ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋žฌ๋‹ˆ..

 

๋ง‰์ƒ ๋ฌธ์„œ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ฉดใ…‹ใ…‹ใ…‹ ๋””ํดํŠธ๋Š” 0์ด๊ณ  0์ผ ๋•Œ๋Š” limit์ด ์—†๋‹ค๊ณ  ํ•ด์š”ใ…‹ใ…‹ใ…‹ ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ง๋งŒ ์บ์‹ฑ์ด์ง€ ๊ทธ๋ƒฅ ๋ฉ”๋ชจ๋ฆฌ์— ๋˜๋Š”๋Œ€๋กœ ๋‹ค ์ €์žฅํ•˜๊ณ  ์žˆ์—ˆ๋˜๊ฑฐ์ฃ .. 

 

๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ์นœ๊ตฌ๋ฐ์ดํ„ฐ๋ฅผ ๋งŽ์ด ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ํŒ€์›๋“ค์ด ๊ฐ๊ฐ ๊ณ„์ •์„ ๊ฐ€์ง„์ฑ„๋กœ 4๋ช…์˜ ๋ฐ์ดํ„ฐ๋งŒ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์•„ ์žก์•„๋จน๋Š”๋‹ค๋Š” ๊ฑธ ๋Š๋ผ์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹คใ…  

 

ํ•ด๊ฒฐ - ์ •์ฑ…์„ ๊ฐœ์„ ํ•˜์ž: totalCostLimit

์œ„์—์„œ ๋ณธ ๊ฒƒ ์ฒ˜๋Ÿผ NSCache์˜ ์ •์ฑ…์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํฌ๊ธฐ ์ œํ•œ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์„ํ…๋ฐ์š”, ๋‘ ์ข…๋ฅ˜์˜ ์ œํ•œ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” totalCostLimit์ด๊ณ , ํ•˜๋‚˜๋Š” countLimit์ด์—์š”.

 

์ด๋ฆ„์—์„œ ์œ ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜์ฃ ? totalCostLimit์€ ๊ฐœ์ˆ˜์™€ ์ƒ๊ด€์—†์ด NSCache์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์˜ cost์— ์ œํ•œ์„ ๋‘๋Š” ๊ฒƒ์ด๊ณ , countLimit์€ ๊ฐœ์ˆ˜์— ์ œํ•œ์„ ๋‘๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 

 

์ €ํฌ ์•ฑ์—์„œ๋Š” totalCostLimit์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”, cost์—๋Š” ์–ด๋–ค ๊ฐ’์ด๋“  ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฏธ์ง€์˜ ์šฉ๋Ÿ‰์„ cost๋กœ ์‚ผ์•„์„œ ์ผ์ • ์šฉ๋Ÿ‰์ด ๋„˜์–ด๊ฐ€๋ฉด NSCache์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„์›Œ์ค„ ์ˆ˜ ์žˆ๋„๋ก ์˜๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ธฐ์กด์— ์ด๋ ‡๊ฒŒ ์ €์žฅํ•˜๋˜ ์ด๋ฏธ์ง€๋ฅผ,

์ด๋ ‡๊ฒŒ cost์™€ ํ•จ๊ป˜ ์ €์žฅํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ €์žฅํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. imageData๋Š” Data ํƒ€์ž…์ด๊ณ , Data ํƒ€์ž…์˜ count ํ”„๋กœํผํ‹ฐ๋Š” ๋ฐ”์ดํŠธ ์นด์šดํŠธ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ cost๋กœ ์ €์žฅ์ด๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ ๋””ํดํŠธ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์šฉ๋Ÿ‰์„ ์ •ํ•ด์ฃผ์–ด์•ผ๊ฒ ์ฃ ?

๋จผ์ € ์ด๋ฏธ์ง€ ์บ์‹œ์— ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด CostLimit์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  SceneDelegate์—์„œ ์•ฑ์ด ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค 

NSCache์˜ costLimit์„ 50๋ฉ”๊ฐ€๋ฐ”์ดํŠธ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ž˜ ๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ œํ•œ ์šฉ๋Ÿ‰์„ 2๋ฉ”๊ฐ€๋ฐ”์ดํŠธ๋กœ ์ค„์ด๊ณ  ํ™•์ธํ•ด๋ณผ๊ฒŒ์š”!

 

ํ…Œ์ŠคํŠธ - 2.5 MB์—์„œ ์บ์‹ฑ ์ •์ฑ…์ด ์ ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

๋จผ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ NSCacheDelegate๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์ฑ„ํƒํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. Delegate ๋ฉ”์„œ๋“œ ์ค‘์—์„œ willEvictObject๊ฐ€ ์žˆ์–ด์„œ NSCache์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์›Œ์งˆ ๋•Œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์›Œ์ง€๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”.

 

์ถ”๊ฐ€์ ์œผ๋กœ memory hit ์ƒํ™ฉ๊ณผ disk hit ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ถœ๋ ฅ๋„ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

์ œ ์นœ๊ตฌ ๋ชฉ๋ก์—” ์ด๋ ‡๊ฒŒ ๊ทธ๋ฆฌ์šด ๋‘ ๋ถ„์ด ์žˆ๋Š”๋ฐ์š”, ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ์นœ๊ตฌ๋ชฉ๋ก์— ๋“ค์–ด๊ฐ€๋ฉด

์ด์ „์— ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•˜๋˜ ์ด๋ฏธ์ง€ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ˜์†”์— ๋””์Šคํฌ ํžˆํŠธ๊ฐ€ ์ฐํžˆ๊ณ , ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋„ ์ตœ์‹ ๋ณธ์ด๊ธฐ ๋•Œ๋ฌธ์— 304๊ฐ€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ์˜ ์‘๋‹ต์œผ๋กœ ๋Œ์•„์˜จ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋””์Šคํฌ ์บ์‹œ ํžˆํŠธ๊ฐ€ ๋˜์—ˆ์œผ๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ๊ฒ ์ฃ .

 

๊ทธ๋Ÿฐ๋ฐ ์ค‘๊ฐ„์— evicted๊ฐ€ ์ฐํ˜€์žˆ๋„ค์š”! etag๋ฅผ ๋ณด๋‹ˆ ๋‘๋ฒˆ์งธ ์‚ฌ์ง„์ด ๋จผ์ € ์บ์‹œ์— ์˜ฌ๋ผ๊ฐ€๊ณ  ์ฒซ๋ฒˆ์งธ ์‚ฌ์ง„์„ ์บ์‹œ์— ๋„ฃ์œผ๋ ค๊ณ  ํ•  ๋•Œ ์บ์‹œ์— ์žˆ๋˜ ์‚ฌ์ง„์ด ์‚ญ์ œ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ์ง€๊ธˆ NSCache์˜ ์ตœ๋Œ€ ํ—ˆ์šฉ cost๊ฐ€ ๋Œ€๋žต 2.5mb์ด๋‹ˆ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์‚ฌ์ง„๋งŒ ์บ์‹œ์— ์œ ์ง€ํ•˜๊ฒŒ ๋˜๋Š”๊ฑฐ์ฃ . 

 

์ž˜ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

 

๋ฌธ์ œ 2 - ๋””์Šคํฌ ์บ์‹œ ์ •์ฑ…

๋‘๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ๋””์Šคํฌ ์บ์‹œ ์ •์ฑ…์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ธ๋ฐ์š”, ๋‘๊ฐ€์ง€ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‹ค์‹œ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

2-1 ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ๊ฐฑ์‹ 

๊ฐ€์žฅ ์–ด์ด์—†์—ˆ๋˜ ๋ฌธ์ œ๋Š” ๋””์Šคํฌ ์บ์‹œ๊ฐ€ ํžˆํŠธ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.(NSCache ์ •์ฑ…์˜ ์˜ˆ์ œ๋Š” ์ด๋ฏธ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์นœ ์ฝ”๋“œ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค!) 

 

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด FileManager๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ•œ ๋ฒˆ ํ™•์ธํ•˜๊ณ  ์žˆ์œผ๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜์„ ํ•ด์ฃผ๊ณ  ์žˆ๋Š”๋ฐ์š”, ๋ฌธ์ œ๋Š” ๋””์Šคํฌ ์บ์‹œ๊ฐ€ ํžˆํŠธ๋˜์—ˆ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ์žˆ์ง€ ์•Š๊ณ  ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉด ๋””์Šคํฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ์„œ๋ฒ„๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๊ธฐ ์ „๊นŒ์ง€๋Š” ๋งค๋ฒˆ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋””์Šคํฌ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋‹ˆ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ์ฃ . ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋””์Šคํฌ๋ฅผ ์ฝ๋Š” ์‹œ๊ฐ„์ด ๋” ๊ธฐ๋‹ˆ๊นŒ์š”.

 

์ด ๋ถ€๋ถ„์€ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋ผ์„œ ๋น ๋ฅด๊ฒŒ ์ˆ˜์ •ํ–ˆ์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์•„์„œ ์•„์‰ฝ๋„ค์š”ใ… 

 

2-2 ๋””์Šคํฌ ์บ์‹œ ์‚ญ์ œ

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ ์€ ๋””์Šคํฌ์— ํ•œ ๋ฒˆ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์นœ๊ตฌ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋””์Šคํฌ์—๋Š” ์ ์  ์ด๋ฏธ์ง€๋“ค์ด ์Œ“์ด๊ณ , ์ด๊ฑด ์•ฑ ์šฉ๋Ÿ‰์„ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐ๋ณด๋‹ค ์ข‹์ง€์•Š์€ ์ƒํ™ฉ์ด์—ˆ์–ด์š”.

 

ํ•ด๊ฒฐ - ๋””์Šคํฌ ์บ์‹œ ์ •์ฑ…์„ ๊ฐœ์„ ํ•˜์ž

์ •์ฑ… ์ ์šฉ ๊ธฐ์ค€

๋จผ์ € ํ•  ์ผ์€ 2-2๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด์—ˆ์–ด์š”. ์™œ๋ƒํ•˜๋ฉด ๋””์Šคํฌ ์บ์‹œ๋ฅผ ๋น„์›Œ์ฃผ๋Š” ๊ธฐ์ค€์„ ์šฉ๋Ÿ‰์œผ๋กœ ํ• ์ง€, ๊ฐœ์ˆ˜๋กœ ํ• ์ง€์™€ ๊ฐ™์ด ๋” ์„ธ๋ถ€์ ์ธ ์ •์ฑ…์„ ๊ฒฐ์ •ํ•˜๊ฒŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ์ €์žฅํ•  ๊ฐ์ฒด๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ฑฐ๋“ ์š”. 

 

์ œ๊ฐ€ ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. NSCache ์ฒ˜๋Ÿผ ๋””์Šคํฌ์— ์ €์žฅ๋œ ์‚ฌ์ง„์ด ์ผ์ • ๊ฐœ์ˆ˜๋ฅผ ๋„˜์œผ๋ฉด ์‚ญ์ œ๋ฅผ ํ•˜๊ฑฐ๋‚˜, ์ผ์ • ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋ฉด ์‚ญ์ œํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ์ฃ . 

 

์ฒ˜์Œ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์ฒ˜๋Ÿผ ์šฉ๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ์š”, ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜๊ฒŒ ๊ทธ๋Ÿผ File Manager๋กœ ๋ชจ๋“  ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์ ธ์™€ ์ฝ์–ด์„œ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ์–ด์•ผํ•˜๊ณ , ์ด๋Ÿฐ ๊ณผ์ •์ด ํ•œ๋ฒˆ ์šฉ๋Ÿ‰์ด ์ดˆ๊ณผ๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— IO์— ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์ผ์ • ๊ฐœ์ˆ˜๊ฐ€ ๋„˜์œผ๋ฉด ๋ฐ์ดํ„ฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ• ๊ฑด๋ฐ?

NSCache๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ญ์ œํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„๊นŒ์ง€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜์—ˆ์ง€๋งŒ, ๋””์Šคํฌ ์บ์‹œ์˜ ๊ฒฝ์šฐ์—๋Š” ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์บ์‹œ ์ •์ฑ…์„ ์„ค์ •ํ•ด์•ผ ํ–ˆ๋Š”๋ฐ์š”, ์ผ๋ฐ˜์ ์œผ๋กœ ์บ์‹œ์— ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” LRU(Least Recently Used) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

์ €ํฌ ์•ฑ์—์„œ๋Š” ์นœ๊ตฌ ํ”„๋กœํ•„์„ ๋ณด๊ฑฐ๋‚˜ ๋Œ€๊ฒฐํ•  ๋•Œ, ๊ทธ๋ฆฌ๊ณ  ์นœ๊ตฌ์˜ ๋ชฉ๋ก์„ ๋ณผ ๋•Œ ์ด๋ฏธ์ง€ ์บ์‹ฑ์ด ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ๋ณด๊ธฐ ์•Š๋Š” ์นœ๊ตฌ์ผ ์ˆ˜๋ก ์•ž์œผ๋กœ๋„ ๋” ๋ณด์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์ฃ . ๊ทธ๋ž˜์„œ LRU๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. LRU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด LFU(Least Frequently Used)๋„ ์ข‹์€ ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”! ๋Œ€๊ฒฐ์„ ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ด€์‹ฌ์ด ์—†๋Š” ์นœ๊ตฌ์ผ ์ˆ˜๋ก ์ด๋ฏธ์ง€ ์‚ฌ์šฉ ํšŸ์ˆ˜๊ฐ€ ์ ์„ ํ…Œ๋‹ˆ๊นŒ์š”. 

 

๊ตฌํ˜„ - ์บ์‹ฑ๋˜๋Š” ์ด๋ฏธ์ง€์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ LRU ์ ์šฉ

๋จผ์ € LRU๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์ง„์„ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•ด์ฃผ์–ด์•ผํ–ˆ๋Š”๋ฐ์š”, ์ด๋ฅผ ์œ„ํ•ด์„œ ๊ธฐ์กด์— ์บ์‹ฑํ•œ ์ด๋ฏธ์ง€์™€ ETag๋ฅผ ์ €์žฅํ•˜๋˜ ๊ฐ์ฒด๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ ‡๊ฒŒ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์™€ ETag๋ฅผ ์ €์žฅํ•˜๋˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ,

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์ง„์„ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์„ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด ๊ณผ์ •์—์„œ CacheInfo ํƒ€์ž…์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ์š”, ํ˜„์žฌ ๊ตฌ์กฐ์—์„œ๋Š” ์ด๋ฏธ์ง€๋Š” FileManager๋กœ ๋””์Šคํฌ์—, ETag๋Š” UserDefaults์— ์ €์žฅํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์„ ETag์™€ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•  ๋•Œ๋Š”, ๊ธฐ์กด์—๋Š” ๋ณ„ ๋‹ค๋ฅธ ์ •์ฑ…์ด ์—†์–ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ €์žฅํ•˜๋˜ ๋กœ์ง์„ ๋” ๋ณต์žกํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋žฌ๋˜ ๋””์Šคํฌ ์ €์žฅ ๋กœ์ง์ด,

์ด๋ ‡๊ฒŒ ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค..ใ…Žใ…Ž

 

ํ•ต์‹ฌ์ ์œผ๋กœ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„์„ ์ฒœ์ฒœํžˆ ๋ณต๊ธฐํ•ด๋ณผ๊ฒŒ์š”.

๋จผ์ € ์ด ์ฝ”๋“œ๊ฐ€ ์ •์ฑ…์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์ฝ”๋“œ์ธ๋ฐ์š”, FileManager๋ฅผ ํ†ตํ•ด ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์— ์žˆ๋Š” ํŒŒ์ผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฐœ์ˆ˜๊ฐ€ 50๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๋กœ์ง์ด ์‹คํ–‰๋˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

๋กœ์ง์„ ์‚ดํŽด๋ณด์ฃ !

๊ฐ€์žฅ ๋จผ์ € UserDefaults์— ์ €์žฅ๋œ ๋ชจ๋“  ํ‚ค์™€ ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์„ ์ˆœํšŒํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐ˜๋ณต๋ฌธ์„ ๋งค๋ฒˆ ๋Œ์•„์ฃผ์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋Š”๋ฐ, ์ด๋ฏธ์ง€๋ฅผ ๊ฐœ์ˆ˜๋กœ ์ €์žฅํ•˜๊ณ  ์•ฑ์—์„œ UserDefaults์— ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์™€ ๊ฐ™์€ ์ •๋ณด ์™ธ์—๋Š” ๋ณ„๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹ ๊ฒƒ ๊ฐ™์•„์š”. ํ•˜์ง€๋งŒ ํ™•์žฅ์„ฑ์„ ์ƒ๊ฐํ•˜๋ฉด ๊ทธ๋‹ค์ง€ ์ข‹์€ ์„ ํƒ์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹คใ… 

 

์•„๋ฌดํŠผ ๋จผ์ € value๋กœ ์ฝ์–ด์˜จ ๋ฐ์ดํ„ฐ๋“ค ์ค‘์—์„œ ์•„๊นŒ ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ๋˜ CacheInfo ํƒ€์ž…์œผ๋กœ ๋””์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์บ์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ์š”.

๋””์ฝ”๋”ฉ์€ ๋‹จ์ˆœํ•˜๊ฒŒ JSONDecoder๋กœ CacheInfo ํƒ€์ž…์œผ๋กœ ๋””์ฝ”๋”ฉ์„ ํ•ด์ฃผ๊ณ  ์žˆ์–ด์š”.

๊ทธ๋ฆฌ๊ณ  ๋””์ฝ”๋”ฉํ•ด์„œ ์–ป์€ ๋ฐ์ดํ„ฐ์˜ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์˜›๋‚ ์— ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ๊ฐฑ์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ Key๋Š” ๋””์Šคํฌ์—์„œ ์ด๋ฏธ์ง€ ์ €์žฅ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฏธ์ง€ ์š”์ฒญ ์ฃผ์†Œ์ด๊ณ , value๋Š” ETag์™€ lastRead๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” CacheInfo ๊ฐ์ฒด์ด๊ฒ ์ฃ ?

๊ฐ€์žฅ ์˜ค๋ž˜์ „์— ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณจ๋ผ๋‚ด๋ฉด ๊ทธ๋Œ€๋กœ ๊ทธ ํ‚ค ๊ฐ’์„ ์ธ์ž๋กœ ๋„˜๊ฒจ FileManager๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

 

์‚ญ์ œ๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ๋””์Šคํฌ์™€ UserDefaults๋ฅผ ๋น„์›Œ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด์š”.

์‚ญ์ œ๊ฐ€ ๋๋‚˜๋ฉด ์›๋ž˜ํ•˜๋˜๋Œ€๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€์˜ CacheInfo๋ฅผ ์ธ์ฝ”๋”ฉํ•ด UserDefaults์— ๋„ฃ์–ด์ฃผ๊ณ , FileManager๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•œ ๋’ค ์ „์ฒด ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค, ์ฆ‰, ๋ฉ”๋ชจ๋ฆฌ ํžˆํŠธ, ๋””์Šคํฌ ํžˆํŠธ๋งˆ๋‹ค lastRead ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ์–ด์•ผ๊ฒ ์ฃ ?

๊ทธ๋ž˜์„œ ์‚ฌ์šฉํ•œ ์‹œ๊ฐ„์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ๋‚ด๋ถ€์—์„œ๋Š” UserDefaults์— ์ƒˆ๋กญ๊ฒŒ ๊ฐ’์„ ์จ์ฃผ๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋””์Šคํฌ ํžˆํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„ ๋ฌธ์ œ์˜€๋˜ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด๋ฏธ์ง€์˜ ์‚ฌ์šฉ์‹œ๊ฐ„์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๋Š” ๊ฒƒ ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ - 2๊ฐœ ๊นŒ์ง€๋งŒ ์ €์žฅ ๊ฐ€๋Šฅ 

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ๋””์Šคํฌ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ตœ๋Œ€ 2๊ฐœ๋กœ ์„ค์ •ํ•˜๊ณ  ์ง„ํ–‰ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋จผ์ € ์นœ๊ตฌ ๋ชฉ๋ก์— ํ•œ ๋ฒˆ ๋“ค์–ด๊ฐ€์„œ ์ด๋ฏธ์ง€ ๋‘ ๊ฐœ๋ฅผ ๋””์Šคํฌ์— ์บ์‹ฑํ•ด๋‘๊ณ ,

ํ”„๋กœํ•„ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด ์ œ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ์บ์‹ฑํ•˜๋ฉด ๊ธฐ์กด ์ด๋ฏธ์ง€ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ง€์›Œ์ง€๊ฒ ์ฃ ? ์ด๋•Œ ์‚ญ์ œ๋˜๋Š” ์‚ฌ์ง„์ด minji ๋ผ๊ณ  ํ•ด๋ด…์‹œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•ฑ์„ ๊บผ์„œ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ๋น„์›Œ์ฃผ๊ณ  ๋‹ค์‹œ ์นœ๊ตฌ๋ชฉ๋ก์œผ๋กœ ์ด๋™ํ•˜๋ฉด minji ์‚ฌ์ง„์„ ๋‹ค์‹œ ์บ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ์ง€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ด๋ฏธ์ง€๊ฐ€ ์‚ญ์ œ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํŒŒ์ผ์ด ์‚ญ์ œ๋˜๋Š”์ง€๋Š” FileManager์—์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•  ๋•Œ ๊ทธ ๊ฒฝ๋กœ๋ฅผ ์ฝ˜์†”์— ์ฐ์–ด๋ณผ๊ฒŒ์š”!

 

์ผ๋‹จ ์นœ๊ตฌ๋ชฉ๋ก์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋ฐ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ์—๋„ ์ €์žฅ์ด ๋˜์—ˆ๊ฒ ๋„ค์š”.

 

์ด์ œ ์ œ ํ”„๋กœํ•„๋กœ ์ด๋™ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ œ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ์ƒˆ๋กœ ๋‚ด๋ ค๋ฐ›์•˜๊ณ , ํ•œ๋ฒˆ์— ๋‘ ๊ฐœ๊นŒ์ง€๋งŒ ์ €์žฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์ฐํžŒ ์ฝ˜์†”์„ ๋ณด๋ฉด ์—ฌ๊ธฐ์„œ minji ์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„์ด ๋””์Šคํฌ์—์„œ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์„ ํ•œ๋ฒˆ ๊บผ์„œ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋ฅผ ๋น„์›Œ์ฃผ๊ณ  ์นœ๊ตฌ๋ชฉ๋ก์œผ๋กœ ๋‹ค์‹œ ์ด๋™ํ•ด๋ณผ๊ฒŒ์š”! 

 

๋จผ์ € yujin์— ๋Œ€ํ•œ ํžˆํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š”! 304๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ์œผ๋‹ˆ ์ด๋ฏธ์ง€๋Š” ๊ฐฑ์‹ ํ•˜์ง€ ์•Š์ง€๋งŒ lastRead๋Š” ๊ฐฑ์‹ ๋˜์—ˆ๊ฒ ์ฃ ? ๊ทธ ๋‹ค์Œ์—” minji๋ฅผ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—” ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ดˆ๊ณผํ–ˆ์œผ๋‹ˆ ์‚ญ์ œ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•˜๋Š”๋ฐ yujin์€ ๋ฐฉ๊ธˆ ์‚ฌ์šฉํ–ˆ์œผ๋‹ˆ ๊ฐ€์žฅ ์˜ค๋ž˜์ „์— ์‚ฌ์šฉ๋œ ์ œ ํ”„๋กœํ•„ ์‚ฌ์ง„์ด ์‚ญ์ œ๋˜๊ฒ ๋„ค์š”.

 

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ์ฝ˜์†”์— ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ œ ํ”„๋กœํ•„ ์‚ฌ์ง„์ธ hunihun95๊ฐ€ ์‚ญ์ œ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋งˆ๋ฌด๋ฆฌ, ๋” ๊ฐœ์„ ํ•  ์ 

์ด๋ ‡๊ฒŒ ํ•ด์„œ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„์—๋Š” ๊ตฌํ˜„์— ๊ธ‰๊ธ‰ํ•ด ๋†“์นœ๋ถ€๋ถ„๋“ค์„ ๊ฐœ์„ ํ–ˆ๋˜ ์ž‘์—…๋“ค์„ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ •๋ฆฌํ•˜๋ฉด์„œ ์ด๋Ÿฐ์ €๋Ÿฐ ๋ฒ„๊ทธ๋“ค์„ ๋ฐœ๊ฒฌํ•ด์„œ ๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๋Š๋ผ ์‹œ๊ฐ„์„ ๋งŽ์ด ์ผ์–ด์š”..ใ…Žใ…Ž ์ผ๋‹จ ์ฒ˜์Œ ์˜๋„ํ–ˆ๋˜๋Œ€๋กœ ์ž˜ ๋™์ž‘ํ•˜์ง€๋งŒ ๋ช‡๊ฐ€์ง€ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

1) UserDefaults, FileManager๋กœ ์•ˆ๋‚˜๋ˆ„๊ณ  CoreData๋กœ ํ•œ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ๋‚˜์•˜์„ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์–ด์š”. ๋‹จ์ˆœํžˆ lastRead ํ”„๋กœํผํ‹ฐ๊ฐ€ ํ•˜๋‚˜ ์ถ”๊ฐ€๋œ ๊ฒƒ ๋ฟ์ธ๋ฐ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๋”๋ผ๊ตฌ์š”.. ํ™•์žฅ์„ฑ์„ ์œ„ํ•ด์„œ๋Š” ๋กœ์ปฌ ๋””๋น„๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ์ข‹์•˜์„ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

2) ๋˜, ๋””์Šคํฌ ์บ์‹œ์—์„œ LRU๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ด๊ฒŒ ์ง„์งœ ๋งž๋‚˜ ์‹ถ์€ ์ƒ๊ฐ์ด ๋งŽ์ด ๋“ค์—ˆ์–ด์š”.. ์–ด์จŒ๋“  UserDefaults์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋ถ€ ๋‹ค ๋Œ๋ฉด์„œ ๋””์ฝ”๋”ฉ์„ ์‹œ๋„ํ•ด์•ผํ•˜๋‹ˆ๊นŒ ์ข‹์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋Š๊ปด์กŒ๊ฑฐ๋“ ์š”. ์งง์€ ์‹œ๊ฐ„์— ๊ธฐ์กด ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ ค๋‹ค๋ณด๋‹ˆ ์ง€๊ธˆ์€ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ด๋ผ๊ณ  ๋Š๊ผˆ๋Š”๋ฐ, ์ดํ›„์— ์—ฌ์œ ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ทธ๋ฆฌ๊ณ  ์šฉ๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ์บ์‹œ ์ •์ฑ…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š”๊ฒŒ ์ตœ์„ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

3) ๊ฐœ์ˆ˜๋กœ ์ •์ฑ…์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋„ ์ข‹๋‹ค๊ณ ๋Š” ์ƒ๊ฐ์ด ๋“ค์ง€ ์•Š๋„ค์š”ใ…  ์ €ํฌ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋”ฐ๋กœ ๋‹ค์šด์ƒ˜ํ”Œ๋ง์„ ํ•˜์ง€ ์•Š์œผ๋‹ˆ๊นŒ ์นœ๊ตฌ๊ฐ€ ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€์— ๋”ฐ๋ผ์„œ ๋””์Šคํฌ์บ์‹œ์— ์ฐจ์ง€ํ•˜๋Š” ์šฉ๋Ÿ‰์ด ์ฒœ์ฐจ๋งŒ๋ณ„์ด ๋  ๊ฒƒ ๊ฐ™์•„์š”. 

 

4) ์ •์ฑ…์— ์˜ํ•ด ๋””์Šคํฌ์—์„œ ์ด๋ฏธ์ง€๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋„ ๋น„์›Œ์ฃผ์–ด์•ผ ํ• ๊นŒ์š”? ์–ด์ฐจํ”ผ ๋‚ด๋ถ€ ์ •์ฑ…์— ์˜ํ•ด ์‚ญ์ œ๊ฐ€ ๋ ํ…Œ๊ณ , ์บ์‹œ์˜ ๋ชฉ์ ์€ ํžˆํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œํ•ด์ฃผ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ฑ์„ ๊ป๋‹ค๊ฐ€ ํ‚ค๋ฉด ๋””์Šคํฌ์—๋Š” ๋‚จ์•„์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ๋ฐ›๊ฒŒ ๋˜๊ฒ ์ฃ . ์ด ๋ถ€๋ถ„์€ ๋” ๊ณ ๋ฏผํ•ด๋ด์•ผํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์˜ค๋Š˜๋„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ €ํฌํŒ€์˜ ํ”„๋กœ์ ํŠธ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์œ„ํ‚ค์—๋Š” ๋” ์žฌ๋ฏธ์žˆ๋Š” ๋‚ด์šฉ๋“ค๋„ ๋งŽ์œผ๋‹ˆ ๋†€๋Ÿฌ์˜ค์„ธ์š”~~

 

 

GitHub - boostcampwm-2021/iOS06-MateRunner: ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ

ํ•จ๊ป˜ ๋‹ฌ๋ฆฌ๋Š” ์ฆ๊ฑฐ์›€, Mate Runner ๐Ÿƒ๐Ÿป‍โ™‚๏ธ๐Ÿƒ๐Ÿป‍โ™€๏ธ. Contribute to boostcampwm-2021/iOS06-MateRunner development by creating an account on GitHub.

github.com