[iOS] ๋ฉ์ดํธ๋ฌ๋: ๋ฐ์ชฝ์ง๋ฆฌ ์ด๋ฏธ์ง ์บ์ ๊ฐ์ ํ๊ธฐ
๋ฉ์ดํธ ๋ฌ๋ ์ฑ ๊ฐ๋ฐ ๊ณผ์ ์ ๊ณต์ ํ๋ ํฌ์คํธ์ ๋๋ค!
์ฌ๊ธฐ์ ์ ํฌ ํ๋ก์ ํธ๋ฅผ ๋ ์์ธํ ๋ณผ ์ ์์ด์!
๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค!
์ถฉ๊ฒฉ๊ณผ ๊ณตํฌ.. ๋ด๊ฐ ๋ง๋ ์ด๋ฏธ์ง ์บ์ฑ์ ๋ฐ์ชฝ์ง๋ฆฌ์๋ค!
๋ฟ๋ฏํ๊ฒ ํ๋ก์ ํธ๋ ๋ง์น๊ณ ํ๋ฌ์ด ๋์ด์์ผ ๊ตฌํํ๋ ์ด๋ฏธ์ง ์บ์ฑ์ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๊ฒ ๋์์ต๋๋ค.. ์ค๋์ ์ด๋ค ๋ฌธ์ ์ ๋ค์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๊ฐ์ ํ๋์ง ๊ทธ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค..
๊ธฐ์กด ์ด๋ฏธ์ง ์บ์ฑ ์ค๊ณ์ ๊ตฌํ์,
์ฌ๊ธฐ์ ์์ด์! ์ ๊ธ์ ์ฝ์ง ์์๋ ์ดํด๋ ๋์๊ฒ ์ง๋ง ๋ ์์ํ๊ฒ ์ฝํ๊ฑฐ์์!
๋ฌธ์ 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) ์ ์ฑ ์ ์ํด ๋์คํฌ์์ ์ด๋ฏธ์ง๊ฐ ์ญ์ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์บ์์ ์๋ ๋ฐ์ดํฐ๋ ๋น์์ฃผ์ด์ผ ํ ๊น์? ์ด์ฐจํผ ๋ด๋ถ ์ ์ฑ ์ ์ํด ์ญ์ ๊ฐ ๋ ํ ๊ณ , ์บ์์ ๋ชฉ์ ์ ํํธ๋ฅผ ๋ง๋ค์ด์ ๋ค์ด๋ก๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด์๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ ์ญ์ ํด์ฃผ์ง ์์์ต๋๋ค. ํ์ง๋ง ์ฑ์ ๊ป๋ค๊ฐ ํค๋ฉด ๋์คํฌ์๋ ๋จ์์์ง ์๊ธฐ ๋๋ฌธ์ ๋ค์ ๋ค์ด๋ก๋๋ฐ๊ฒ ๋๊ฒ ์ฃ . ์ด ๋ถ๋ถ์ ๋ ๊ณ ๋ฏผํด๋ด์ผํ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๋๋ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ ํฌํ์ ํ๋ก์ ํธ๋ ๊นํ๋ธ์์ ํ์ธํ ์ ์๊ณ , ์ํค์๋ ๋ ์ฌ๋ฏธ์๋ ๋ด์ฉ๋ค๋ ๋ง์ผ๋ ๋๋ฌ์ค์ธ์~~
'๐ ์์ด-์ค-์์ค > ๐ฑ iOS ๊ฐ๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] NSCache์ ์บ์ ์ ์ฑ ๋ฏ์ด๋ณด๊ธฐ (2) | 2022.02.08 |
---|---|
[iOS] ์ฑ ์๋๋ฐ์ค์ iOS์ ํ์ผ ์์คํ (2) | 2022.01.21 |
[iOS] view.layer์ ์ ์ฒด๋ฅผ ์ฐพ์์ (1) | 2022.01.15 |
[iOS] required init?(coder: NSCoder)์ ์ ์ฒด๋ฅผ ์ฐพ์์ (1) | 2022.01.11 |
[iOS] ๊ณต์๋ฌธ์๋ก ๊ณต๋ถํ๋ URLSession (2) | 2022.01.11 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote